我想要制作的应用程序
我想制作像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发送数据。
目前唯一的问题是,它第一次不运行回调,而是第二次运行。