我写了一个程序,记录我的声音然后播放它
Fs=11025;
y= wavrecord(2*Fs,Fs,'int16');
wavwrite(y,Fs,'t1.wav');
wavplay(y);
我听到我的声音清晰 然后我想写另一个程序来读取该文件并播放它
y=wavread('t1.wav');
wavplay(y);
当我运行第二个程序时,我没有听到我的声音清晰
那么如何读取wav文件然后播放它没有问题?
答案 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);