是否有可能获得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 );
}
}
}
答案 0 :(得分:3)
“..如果您知道从原始声波获取频谱的任何其他方法,请告诉我。”
Joe Beuckman打败了我,并给了Gerry Beauregard的FFT代码链接。这是迄今为止我见过的最好的AS3,这是我两年前发现的。从评论中我看到你想知道如何实现......好了看实现代码,你需要在他的博客上看到另一个页面:
http://gerrybeauregard.wordpress.com/2010/08/06/real-time-spectrum-analysis/
要自己测试该代码,首先必须保存链接中显示的类:http://gerrybeauregard.wordpress.com/2010/08/03/an-even-faster-as3-fft/
将每个包的代码分别保存为FFT2.as和FFTElement.as
现在,在您的文档类中输入代码: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:一
答案 1 :(得分:1)
FFT表示快速傅立叶变换。这正是将原始声波值转换为频率空间的算法。您应该能够在AS3中找到(或移植)FFT的实现,这就是您所要求的。