react-native-audio-playback
Version:
Play sounds with lowest latency in React Native using Google Oboe for Android and Audio Unit for iOS
92 lines (77 loc) • 2.16 kB
text/typescript
import {
closeAudioStream,
getStreamState,
loadSound,
loopSounds,
openAudioStream,
pauseAudioStream,
playSounds,
seekSoundsTo,
setSoundsVolume,
setupAudioStream,
} from '../module';
import {
AndroidAudioStreamUsage,
IosAudioSessionCategory,
StreamState,
} from '../types';
import { Player } from './Player';
export class AudioManager {
public static shared = new AudioManager();
private constructor() {}
public setupAudioStream(options?: {
sampleRate?: number;
channelCount?: number;
ios?: {
audioSessionCategory?: IosAudioSessionCategory;
};
android?: {
usage?: AndroidAudioStreamUsage;
};
}) {
const sampleRate = options?.sampleRate ?? 44100;
const channelCount = options?.channelCount ?? 2;
const iosAudioSessionCategory =
options?.ios?.audioSessionCategory ?? IosAudioSessionCategory.Playback;
const androidUsage =
options?.android?.usage ?? AndroidAudioStreamUsage.Media;
setupAudioStream({
channelCount,
sampleRate,
ios: {
audioSessionCategory: iosAudioSessionCategory,
},
android: {
usage: androidUsage,
},
});
}
public openAudioStream(): void {
openAudioStream();
}
public pauseAudioStream(): void {
pauseAudioStream();
}
public closeAudioStream(): void {
closeAudioStream();
}
public async loadSound(asset: number) {
const id = await loadSound(asset);
return id ? new Player(id) : null;
}
public loopSounds(args: ReadonlyArray<[Player, boolean]>): void {
loopSounds(args.map(([player, loop]) => [player.id, loop]));
}
public playSounds(args: ReadonlyArray<[Player, boolean]>): void {
playSounds(args.map(([player, loop]) => [player.id, loop]));
}
public seekSoundsTo(args: ReadonlyArray<[Player, number]>): void {
seekSoundsTo(args.map(([player, timeInMs]) => [player.id, timeInMs]));
}
public setSoundsVolume(args: ReadonlyArray<[Player, number]>): void {
setSoundsVolume(args.map(([player, volume]) => [player.id, volume]));
}
public getStreamState(): StreamState {
return getStreamState();
}
}