结束了朝七晚十二的生活后,最近几天好好放纵了一下,把库存里的还没玩的游戏都玩完或者玩到卡关,把想再看一遍的书又看了一遍,奢侈地睡了个觉。但是看了看开学时间不断地逼近,计划却只完成了那么几个,心里着实不甘。于是又来敲键盘了。
Tzvi讲过,我们Matlab只学一个学期的基础,后面因为不同人的发展方向不同,所以只能靠学习基础的方式自行学习你需要用到的内容。所以今天要摸的是Matlab里有关于sound的内容(Matlab的功能真的很杂,它甚至还有FM Broadcast Receiver)
《Mastering MATLAB》里关于SOUND的介绍非常少,只有短短两页内容,可见在Matlab里,sound并不是什么主要内容或者说是弱项。sound在matlab里更多的并不是用于制作音乐,而是提醒和分析声音背后的数学,物理规律
为什么说是提醒呢,因为有些比较复杂的程序,往往需要matlab运算很久才会有结果,这时候人一般是不会盯着屏幕等着出结果,而是走开先去干其他事。这时候就需要matlab在运算完后发出提示,最好是声音。所以sound在matlab里更多是用于提醒程序已运行完,结果已得出(一般用beep函数)。不过也有人用warndlg(弹出窗口)来提醒
在《Mastering MATLAB》里这部分内容,似乎把函数分成了high-level functions (audioplayer, audiorecorder, getaudiodata, audiodevinfo...) 和 lower-level functions (sound, soundsc, auread, wavread, auwrite, lin2mu...)。但我觉得分高低级并没有什么用
还是从头开始尝试,就从怎么播放系统自带的音频开始吧
其实matlab自带了很多声音,除了我们刚刚在上面提到的我们用matlab经常能听到的beep之外,还有chirp(叽叽喳喳的鸟叫声), gong(铜鼓), handel(哈雷路亚), laughter, splat(东西掉下来的啪嗒声), train。这些东西都是mat文件,位置在
"MATLAB/R2018b/toolbox/matlab/audiovideo"
我们可以通过以下函数来播放
load chirp; %读取chirp.mat文件
sound(y,Fs); %播放以y为样本,Fs为频率的声音
还可以这么写
load train;
player = audioplayer(y,Fs); %创建用于播放音频的对象
play(player);
load我们应该都能看懂,就是读取文件,而mat文件就是matlab自带的数据包文件格式。sound(y,fs)就是播放以y为样本,fs为采样频率的声音;与之相对的是play,它可以从 audioplayer 对象播放音频。audioplayer就是创建用于播放音频的对象
audioplayer对象长这样
其中fs采样频率以Hz为单位,指的是采所有的样本,但是一秒内采fs个样本。必须有震动,即变化,或者说是波才能形成声音,所以当样本全为同一个值的时候,不管这个值有多大,它都是没有声音的,只有在值出现变化的时候,才会有声音
嗯嗯,你们动手试试吧,这些声音都挺有趣的
然后我们看回我刚刚放的第一张图,里面箭头的是系统自带的包含音频信息的mat文件,方形的是敲琴视频,还有圆圈圈出来的是matlab的一个彩蛋。比较神奇的是,唯独这个mat文件的频率Fs(7418)和其他mat的频率(8192)不一样,而且其他的样本数据名字都是y,唯独它是叫mtlb。有兴趣的朋友可以自己去试试这个彩蛋
我们现在看到的都是已经从音频文件转为mat的文件了,那如果我们自己要转换怎么做呢?这时候就需要audioread函数了
首先要把你要转换的音频文件放在当前目录里,当前目录你可以用pwd函数,看看是在哪里,或者直接看上面
比如我把一个叫night.mp3的文件,放在当前目录,然后就可以使用函数了
[y,fs] = audioread('night.mp3'); %读取音频文件,并输出到工作区的"y","fs"
sound(y,fs);
这时候我们发现,工作区出现了"fs","y"这两个数据,同时电脑还缓缓播放出好听的音乐。这里的"fs"就是这个音频的频率,"y"就是音频数据,而且"y"还是一个nx2的double,为什么是2呢,因为现在大多数音频文件都是双声道了啊。再补充一点,还有一个函数叫做soundsc,它可以缩放音频信号 y 的值以使其位于 –1.0 到 1.0 范围内,尽可能提高音频的音量,而不用裁剪
然后我们就可以点右上角的小三角形,对工作区进行保存
现在我们可以把原来的mp3文件和新的mat文件进行对比,就可以发现,这么做是非常的不划算的,文件大小一下子大了21倍。毕竟mat不是专门用来储存音频信息的,情有可原
没什么卵用不要紧,主要是这样可以装逼,不是吗。找个好友,发给已经转化过音频的mat文件给ta。"你下