Как написать плагин iTunes, который предоставляет информацию о частоте - PullRequest
1 голос
/ 15 января 2012

Глядя на пример кода для API визуализатора iTunes, есть данные struct, которые содержат данные о форме волны и спектре:

struct RenderVisualData {
    UInt8 numWaveformChannels;
    UInt8 waveformData[kVisualMaxDataChannels][kVisualNumWaveformEntries];

    UInt8 numSpectrumChannels;
    UInt8 spectrumData[kVisualMaxDataChannels][kVisualNumSpectrumEntries];
};
typedef struct RenderVisualData RenderVisualData;

Есть 2 канала (kVisualMaxDataChannels) и форма волны 512 иточки спектральных данных (kVisualNumWaveformEntries и kVisualNumSpectrumEntries), эквивалентные целым числам от 0 до 255.

Они полезны для визуального представления звука.Я хотел бы преобразовать эти данные (или аналогичные) в частоты, измеренные в Hz, чтобы преобразовать их в музыкальную нотацию (примечания, по существу).

Какие ресурсы, алгоритмы и т. Д. Задействованы в этом процессе?Являются ли эти данные коэффициентами Фурье?Учитывая эти данные, как я могу вернуться к частоте в данный момент времени, которую я могу сопоставить с заметкой?

Ответы [ 2 ]

1 голос
/ 16 января 2012

Два предупреждения.Данные спектра и музыкальные ноты - это не одно и то же.Спектральные данные из БПФ имеют совершенно разный интервал по частоте между каждым частотным интервалом (или элементом массива), чем между равными темперированными музыкальными высотами, и один музыкальный шаг обычно представлен богатым спектром, содержащим намного больше, чем один спектральный частотный интервал.

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

1 голос
/ 15 января 2012

Я бы предложил посмотреть несколько проектов с открытым исходным кодом и попробовать поучиться у них. FFT Guitar Tuner . Кроме того, если вы более серьезно изучаете DSP, вы можете найти в своей трубе цифровую обработку сигналов и посмотреть полную серию лекций на эту тему. Найти музыкальную ноту аудио-блока не самая простая задача, так как я пытаюсь запрограммировать гитарный тюнер. Как я понимаю (я не эксперт в этой области), шаги, которые необходимо предпринять для получения информации о тоне:

  1. взять несколько выборок аудиоданных, предпочтительно в степени двух (256,512, 1024 и т. Д.)
  2. (необязательно) Примените оконную функцию, чтобы она сглаживала края и выглядела как непрерывный сигнал времени (конечная точка совпадает с начальной точкой).
  3. Быстрое преобразование Фурье
  4. Алгоритм извлечения высоты тона. Есть несколько разных алгоритмов, в зависимости от ваших потребностей. Самым простым в моем опыте является Harmonic Product Spectrum, который найдет основную частоту обработанного вами аудио блока.
...