Как рассчитать частоту и амплитуду во Flash AS3 с помощью Flash Player 9

Как я могу рассчитать частоту и амплитуду в As3 с FP9. Я получил все сырые байты, используя

SoundMixer.computeSpectrum(_testbytes, false, 0);
var g:Graphics = this.graphics;  
g.clear();       
g.lineStyle(0, 0x6600CC);
g.moveTo(0, PLOT_HEIGHT);            
var m:Number = 0;
for (var i:int = 0; i < 256; i++) {
    m = (_testbytes.readFloat() * 100);
    g.lineTo(i*2 , 100 - m);
}
g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);

Теперь я могу получить данные о частоте и амплитуде?

1 ответ

Если вы внимательно посмотрите на документацию computeSpectrum(), вы увидите, что второй параметр устанавливает режим FFT.

FFT означает FastFourierTransform, в основном, если вы используете FFT поверх формы сигнала, вы переходите в частотную область, что означает, что вместо необработанных значений у вас есть значения, которые отсортированы для вас по частоте.

Все, что вам нужно изменить в своем коде:

SoundMixer.computeSpectrum(_testbytes, true);

Теперь в _testbytes у вас будет 512 значений, 256 для левого канала и 256 для правого канала. Для каждого канала числа сортируются по частотам, от низкого до высокого (я думаю, низкий, средний-низкий, средний-высокий, высокий).

Вот и все, у тебя сейчас есть частоты. SoundTransform имеет громкость, что является еще одним способом сказать амплитуду, я думаю. Если вы хотите выполнить Math.max() на некоторых из этих частот или leftPeak и rightPeak, сделайте это.

Если вы хотите заняться этим, просто посмотрите FFT в Википедии, DSP(Цифровая обработка сигналов) или Обработка звука, в противном случае, достаточно документации as3 для computeSpectrum.

Что касается частоты дискретизации, эта классная библиотека, кажется, делает тяжелую работу за вас.

HTH, Джордж

Другие вопросы по тегам