我的小组正在开发一个简单的 MATLAB 图形用户界面 (GUI),该界面旨在记录来自插入或内置于计算机的麦克风的音频并回放信号。到目前为止我们已经完成了。我们的 GUI 还可以加载示例(.wav 文件等)并使用 GUI 上的相同“播放”按钮进行播放。我们有一个播放、录制、加载和保存按钮。现在,对于加载或记录的样本的音调变换...我们知道我们需要一个峰值拾取算法来找到信号的基频。然后我们认为我们可以将每个值乘以一个常数来改变所有这些频率的音调。我们的目标是使用此算法并将单独的移位分配给不同的按钮或单选按钮,在其中我们可以加载样本,按下按钮并通过这样做来操纵音高,然后播放它。使用峰值拾取算法是否足以改变信号的音调,或者信号在播放过程中是否会被搞砸?
(这不是实时处理)
正如我在上面的评论中提到的,实际上有两种方法可以使用,相位声码器或更高的采样率。第一种方法,使用声码器将保持信号长度,同时将包含的频率移得更高。我不会详细介绍如何执行此操作的算法,但哥伦比亚大学公开提供了相关代码 -http://www.ee.columbia.edu/ln/labrosa/matlab/pvoc/ http://www.ee.columbia.edu/ln/labrosa/matlab/pvoc/
第二种方法只是将 *.wav 文件写入更高的采样率。
假设您有一个 440 Hz 的信号,您希望将其变为 880 Hz,只需将采样率加倍即可。
所以而不是说wavwrite(signal,fs,'file')
, use wavwrite(signal,2*fs,'file')
然而,无论您提高采样率多少,这都会缩短音频文件的长度。
总的来说,我认为更好、更令人印象深刻的方法是声码器,我不建议盲目地使用哥伦比亚的代码,而是实际上花时间理解它并能够用数学方式解释其背后的逻辑
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)