绘制语谱图Spectrogram
1. 采集音频 → 2. 分帧加窗 → 3. FFT 计算 → 4. 映射为颜色 → 5. 绘制图像。
1.音频采集与处理(根据硬件获取的数据进行数据的处理)
使用 iOS 的音频框架捕获或读取音频数据:
AVFoundation:用于音频录制或播放。
AVAudioEngine:实时获取音频输入流。
音频采集与处理
2.快速傅里叶变换(FFT)
将时域音频信号转换为频域信号,计算每个时间窗口的频率分量:
Accelerate 框架:使用 vDSP 进行高效的 FFT 计算。
快速傅里叶变换
3.绘制语谱图
将 FFT 得到的频域数据转换为图像:
Core Graphics / Metal:高效绘制动态图像。
OpenGL ES(旧版):可用于实时渲染。
简单 Core Graphics 实现思路:
将每个时间窗口的 FFT 幅度数据映射为垂直的色条。
随时间推移,水平拼接色条形成二维语谱图。
颜色映射
4.性能优化
实时性:确保 FFT 和绘图在后台线程执行,避免阻塞主线程。
数据窗口:使用 Hanning 窗减少频谱泄漏。
缓存重用:避免频繁内存分配。