簡體   English   中英

將 int8 opus 編碼的數組轉換為原始波形(Python)

[英]Convert int8 opus-encoded array into raw waveform (Python)

我有一個 js 腳本,它記錄來自麥克風的音頻並將其發送到 python REST API。

js腳本的一部分(在控制台中工作):

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
var options = {mimeType: "audio/webm;codecs=opus", audioBitsPerSecond:16000};
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.addEventListener("dataavailable", function(event) {
    var reader = new FileReader();
    reader.addEventListener("loadend", function() {
        var int8View = new Int8Array(reader.result);
        console.log(int8View);
    });
    reader.readAsArrayBuffer(event.data);
    
});
mediaRecorder.start(200);

如果我正確理解此代碼輸出的 int8array 是作品編碼的音頻。

如何使用 python 將其解碼為原始波形(例如 soundfile.read 會返回的波形)? 我可以使用ffmpeg來解碼 opus,但它適用於文件,我怎樣才能將此數組轉換為正確的.opus.ogg文件?

我還找到了 js 端解決方案,但我想發送和接收壓縮值。

我怎樣才能把這個數組變成一個正確的.opus 或.ogg 文件?

您正在通過audio/webm;codecs=opus捕獲 Webm 文件 stream ,因此需要將其從 Webm 轉換為 Ogg Opus。 相反,您可以直接將 Webm Opus stream 作為文件下載:

const recordedBuffers = []

reader.addEventListener('loadend', () => {
  recordedBuffers.push(reader.result)
})

function download() {
  const a = document.createElement('a')
  a.href = URL.createObjectURL(new Blob(recordedBuffers))
  a.download = 'my-recorded-audio.webm'
  a.click()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM