Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我得到了记录声音和存储声音文件的缓冲区之间的一些区别_Javascript_Node.js_Reactjs_Audio_Acrcloud - Fatal编程技术网

Javascript 我得到了记录声音和存储声音文件的缓冲区之间的一些区别

Javascript 我得到了记录声音和存储声音文件的缓冲区之间的一些区别,javascript,node.js,reactjs,audio,acrcloud,Javascript,Node.js,Reactjs,Audio,Acrcloud,我正在尝试使用ACRCloud音频识别开发一个音乐识别web应用程序 我在React中有一个客户端,它从笔记本电脑的麦克风录制音乐并将其发送到服务器端: const sendRecording=异步调度,arrayBuffer=>{ 常量配置={ 标题:{ “内容类型”:“多部分/表单数据;边界=${data.\u boundary}” } }; 试一试{ var formData:formData=新的formData; formData.append'audio',arrayBuffer;

我正在尝试使用ACRCloud音频识别开发一个音乐识别web应用程序

我在React中有一个客户端,它从笔记本电脑的麦克风录制音乐并将其发送到服务器端:

const sendRecording=异步调度,arrayBuffer=>{ 常量配置={ 标题:{ “内容类型”:“多部分/表单数据;边界=${data.\u boundary}” } }; 试一试{ var formData:formData=新的formData; formData.append'audio',arrayBuffer; const res=等待axios.post “/api/记录”, {test:new BufferarrayBuffer}, 配置 ; }犯错误{ console.logerr; } }; const handleRecorder=dispatch=>{ navigator.mediaDevices.getUserMedia{audio:true}.thenstream=>{ 控制台。记录'entra!!!!'; const mediaRecorder=新的MediaRecorderstream; mediaRecorder.start; 常量音频块:任意[]=[]; mediaRecorder.addEventListener'dataavailable',事件=>{ audioChunks.pushevent.data; }; mediaRecorder.addEventListener'stop',异步=>{ const audioBlob=新blobaudiochunk; 让arrayBuffer=等待新的响应eAudioBlob.arrayBuffer; 发送记录发送,阵列缓冲; }; 设置超时=>{ mediaRecorder.stop; }, 13000; }; }; 这显然对我有效,并正确发送缓冲区。我在后端得到类似这样的东西:

<Buffer 7b 22 61 75 64 69 6f 22 3a 7b 22 74 79 70 65 22 3a 22 42 75 66 66 65 72 22 2c 22 64 61 74 61 22 3a 5b 32 36 2c 36 39 2c 32 32 33 2c 31 36 33 2c 31 35 ... >
音频通过export const identificationaudio=bitmap=>{…}函数发送到ACRCloud识别服务

流程可行,但我总是得到“无结果”的响应。 我已尝试发送存储在服务器上的音频。这是一种低质量、低噪音的录音,用于模拟真实场景

让filename='../../services/sample.wav'; 让位图:Buffer=fs.readFileSyncpath.resolve\u dirname,filename; 发送位图后,我收到了一个正确的回复,回复中有艺术家的名字song

我曾经做过identifyAudiobuffer,我总是得到“无法生成指纹”的响应。
我用wav编码器对其进行编码,得到“无结果”响应。所以我想我发送的是构造良好的音频。

identifyAudiobuffer,该缓冲区没有头,因此无法生成指纹。 您使用wav编码器对其进行编码,并得到“无结果”响应。
生成的WAV文件可能有问题。因此,您可以保存源音频缓冲区和生成的WAV文件,并将它们发送到support@acrcloud.com,我会测试一下。

非常感谢你,托尼。对不起,这次我出去了。我会把我发现的所有错误都寄给你。生成的.wav文件的格式为:{audio:{type:Buffer,data:[26,69223163159,…]}我试图只将数据传递给writeFile,它生成了一个正确的音频文件。我必须看看它为什么会得到所有对象。非常感谢!!