我在我的烧瓶应用程序中将音频从客户端传输到服务器,但收到的音频质量很差。这为什么会降低音频质量?
在客户端,我预处理音频缓冲器如下:
this.node.onaudioprocess = function(e){
var buf = e.inputBuffer.getChannelData(0);
var out = new Int16Array(buf.length);
for (var i = 0; i < buf.length; i++){
var s = Math.max(-1, Math.min(1, buf[i]));
out[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;
}
socket.emit('audio event',{data: out})
return;
}
在服务器端,我接收所述音频如下:
audio_file = open('tempfile.raw', 'w')
@socketio.on('audio event')
def audio_message(message):
dat = [v[1] for v in sorted(message['data'].iteritems())]
n = len(dat)
byteval = struct.pack('<'+str(n)+'h',*dat)
audio_file.write(byteval)
但得到的音频声音的金属,中断和嘈杂。以下是得到的波形的样子:
凡在我的代码在音频质量失去了什么?如何在没有质量损失的情况下传输音频?
buf.buffer中发生了什么样的转换?这是否将float32array转换为二进制缓冲区? – user2212461
不,“缓冲区”属性返回数组的底层二进制结构,不进行任何转换。请参阅JavaScript类型数组的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays。 – Miguel