新浪博客

用Matlab读取和生成.wav音频文件

2017-06-14 23:20阅读:
音频数字化的基本原理 在写代码之前需要知道一点基本的音频知识和原理,什么是音量(Volume)、频率(Frequency)以及它们的单位分贝(dB)、赫兹(Hz)。
音量(Volume)又称响度、音强,是指人耳对所听到声音强弱的主观感受,会受振幅大小的影响,其单位为分贝(dB),是以美国发明家“电话之父”亚历山大·格雷厄姆·贝尔的名字命名的。
频率(Frequency)是指信号每秒钟变化的次数,表示人耳对声音音调高低的感知,以赫兹(Hz)为单位。
采样率(Sample rate),用来定义每秒从连续信号中提取并组成离散信号的采样个数,通常记为fs,同样以赫兹(Hz)为单位。其倒数为采样周期,用来表示采样之间的时间间隔。
用Matlab读取和生成.wav音频文件
PPT原文链接
http://users.cs.cf.ac.uk/Dave.Marshall/CM0268/PDF/07_CM0268_DSP.pdf
生成及保存.wav文件
有了以上的基础概念和公式,可以开始着手生成并保存.wav文件了。以下面excel表截图为例(这里采样频率fs=44100Hz):
用Matlab读取和生成.wav音频文件

fs = 44100; %采样频率
T = 1/fs; %采样周期
time1 = 0.25; %第一个声音片段的总时长
time2 = 0.1;
time3 = 0.25;
freq1 = 261; %第一个声音片段的频率(音调)
freq2 = 0;
freq3 = 370;
vol1 = 80; %第一个声音片段的音量
vol2 = 0;
vol3 = 80;
tone1 = sin(2*pi*freq1*(0:T:time1))*(db2mag(vol1)); %生成第一个声音片段,注意需要用db2mag()函数把dB转换成magnitude,或者用公式以人耳听力正常范围的分贝标准10^((vol-85)/20)转换
tone2 = sin(2*pi*freq2*(0:T:time2))*(db2mag(vol2));
tone3 = sin(2*pi*freq3*(0:T:time3))*(db2mag(vol3));
Tone = [tone1, tone2, tone3]; %组合所有声音片段
sound(Tone,fs) %可以播放声音的函数 sound()
%存储.wav音频文件
filename = (‘test.wav’); %给文件取名
audiowrite(filename,Tone,fs) %存储.wav音频文件,在这里文件名为test.wav


读取.wav音频文件
比如读取刚刚生成的test.wav文件,设置好Matlab的路径以后,用audioread()函数:
[test, fs] = audioread('test.wav');
plot(test) %可以画出声音的波形图


读取Matlab自带的声音
Matlab自带了很多声音可以直接播放,比如鸟叫声(chirp),火车声(train),哈利路亚的歌声(handel)等等,可见http://blog.sciencenet.cn/blog-598445-501571.html 有Matlab声库总结。这里以播放哈利路亚歌声为例子,先使用load函数先读取歌声,再使用sound函数播放声音:
load handel
sound(y, Fs) 或直接 sound(y)

我的更多文章

下载客户端阅读体验更佳

APP专享