Actionscript 3 - Sound.extract方法清空声音对象数据

时间:2011-05-20 15:39:35

标签: flash flex actionscript-3

我使用以下方法从声音对象中提取字节信息 - 但是如果我回到同一个声音对象并再次运行它,则byteArray没有可用的字节。

var data:ByteArray = new ByteArray;
sound.extract(data,sound.length*44.1);
data.position = 0;
return data;

这是正确的行为吗? 有没有办法在同一个声音对象上多次这样做?或者我在这里做错了什么。任何帮助表示赞赏 - 谢谢

4 个答案:

答案 0 :(得分:1)

sound.extract(data,sound.length*44.1, -1);

也许您需要将startPosition设置为-1。 否则,当您返回相同的声音并再次调用提取时,startpositon将不会为-1。

答案 1 :(得分:0)

我相信'extract'的重点是从Sound对象中删除字节信息;来自api:

  

此方法旨在使用   当你动态地工作   生成音频,使用你的功能   为sampleData事件分配一个   不同的声音对象。那是你   可以使用此方法提取声音   来自Sound对象的数据。然后你可以   将数据写入字节数组   另一个Sound对象正在使用   流动态音频。

我不太确定你想要完成什么,但是如果你想保持你的Sound对象,你可能想要自己把它写到ByteArray:

var ba:ByteArray = new ByteArray();
ba.writeObject(sound);
ba.position = 0;
return ba;

答案 2 :(得分:0)

您可能要做的是在声音对象上侦听SampleDataEvent。在SampleDataEvent中,您可以提取该事件​​捕获的声音块,对其进行修改,然后实时且不间断地将其写回声音流。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/SampleDataEvent.html#SampleDataEvent()

使用此活动的介绍:

http://blog.andreanaya.com/2009/04/dynamic-sound-part-1/

请注意,您可以使用SampleDataEvent.thedata从此事件中访问二进制声音数据。

答案 3 :(得分:0)

如果您为startPosition传入0,则可以随时获取数据:

sound.extract(data,sound.length*44.1, 0);

Sound的内部似乎有一个ByteArray,其位置由startPosition参数设置。 -1似乎只是告诉它从ByteArray位置当前所处的位置读取。当你已经读出所有数据时,传递-1不会从ByteArray获取任何内容,而是它的位置在最后。