Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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 通过websocket发送音频数据?_Javascript_Node.js_Audio_Websocket - Fatal编程技术网

Javascript 通过websocket发送音频数据?

Javascript 通过websocket发送音频数据?,javascript,node.js,audio,websocket,Javascript,Node.js,Audio,Websocket,我正在尝试通过websocket(用于语音到文本处理)将音频流从客户端发送到NodeJS后端 当我在浏览器中将一个短.wav文件加载到音频缓冲区时,使用getChannelData()方法将音频数据提取为Float32Array,并通过websocket将生成的ArrayBuffer发送到我的服务器进行播放,出于某种原因,音频上覆盖了大量静态噪声。 我尝试了多种方法来发送音频数据,包括作为字符串(以防止浮点取整),还尝试了多种方法将接收到的音频数据转换为可读流,所有这些方法都具有相同的结果 以下

我正在尝试通过websocket(用于语音到文本处理)将音频流从客户端发送到NodeJS后端

当我在浏览器中将一个短.wav文件加载到音频缓冲区时,使用
getChannelData()
方法将音频数据提取为
Float32Array
,并通过websocket将生成的ArrayBuffer发送到我的服务器进行播放,出于某种原因,音频上覆盖了大量静态噪声。
我尝试了多种方法来发送音频数据,包括作为字符串(以防止浮点取整),还尝试了多种方法将接收到的音频数据转换为可读流,所有这些方法都具有相同的结果

以下是相关代码:

客户:

const audioCtx=new(window.AudioContext | | window.webkitadiocontext)();
函数loadAudioBuffer(){
返回新承诺((解决、拒绝)=>{
获取(`/test.wav`)
.then(response=>response.arrayBuffer())
.then(arrayBuffer=>audioCtx.decodeAudioData(arrayBuffer))
。然后(audioBuffer=>resolve(audioBuffer));
})
}
(异步()=>{
让customBuffer=等待loadAudioBuffer();
const ws=newwebsocket(`ws://localhost:9999/socket`);
ws.onopen=()=>{
send(customBuffer.getChannelData(0.toString());
}
})()
服务器:

const{Readable}=require(`stream`);
const Speaker=require('Speaker');
//创建Speaker实例
常量扬声器=新扬声器({
渠道:1,,
位深度:16,//16位采样
取样器:44100//44100 Hz采样率
});
常量输出=新的可读({
read(){}
});
输出管(扬声器);
wss.on('connection',function connection(ws){
ws.on('message',函数传入(message){
让floatArray=newfloat32Array(message.split(`,`));
设audioBuffer=Buffer.allocUnsafe(floatArray.bytellength);
设偏移量=0;
floatArray.map(floatValue=>{
audioBuffer.writeflotle(floatValue,offset);
偏移量+=4;
})
输出推送(音频缓冲);
});
});
我还尝试通过websocket发送原始的ArrayBuffer,并立即将接收到的缓冲区推送到扬声器,这导致了相同的静态干扰

我是不是漏掉了什么明显的东西