wavread函数的问题

时间:2010-11-03 19:31:33

标签: matlab

我写了一个程序,记录我的声音然后播放它

Fs=11025;
y= wavrecord(2*Fs,Fs,'int16');
wavwrite(y,Fs,'t1.wav');
wavplay(y);

我听到我的声音清晰 然后我想写另一个程序来读取该文件并播放它

y=wavread('t1.wav');
wavplay(y);

当我运行第二个程序时,我没有听到我的声音清晰

那么如何读取wav文件然后播放它没有问题?

2 个答案:

答案 0 :(得分:1)

您使用的wavwrite可能会认为传入的y的范围为[-1 +1]。在致电y

之前,请尝试规范化wavwrite
y_float = double(y)/2^15; %% Normalize int16(y) by 2^15
wavwrite(y_float,Fs, 't1.wav');

如果wavplay读取浮点y_float出现问题,您可以将读回信号从浮点转换为int16:

y_float_readback = wavread('t1.wav');
y_int16_readback = int16(y_float_readback*2^15);
wavplay(y_int16_readback);

您可以将y_int16_readback与原始y进行比较。它们应该完全相同。

答案 1 :(得分:0)

使用最新版本的matlab,这个脚本对我来说非常好。我使用你的第一和第二段代码摘录听到清晰的音频。

我注意到的一件事是你将y记录为'int16'类型,然后将其保存到wav文件中。使用wavread加载wav文件时,默认情况下,y作为双精度浮点数据存储在matlab工作空间中。如果您希望y以您保存的格式加载,请尝试以下操作。

y=wavread('t1.wav','native');
wavplay(y);