【问题标题】:How do I play a generated waveform as a sound in Flash?如何在 Flash 中将生成的波形作为声音播放?
【发布时间】:2011-01-17 15:37:48
【问题描述】:

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

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

【问题讨论】:

    标签: flash actionscript-3 audio flash-cs5


    【解决方案1】:

    我已经写了很多关于在 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/

    【讨论】:

      【解决方案2】:

      好吧,我真的没有答案,但我也对这个问题很感兴趣,因为我读了你的帖子,here 是我发现的。听起来开销很大,但非常有趣的解决方案。

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-08
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多