查找音调并在MATLAB中进行更改

时间:2019-01-26 16:09:41

标签: matlab signal-processing pitch pitch-shifting

早上好,我在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);

1 个答案:

答案 0 :(得分:3)

函数pitch返回音频矢量audioIn的基本频率以及这些频率的位置。此功能不会修改其输入,因此当您执行pitch(audioIn,0.3*fs)时,audioIn将保持不变。

因此,关于您在audioIn上执行的操作,您的代码可以总结为:

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

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

  

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

因此,问题是,如果您的输入Silae.wav文件的频率为44100 Hz,则通过以8192 Hz的频率播放它,您会以应有的速度慢大约5倍的播放速度,从而使声音变得奇怪而深沉。 / p>