В примере кода, который вы связали, вектор m_mag
содержит сами данные спектра. Если вы хотите изменить его для работы с существующим кодом, который предназначен для работы с computeSpectrum
, вы должны записать значения в этом векторе в ByteArray
примерно так:
import flash.utils.ByteArray;
var fftBytes:ByteArray = new ByteArray();
for(var i:uint = 0; i < N/2; i++)
{
var re:Number = m_tempRe[i];
var im:Number = m_tempIm[i];
var mag:Number = re*re + im*im;
// Old method: write to vector
// m_mag[i] = Math.sqrt(sample);
// New method: write to ByteArray
fftBytes.writeFloat(mag);
}
// microphone is mono, so make a copy to match computeSpectrum's stereo output
fftBytes.writeBytes(fftBytes, 0, fftBytes.length);
Ваш существующий код может затем смотреть fftBytes
напрямую, вместо того, чтобы вызывать computeSpectrum
. Обратите внимание, что мы копируем значения второй раз в конце ByteArray
, чтобы смоделировать тот факт, что computeSpectrum
всегда возвращает стереофонические данные, но микрофон моно. Вы также можете немного повысить скорость, настроив существующий код так, чтобы он принимал моно-данные и смотрел на вектор m_mag
вместо записи всего этого в ByteArray
.
Кроме того, вы можете изменить константы SAMPLE_RATE
и N
в верхней части кода на 44100
и 9
соответственно. Это будет соответствовать стандартному поведению computeSpectrum
возврата 256 значений на канал с частотой дискретизации 44100 Гц.