@kerabie/realtime-audio
v0.1.3
Published
Live two-way audio for Expo and React Native: microphone capture with echo cancelling and PCM playback, for voice AI
Maintainers
Readme
@kerabie/realtime-audio
Live two-way audio for Expo and React Native: the microphone streams to JavaScript as PCM16 16 kHz mono with echo cancelling and noise suppression, and PCM16 16 kHz chunks play back with low latency. It is what the Kerabie voice orb (react-native-kerabie-helpdesk/voice) uses, and it can be used on its own for any voice AI.
Based on expo-two-way-audio by Speechmatics (MIT), rebuilt for current Expo: no removed Objective-C helpers, so it builds on Expo SDK 54 and later without patches, and it adds clearPlayback().
- iOS:
AVAudioEnginewith voice processing (system echo cancelling). - Android:
AudioRecordwith theVOICE_COMMUNICATIONsource,AcousticEchoCancelerandNoiseSuppressor.
npx expo install @kerabie/realtime-audioAdd the microphone description (iOS) and make a new build; Android needs no setup (RECORD_AUDIO is requested at run time).
{ "expo": { "ios": { "infoPlist": { "NSMicrophoneUsageDescription": "Used to talk to the assistant" } } } }import {
initialize, toggleRecording, playPCMData, clearPlayback, tearDown,
requestMicrophonePermissionsAsync, addKerabieRealtimeAudioEventListener,
} from '@kerabie/realtime-audio';
await requestMicrophonePermissionsAsync();
await initialize();
addKerabieRealtimeAudioEventListener('onMicrophoneData', ({ data }) => send(data)); // Uint8Array, PCM16 16 kHz
toggleRecording(true);
playPCMData(chunk); // PCM16 16 kHz
clearPlayback(); // the customer spoke over the AI: drop what is queued
tearDown();Events: onMicrophoneData, onInputVolumeLevelData, onOutputVolumeLevelData (0 to 1), onRecordingChange, onAudioInterruption. Echo cancelling does not work on a simulator: test on a real device.
