Expo:实时获取音频数据并通过Socket.IO发送



我想要制作的应用程序

我想制作像Shazam这样的带有的音频识别手机应用程序

  • 世博会
  • Expo AV(https://docs.expo.io/versions/latest/sdk/audio)
  • Tensorflow服务
  • Socket.IO

我想每秒或每个样本通过Socket.IO将记录数据发送到基于机器学习的识别服务器(可能每秒发送数据采样次数太多(,然后移动应用程序接收并显示预测结果。

问题

如何在recordingInstance录制时获取数据?我读了世博会的音频文件,但我不知道该怎么做。

到目前为止

我运行了两个示例:

  • https://github.com/expo/audio-recording-example
  • https://github.com/expo/socket-io-example

现在我想混合两个例子。感谢您的阅读。如果我能console.log记录数据,那会有很大帮助。

相关问题

  • https://forums.expo.io/t/measure-loudness-of-the-audio-in-realtime/18259
    这可能是不可能的(播放动画?实时获取数据?(

  • https://forums.expo.io/t/how-to-get-the-volume-while-recording-an-audio/44100
    无应答

  • https://forums.expo.io/t/stream-microphone-recording/4314
    根据这个问题,
    https://www.npmjs.com/package/react-native-recording
    似乎是一个解决方案,但它需要弹出。

我想我找到了解决这个问题的好办法。

await recordingInstance.prepareToRecordAsync(recordingOptions);
recordingInstance.setOnRecordingStatusUpdate(checkStatus);
recordingInstance.setProgressUpdateInterval(10000);
await recordingInstance.startAsync();
setRecording(recordingInstance);

在创建并准备录制之后,我添加了一个每10秒运行一次的回调函数。

const duration = status.durationMillis / 1000;
const info = await FileSystem.getInfoAsync(recording.getURI());
const uri = info.uri;
console.log(`Recording Status: ${status.isRecording}, Duration: ${duration}, Meterring: ${status.metering}, Uri: ${uri}`)
if(duration >10 && duration - prevDuration > 0){
sendBlob(uri);
}
setPrevDuration(duration);

回调函数检查持续时间是否大于10秒,并且上次持续时间之间的差值是否大于0,然后通过WebSocket发送数据。

目前唯一的问题是,它第一次不运行回调,而是第二次运行。

相关内容

  • 没有找到相关文章

最新更新