1

マイクから録音された音声を bytearray に保存し、AS3Websocket ライブラリ ( https://github.com/Wollize/AS3WebSocket ) 経由でサーバーに送信します。

private function processMicInput(event:SampleDataEvent):void {
    if (isRecording) {
        while (event.data.bytesAvailable) {
            recordingBuffer.writeShort(event.data.readFloat()*0x7fff);
        }
        websocket.sendBytes(recordingBuffer);
        recordingBuffer.clear();
    }
}

ただし、データをリトルエンディアンにしたい。recordingBufferbytearray をリトル エンディアンに設定するかビッグ エンディアンに設定するかは問題ではないようです。常にビッグ エンディアンとして送信されます。内部的には、AS3Websocket ライブラリはビッグエンディアンに設定されたソケットを使用しているようです。これが問題ですか?もしそうなら、どうすればこれを回避できますか?

4

1 に答える 1

3

面白い。sendBytes の下のライブラリでは、データが途中で2 つの バッファにコピーされることがわかります。ライブラリで起こっていることを変更しても安全かどうかはわかりません。バイトを recordingBuffer に書き込むときに、バイトの順序を変更できます。

    while (event.data.bytesAvailable) {
        var val:int = event.data.readFloat()*0x7fff;
        recordingBuffer.writeShort( ((val >> 8) & 0xff) | ((val & 0xff) << 8));
    }

32 ビット ワード全体を反転する必要がある場合は、より手の込んだものにする必要があります。その場合はLMK。

幸運を!

于 2013-09-26T14:19:57.473 に答える