Как рассчитать частоту и амплитуду во Flash AS3 с помощью Flash Player 9 - PullRequest
2 голосов
/ 26 ноября 2009

Как я могу рассчитать частоту и амплитуду в 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 Ответ

2 голосов
/ 27 ноября 2009

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

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

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

SoundMixer.computeSpectrum(_testbytes, true);

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

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

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

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

НТН, George

...