actionscript-3 - 使用as3创建正弦波音频-上下扫频

标签 actionscript-3 flash audio

我正在使用SampleDataEvent在AS3中制作正弦波声音。我可以很容易地制作一个纯正弦波,但是如果我尝试扫过频率,我会突然跳出来。这是我正在使用的代码-任何帮助都会很棒。

    package
    {
        import flash.display.*;
        import flash.events.*;
        import flash.media.*;
        import flash.utils.Timer;

        public class DynamicSound extends Sprite
        {
            private var sound:Sound;
            private var noise:Number = 0;
            private var f:Number = 1000;
            private var v:Number = 1;
            private var sweepDown:Boolean = true;

            // make the sound
            public function DynamicSound():void
            {
                sound = new Sound();
                sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onCallback);
                sound.play();
                sweep();
            }

            // create the sinewave
            private function onCallback(e:SampleDataEvent):void
            {
                for (var i:int = 0; i < 8192; i++)
                {
                    noise += 1;
                    var sampleNumber = noise;
                    e.data.writeFloat(v * Math.sin(sampleNumber * f / 44100));
                    e.data.writeFloat(v * Math.sin(sampleNumber * f / 44100));

                }
            }

            // sweep up and down frequency
            private function sweep() {
                var timer:Timer = new Timer(100);
                timer.addEventListener(TimerEvent.TIMER, onTimer);
                timer.start();
                function onTimer(event:TimerEvent):void
                {
                    if(sweepDown){
                        f--;
                    } else {
                        f++;
                    }
                    if (f <=600 ){
                        sweepDown = false;
                    }
                    if (f >= 1000) {
                        sweepDown = true;
                    }
                trace(f);

                }
            }
        }
    }

最佳答案

我相信方法的问题在于,扫描必须是渐进的,当您步进它时,就像在声波中产生突然的变化一样,这被解释为短的高频信号-爆裂声或喀哒声。我建议您执行此调制的方法将在回调循环内。

设置目标频率(dF)和当前频率(cF),而不是在循环内进行突变设置cF = cF*0.8 + dF*0.2,这应该删除突变并使其发生在多个样本上。

关于actionscript-3 - 使用as3创建正弦波音频-上下扫频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195220/

相关文章:

actionscript-3 - 当我添加按钮时,为什么动态文本消失了?

javascript - 如何使用 javascript/AS3 更新加载的 SWF 文件中的文本?

flash - as3 停止事件传播

actionscript-3 - 仅从场景中删除对象的一组实例

flash - 在 https 中加载 swf 时出现白屏

android - 单击几次后 SoundPool 不播放声音

ios - iOS UIWebView loadRequest

swift - 计时问题: Metronome using AVAudioEngine scheduleBuffer's completion handler

flash - 将焦点传递给 Chrome 和 Safari 中的 Silverlight/Flash 对象

ios - 如何在具有单独位置 url 和资源 url 的 swift 中从服务器直播音频?