Actionscript 3 动作脚本3:通过websocket结束bytearray
我将从麦克风录制的音频存储在bytearray中,并通过AS3Websocket库()将其发送到服务器:Actionscript 3 动作脚本3:通过websocket结束bytearray,actionscript-3,flash,apache-flex,websocket,bytearray,Actionscript 3,Flash,Apache Flex,Websocket,Bytearray,我将从麦克风录制的音频存储在bytearray中,并通过AS3Websocket库()将其发送到服务器: private function processMicInput(event:SampleDataEvent):void { if (isRecording) { while (event.data.bytesAvailable) { recordingBuffer.writeShort(event.data.readFloat()*0x7ff
private function processMicInput(event:SampleDataEvent):void {
if (isRecording) {
while (event.data.bytesAvailable) {
recordingBuffer.writeShort(event.data.readFloat()*0x7fff);
}
websocket.sendBytes(recordingBuffer);
recordingBuffer.clear();
}
}
但是,我希望数据是little endian。无论我将recordingBuffer
bytearray设置为little-endian还是big-endian,似乎都无关紧要,它总是作为big-endian发送。
在内部,AS3Websocket库似乎使用了一个设置为big-endian的套接字。这就是问题所在吗?
如果是这样,我该如何解决这个问题呢?很有趣。在sendBytes下的库中,您可以看到数据在输出时被复制到。我不确定修改库中发生的事情是否安全。您可以在将字节写入recordingBuffer时更改其顺序:
while (event.data.bytesAvailable) {
var val:int = event.data.readFloat()*0x7fff;
recordingBuffer.writeShort( ((val >> 8) & 0xff) | ((val & 0xff) << 8));
}
while(event.data.bytes可用){
var val:int=event.data.readFloat()*0x7fff;
recordingBuffer.writeShort(((val>>8)&0xff)|((val&0xff)你做到了!谢谢,我为此苦苦挣扎了几个小时:)现在,我不确定bytebuffers的endianness是什么意思,因为我认为它正是指您现在手动执行的操作。是的,我不确定endianness为什么不起作用。您在while循环之前设置了它吗?它应该修改.writeShort调用将字节写入bytearray的方式。看起来bytearra的endianness每次调用sendBytes时,y都会重置为big-endian。