使用ByteArray实现FIFO,并在FIFO仍在写入时从FIFO读取

时间:2012-08-23 23:57:03

标签: actionscript-3

我确信我遗漏了与动作3相关的基本内容,但我没有太多使用它的经验

我的问题的背景:

从麦克风录制的声音需要通过支持基于http的协议(使用安全套接字)发送到后端。为了实现这一点,语音字节被“成帧”(即一些成帧字节在记录的字节之前注入)每20ms(或使用编解码器的80字节)并通过打开的套接字推出连接。

所以我认为最好的方法就是将记录的数据样本存储到一个字节数组B中,当我每80个字节时,它仍然被写入

  • 从B
  • 读取最后记录的80个字节
  • 预先设置成帧字节
  • 将生成的bytearray推出套接字

现在,如果我从字节数组B读取操作,则操作会重置bytearrya的指针,当新的语音字节进入时,肯定会覆盖指针后的字节?

我怎样才能避免这种情况发生?

感谢您的任何指示。

1 个答案:

答案 0 :(得分:0)

请注意,文档说明您可以重置ByteArray的指针(position):

  

将文件指针的当前位置(以字节为单位)移动或返回ByteArray对象。这是读取方法的下一次调用开始读取或写入方法开始写入的时间点。

因此,您可以在执行读取操作之前重置position并以此方式管理FIFO。

但我认为使用字节数组作为FIFO可能会有问题:

  • 您可能希望删除刚刚从FIFO中读取的字节,除了清除整个数组的clear()之外,我没有看到任何API这样做。
  • 来自麦克风的SampleDataEvents可能会频繁出现,以致效率降低或出现问题

从每个SampleDataEvent中获取单个ByteArray的FIFO(带有数组)可能更容易。