-
-
Notifications
You must be signed in to change notification settings - Fork 34
Closed
Description
Hi,
I’m using react-native-audio-api and I’d like to know the best way to:
- Play an AudioBufferSourceNode
- Record the microphone with AudioRecorder
- Start recording exactly when the buffer starts playing (same time reference)
Here is a very simplified example. The bufferSourceNode is passed in props:
import { AudioContext, AudioManager, AudioRecorder } from "react-native-audio-api";
type StartProps = {
audioContext: AudioContext;
bufferSourceNode: AudioBufferSourceNode;
};
let recorder: AudioRecorder | null = null;
let recordingStarted = false;
export async function start({ audioContext, bufferSourceNode }: StartProps) {
AudioManager.setAudioSessionOptions({
iosCategory: "playAndRecord",
iosMode: "spokenAudio",
iosOptions: ["defaultToSpeaker", "allowBluetoothA2DP"],
});
recorder = new AudioRecorder({
sampleRate: 44100,
bufferLengthInSamples: 44100 * 40,
});
const adapter = audioContext.createRecorderAdapter();
adapter.connect(audioContext.destination);
bufferSourceNode.onPositionChanged = (time) => {
if (!recordingStarted && recorder) {
recorder.start();
recordingStarted = true;
console.log("Recorder started at time", time.value);
}
};
bufferSourceNode.onPositionChangedInterval = 1;
bufferSourceNode.connect(audioContext.destination);
await audioContext.resume();
bufferSourceNode.start();
}This works, but using onPositionChanged looks more like a workaround than a real sync mechanism.
Do you have any best practice ?
Thank you
Metadata
Metadata
Assignees
Labels
No labels