カテゴリー別アーカイブ: WebSocket

ScriptProcessorNode + WebSocketでのバッファサイズ

Web Audio APIでサウンドデータをバイナリ通信させる場合のScriptProcessorNodeのバッファサイズに関して.

ScriptProcessorNodeは256, 1024, 2048, 4096, 8192, 16384のいずれかのバッファサイズを指定できるけども, 16384を指定して, かつ, ステレオデータ (つまり2倍のサイズ) のデータを送信しようとすると, WebSocketのcloseイベントが発生してしまうっぽい.

var context = new webkitAudioContext();
var processor = context.createScriptProcessor(16384, 2, 2);
var source = context.createBuffer();
source.buffer= /*AudioBufferインスタンス*/;

var websocket = new WebSocket('接続に必要な情報の文字列');
websocket.binaryType = 'arraybuffer';

oscillator.connect(processor);

processor.onaudioprocess = function(event) {
    var outputLs = event.inputBuffer.getChannelData(0);
    var outputRs = event.inputBuffer.getChannelData(1);

    var buffers = new Float32Array(2 * this.bufferSize);  //L + R

    for (var i = 0; i < this.bufferSize; i++) {
        buffers[i]                        = inputLs[i];
        buffers[(buffers.length / 2) + i] = inputRs[i];
    }

    websocket.send(buffers);
};

実験してみて, 8196ならステレオでも可能でした.