1

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

1 回答 1

3

该函数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 倍于你应该播放的速度,使它变得奇怪而深沉的声音。

于 2019-01-28T09:18:59.903 回答