如何在Flash中将生成的波形作为声音播放?

时间:2011-01-17 15:37:49

标签: flash actionscript-3 audio flash-cs5

如果我在动作脚本3中将声音波形存储为ByteArray,我该如何将其转换为可以播放的Sound对象?

请注意,阵列中充满了声音样本 - 完整生成的波形。它不是包含mp3或其他压缩数据的数组。

2 个答案:

答案 0 :(得分:4)

我在Flash中编写了很多关于声音合成的教程,其中一些是关于波表合成的。

一般概念是您需要定期用音频数据填充音频缓冲区(Sound对象)。 Sound对象将在需要音频数据时调度事件。数据块可以是2048到8192个样本之间的任何位置。下面是一些可能会帮助你的伪代码。它将从数组中的数据创建一个音频循环。

var readIndex:int = 0;
var data:Array = yourData;
var sound:Sound = new Sound()
sound.addEventListener( SampleDataEvent.SAMPLE_DATA, onSampleData );
sound.play();


function onSampleData( event:SampleDataEvent ):void 
{
      for( var i:int = 0; i < 2048; i++ )
      {
           if( readIndex + 1 > data.length )
           {
               readIndex = 0;
           } else {
               readIndex++;
           }

           event.data.writeFloat( data[i] );
           event.data.writeFloat( data[i] );
      }
}

正如我所提到的,我写了很多关于在Flash中处理声音的文章。这是一篇这样的文章:http://labs.makemachine.net/2010/07/slice-tool-looper/

答案 1 :(得分:0)

嗯,我真的没有答案,但我对这个问题也非常感兴趣,因为我读到了你的帖子,here就是我找到的。听起来像很多开销,但非常有趣的解决方案。

我希望这有帮助!

相关问题