2

是否有可能获得 adobesflash.media.SoundMixer类的来源?

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

我想“克隆”将.computeSpectrum()原始声波( byteArray )从麦克风输入转换为频谱的功能。

我找到了几个像这样的例子-> http://pierrickpluchon.fr/blog/as3-how-to-plug-your-microphone-with-a-soundspectrum-in-flash-player-10-1 /

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

问题是总有一场Sound()比赛,我不想要什么。(我不想要任何环回)

但是,如果我没有播放声音,我无法使用该函数通过将 FFTMode 设置为 true( )SoundMixer.computeSpectrum()来将来自 的 ByteArray 转换Microphone为频谱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 );
        }
    }
}
4

2 回答 2

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/

但是,在该代码中,您还必须添加一些行来导入其他已保存的 .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:一个

于 2013-07-26T15:43:42.817 回答
1

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

于 2013-07-26T03:10:34.753 回答