查看iTunes visualizer API的示例代码,有一个包含波形和频谱数据的数据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
中测量的频率,以便将它们转换为乐谱(基本上是注释)。
此流程涉及哪些资源,算法等?这些数据是傅里叶系数吗?根据这些数据,我如何回到给定时间点的频率,我可以将其映射到音符?
答案 0 :(得分:1)
我建议您查看一些开源项目并尝试从中学习。 FFT Guitar Tuner。此外,如果您更认真地学习DSP,您可以搜索数字信号处理管,并观看关于此主题的完整讲座系列。找到音频块的音符不是最容易的任务,因为我发现自己试图编写吉他调音器。据我所知(我不是这个领域的专家),获取音高信息需要采取的步骤是:
答案 1 :(得分:1)
两个警告。频谱数据和音符不是一回事。来自FFT的频谱数据在每个频率仓(或阵列元件)之间的频率间隔与在相等的调节的音调间距之间具有完全不同的间隔,并且单个音调音调通常由包含多于1个频谱频率仓的丰富频谱表示。
每个bin的中心频率与采样率除以隐含FFT处理的数据长度有关。