如何在Actionscript中播放一声短促的哔声?

时间:2013-02-08 05:00:31

标签: flash audio actionscript beep

我可以发出这样的哔声:

private var beep:Sound = new Sound();

private function beepInit():void {
    var beepHandler:Function = new Function();

        beepHandler = function(event:SampleDataEvent):void {
            for (var i:uint = 0; i < 2048; i++) {
                var wavePos:Number = 20 * Math.PI * i / 2048;
                event.data.writeFloat(Math.sin(wavePos));
                event.data.writeFloat(Math.sin(wavePos));
            }
        }

        beep.addEventListener(SampleDataEvent.SAMPLE_DATA, beepHandler);
}

在应用程序启动时,我调用beepInit();

要播放,请致电:beep.play();

这是连续的声音。我怎样才能成为前任。 500毫秒短促的哔声?

1 个答案:

答案 0 :(得分:3)

您需要在达到想要播放的长度后立即停止创建样本。您可以通过检查根据您要播放的样本数量创建的样本数量来执行此操作。

您要播放的样本数量是采样频率(44100 /秒)乘以您想要播放的声音长度(以秒为单位)。

private const sampleFrequency:uint = 44100;
private var samplesCreated:uint = 0;
private var lengthInSeconds:Number = 0.5;
private var beep:Sound = new Sound();

private function beepInit():void {
  var beepHandler:Function = function ( event:SampleDataEvent ):void {
    for (var i:uint = 0; i < 2048; i++) {
      if (samplesCreated >= sampleFrequency * lengthInSeconds) {
        return;
      }
      var wavePos:Number = 20 * Math.PI * i / 2048;
      event.data.writeFloat( Math.sin( wavePos ) );
      event.data.writeFloat( Math.sin( wavePos ) );
      samplesCreated++;
    }
  };

  beep.addEventListener( SampleDataEvent.SAMPLE_DATA, beepHandler );
}