AS3中麦克风输入数据的快速傅里叶变换

时间:2013-07-26 03:05:11

标签: actionscript-3 flash class function audio

是否有可能获得adobes flash.media.SoundMixer class的来源?

如果是,我在哪里可以找到/得到它?

我要去克隆" .computeSpectrum()函数将原始声波(byteArray)从麦克风输入转换为频谱。

我发现了一些像这样的例子 - > http://pierrickpluchon.fr/blog/as3-how-to-plug-your-microphone-with-a-soundspectrum-in-flash-player-10-1/

我发现的所有其他方法都差不多。

问题是总是有Sound()个玩法,我想要的是什么。 (我不想要任何环回)

但如果我没有播放声音,我就无法使用SoundMixer.computeSpectrum()功能通过转动FFTMode将Microphone的ByteArray转换为频谱为真(computeSpectrum(myByteArray,true)

另外,如果你知道从原始声波获取频谱的任何其他方法,请告诉我。

更新

我的代码:

var bytes:ByteArray = new ByteArray();

var mic:Microphone = Microphone.getMicrophone();
mic.rate = 44;
// mic.gain = 100; // gain
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);

function onSampleData( event:SampleDataEvent ):void {
    graphics.clear();
    graphics.lineStyle(1, 0xFF0000);
    for( var i:uint = 0; i < 256; i++ ) {
        var num:Number = event.data.readFloat() * 100 + 100; // -Math.abs( )
        if( i == 0 ) {
            graphics.moveTo( i, num );
        } else {
            graphics.lineTo( i, num );
        }
    }
}

2 个答案:

答案 0 :(得分:3)

  

“..如果您知道从原始声波获取频谱的任何其他方法,请告诉我。”

Joe Beuckman打败了我,并给了Gerry Beauregard的FFT代码链接。这是迄今为止我见过的最好的AS3,这是我两年前发现的。从评论中我看到你想知道如何实现......好了看实现代码,你需要在他的博客上看到另一个页面:

http://gerrybeauregard.wordpress.com/2010/08/06/real-time-spectrum-analysis/

  1. 要自己测试该代码,首先必须保存链接中显示的类:http://gerrybeauregard.wordpress.com/2010/08/03/an-even-faster-as3-fft/
    将每个包的代码分别保存为FFT2.as和FFTElement.as

  2. 现在,在您的文档类中输入代码:http://gerrybeauregard.wordpress.com/2010/08/06/real-time-spectrum-analysis/

  3. 但是在该代码中,您还必须添加一些导入其他已保存.as类的行

    import __AS3__.vec.Vector;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Microphone;
    import flash.text.*;
    import flash.utils.*;
    
    import FFT2;
    import FFTElement;
    

    现在它应该运行没有错误,并在他的博客上显示与屏幕截图相同的内容。在线演示曾经为我工作,但今天没有,所以我说截图只是让你知道什么时候工作正常。

    希望它有所帮助。 VC:一

答案 1 :(得分:1)

FFT表示快速傅立叶变换。这正是将原始声波值转换为频率空间的算法。您应该能够在AS3中找到(或移植)FFT的实现,这就是您所要求的。