我使用以下方法从声音对象中提取字节信息 - 但是如果我回到同一个声音对象并再次运行它,则byteArray没有可用的字节。
var data:ByteArray = new ByteArray;
sound.extract(data,sound.length*44.1);
data.position = 0;
return data;
这是正确的行为吗? 有没有办法在同一个声音对象上多次这样做?或者我在这里做错了什么。任何帮助表示赞赏 - 谢谢
答案 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://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获取任何内容,而是它的位置在最后。