1

我将麦克风录制的音频存储在一个字节数组中,并通过 AS3Websocket 库(https://github.com/Worlize/AS3WebSocket)发送到服务器:

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

但是,我希望数据是小端的。recordingBuffer我将字节数组设置为小端还是大端似乎并不重要,它总是作为大端发送。在内部,似乎 AS3Websocket 库使用了一个设置为 big-endian 的套接字。这是问题吗?如果是这样,我该如何解决这个问题?

4

1 回答 1

3

有趣的。在 sendBytes 下的库中,您可以看到数据在输出时被复制到两个 缓冲区。我不确定修改图书馆中发生的事情是否安全。您可以在将字节写入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 回答