我使用C#wrapper ohLibSpotify播放来自Spotify的音乐并与NAudio一起播放。现在,我正在尝试为我收到的数据创建频谱可视化。
当我从libspotify获取数据时,会调用以下回调函数:
public void MusicDeliveryCallback(SpotifySession session, AudioFormat format, IntPtr frames, int num_frames)
{
//handle received music data from spotify for streaming
//format: audio format for streaming
//frames: pointer to the byte-data in storage
var size = num_frames * format.channels * 2;
if (size != 0)
{
_copiedFrames = new byte[size];
Marshal.Copy(frames, _copiedFrames, 0, size); //Copy Pointer Bytes to _copiedFrames
_bufferedWaveProvider.AddSamples(_copiedFrames, 0, size); //adding bytes from _copiedFrames as samples
}
}
是否可以分析传递给BufferedWaveProvider的数据以创建实时可视化?有人可以解释一下吗?
答案 0 :(得分:1)
将音频样本等时域信号转换为频域信息的标准工具是傅里叶变换。
抓住您选择的快速傅立叶变换库并将其丢给您的数据;你将把信号分解成其组成频率。然后,您可以随意获取该数据并进行可视化。频谱图特别容易;你只需要绘制每个频率分量的大小与频率和时间的关系。