簡體   English   中英

網絡音頻API和流音頻

[英]Web Audio API and streaming audio

我想通過websockets創建實時音頻流。

  • 對我而言,這是監聽麥克風,創建PCM,將PCM加載到BufferSource並播放的功能。
  • 這不起作用是通過websockets或其他協議發送PCM。

我通過以下方式獲得麥克風許可:

navigator.getUserMedia({audio: true}, initializeRecorder, errorCallback);

然后錄制麥克風並創建PCM:

function initializeRecorder(MediaStream) {
    var sourceNode = audioCtx.createMediaStreamSource(MediaStream);

    var recorder = audioCtx.createScriptProcessor(2048, 2, 2);
    recorder.onaudioprocess = recorderProcess;

    sourceNode.connect(recorder);
    recorder.connect(audioCtx.destination);
}

稍后,我將每個PCM推送到BufferSource並進行回放:

function recorderProcess(e) {
    var buff = e.inputBuffer;

    var source = audioCtx.createBufferSource();
    source.buffer = buff;
    source.connect(audioCtx.destination);
    source.start();
}

它運作良好。

但是如果我想將var buff發送到服務器,我會得到 在此處輸入圖片說明 對於每個PCM。

這個PCM是Float32Array類型,我不明白為什么我不能像這樣發送它。

我可以通過腳本將其轉換為UInt16:

function convertFloat32ToInt16(buffer) {
    var l = buffer.length;
    var buf = new Int16Array(l);
    while(l--) {
        buf[l] = Math.min(1, buffer[l]) * 0x7FFF;
    }
    return buf.buffer;
}

但是我不知道如何稍后將其解碼,以便Float32Array返回到另一個客戶端上的BufferSource。

我可以認為,如果嘗試嘗試,會出現什么問題:

var mybuffer = new Float32Array(pcmDataFromSocket); 

暫無
暫無

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

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