我在我的燒瓶應用程序中將音頻從客戶端傳輸到服務器,但收到的音頻質量很差。這爲什麼會降低音頻質量?
在客戶端,我預處理音頻緩衝器如下:
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