Как рассчитать частоту и амплитуду во 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, Джордж