2013-09-26 65 views
1

字節組的字節順序我存儲從麥克風錄製的音頻中的ByteArray並通過AS3Websocket庫(https://github.com/Worlize/AS3WebSocket)發送到服務器:的ActionScript 3:通過WebSocket的

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

不過,我希望數據是小端。將recordingBuffer字節陣列設置爲little-endian還是big-endian並不重要,它總是以big-endian的形式發送。 在內部,似乎AS3Websocket庫使用設置爲big-endian的套接字。這是問題嗎? 如果是這樣,我該如何解決這個問題?

回答

3

有趣。在sendBytes的庫中,您可以看到數據在複製出來時被複制到twobuffers。我不確定修改庫中發生的事情是安全的。

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

如果您需要翻轉整個32位的話,你就必須更大膽的嘗試:如您將它們寫入recordingBuffer你可以改變字節的順序。 LMK如果是這樣的話。

祝你好運!

+0

你做到了!謝謝,我正在爲此奮鬥幾個小時:) 現在,我不確定字節緩衝區的字節順序是什麼意思,因爲我認爲這意味着您現在手動完成的工作。 – dndr

+0

是的,我不知道爲什麼字節序不起作用。你是否在while循環之前設置了它?它應該修改.writeShort調用將字節寫入字節數組的方式。 –

+0

似乎每次調用sendBytes時,字節數組的字節序列都會重置爲big-endian。 – dndr