【问题标题】:Finding pitch and changing it in MATLAB在 MATLAB 中寻找音高并改变它
【发布时间】:2019-01-26 16:09:40
【问题描述】:

早上好,我在 MATLAB 中寻找音高和换档时遇到问题。该程序可以编译,但是当我尝试发出移位的音轨时,它会发出奇怪的声音,并且发现的音高不正确。有什么问题?

 [audioIn,fs] = audioread('Silae.wav');
 [f0,idx] = pitch(audioIn,fs);

 subplot(3,1,1)    %2.1.1
 plot(audioIn)
 ylabel('Amplitude')

 subplot(3,1,2)    %2.1.2
 plot(idx,f0)
 ylabel('Pitch (Hz)')
 xlabel('Sample Number')

 [f1,idx] = pitch(audioIn,0.3*fs); 
 subplot(3,1,3)
 plot(idx,f1)
 ylabel('Pitch n (Hz)')
 xlabel('Sample Number n')
 [f1,idx] = pitch(audioIn,3*fs);  %2 o 4
 subplot(3,1,3)
 plot(idx,f1)
 ylabel('Pitch n (Hz)')
 xlabel('Sample Number n')
 sound(audioIn);

【问题讨论】:

  • 这是 your own question you deleted by now 的副本 请注意,通过删除帖子来“碰撞”帖子是违反 Stack Overflow 政策的。这可以让你禁止提问。相反,尽可能地改进你的问题,如果你有足够的声誉,set a bounty on it。您无权获得帮助,毕竟这是一项志愿服务,所以请不要滥用系统。

标签: matlab signal-processing pitch pitch-shifting


【解决方案1】:

函数pitch 返回音频矢量audioIn 的基本频率以及这些频率的位置。这个函数不会修改它的输入,所以当你做pitch(audioIn,0.3*fs)时,audioIn会保持不变。

所以,关于您在audioIn 上执行的操作,您的代码可以概括为:

[audioIn,fs] = audioread('Silae.wav');
sound(audioIn);

默认情况下,函数sound(不带Fs参数):

sound(y) 以 8192 赫兹的默认采样率将音频信号 y 发送到扬声器。

所以,问题是,如果您输入的Silae.wav 文件为 44100 Hz,则以 8192 Hz 播放它,您会慢 5 倍左右,从而产生奇怪而深沉的声音。

【讨论】:

  • 感谢您的回答。我经常对函数的参数感到困惑。但是我能做些什么来改变音高?
  • 您可以通过单击绿色复选标记来接受答案,这样人们就知道您认为答案是正确的。我正在寻找一些有趣的音高转换链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多