算法系列之二十三:离散傅立叶变换之音频播放与频谱显示

本文介绍了离散傅立叶变换如何用于音频播放器中显示频谱,通过计算音频数据的功率分布,选择有代表性的频率点,计算加权平均值以显示频谱。此外,还探讨了动态频谱的实现方法,包括使用位图缓冲区提高刷新效率,并调整音频缓冲区大小以优化视觉体验。
摘要由CSDN通过智能技术生成

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示

导语

频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷。在上一篇对离散傅立叶变换介绍的基础上,本篇就进一步介绍一下频谱是怎么回事儿,下一篇继续介绍均衡器。

1 什么是频谱

       频谱是数字信号处理领域的一个专业术语,但是与本文要介绍的频谱还不太一样。我用Winamp播放音乐(AOL已经在2013年12月20日停止了Winamp的支持),最早吸引我的原因就是播放界面上那个跳动的频谱(如图 1 所示),相信几乎所有主流的媒体播放软件都有这个,这就是本文要介绍的频谱。

图 1 winmap上跳动的频谱

1.1 频谱的原理

       本篇先来说说频谱。既然是频谱,就一定和频率有关系吧?是的,那个跳动的频谱实际上就是当前播放的一小段片音频信息在频域上的功率分布。鼓声和弦乐的频率范围相差很大,当音乐中有震耳的鼓声时,频谱中中低频的部分就跳的很高,说明这部分频率的功率比较高。同样,当高亢的小提琴声音响起时,频谱中高频的部分就跳的很高,说明高频部分的功率比较高。正是因为这个关系,频谱总是和正在播放的音乐“相映成趣”。

       要在播放器中显示跳动的频谱,就需要知道音频数据中各个频率对应的功率,常见的音频数据都是时域信号,需要转换成频域信号才能进行分析。在《听声音破解电话号码》一文中,我们介绍了离散傅立叶变换可以将时域的声音信号转换成频域的频率功率分布,并给出了相关的算法,这正是本篇要介绍的频谱显示的基础。

1.2 频谱的选择

       《听声音破解电话号码》一文中给出的PowerSpectrumS()函数,可以将44100Hz采样率的音频信号经过2048点离散傅立叶变换后,可以得到1024个点的有效频率和功率分布(另外1024个点与之具有对称性),对应的频率映射范围是0Hz到22050Hz。播放器软件通常有一个很小巧的界面,在这个界面上用1024个波段全部显示从0到22050Hz的频谱是不现实的,也完全没有必要,因为大部分人的耳朵听力范围在20Hz到20KHz之间,不在此范围的频率可以忽略。一般频谱最多显示32个波段(我用的winamp 2.91 版本只有19个频谱波段),这就涉及到另一个问题,那就是如何从1024个频谱数据中选择32个用作频谱的显示。选取的原则是要选择有代表性的频率,两个波段的中心频率最好不要相差太小

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值