Wat*_*e.N 7 sound-recognition socket.io react-native expo expo-av
我想制作像 Shazam 这样的音频识别移动应用程序
我想通过 Socket.IO 每秒或每个样本将记录数据发送到基于机器学习的识别服务器(也许每秒发送数据采样率次数太多),然后移动应用程序接收并显示预测结果。
如何在录音时获取数据recordingInstance?我读了世博会的音频文档,但我不知道该怎么做。
我跑了两个例子:
现在我想混合两个例子。感谢您的阅读。如果我能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
似乎是一个解决方案,但它需要喷射。
小智 0
我想我找到了解决这个问题的好方法。
await recordingInstance.prepareToRecordAsync(recordingOptions);
recordingInstance.setOnRecordingStatusUpdate(checkStatus);
recordingInstance.setProgressUpdateInterval(10000);
await recordingInstance.startAsync();
setRecording(recordingInstance);
Run Code Online (Sandbox Code Playgroud)
上面创建并准备录制后,我添加了一个每 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);
Run Code Online (Sandbox Code Playgroud)
回调函数检查持续时间是否大于 10 秒且与上次持续时间的差值是否大于 0,然后通过 WebSocket 发送数据。
目前唯一的问题是,它第一次不运行回调,但第二次运行。
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |