matlab怎么发声,听听函数,看看声⾳--Matlab的sound()函
数
什么是声⾳
从本质上来说,声⾳其实是⼀种机械波1。各种波源的振动通过介质的传播到⼈类或者动物的听觉器官(⽿)后,听觉器官中的特殊分化细胞将感受到的振动转换为神经冲动。这些携带着振动信息的神经冲动传导⾄听觉中枢后,经过⼤脑的分析处理,最终便产⽣出了我们对振动的感受-声⾳。
既然声⾳是⼀种由振动带来的感受,那么什么样的振动会带给我们什么样的声⾳感受呢?⼀般来说⾳波常常被简化为正弦平⾯波的合成,⽽我们所说的声⾳的三个主要的主观属性(即⾳调、⾳量、⾳⾊)则是由如下参数刻画的:
频率:频率越⾼,⾳调越⾼。⼈⽿可以听到的振动频率范围在20到2万赫兹(Hz)之间。⾼于这个频率范围的我们称为超声波,⽽低于这个范围的我们叫次声波。
波长:波长越长,⾳调越低。
振幅:振幅是在振动中距离平衡位置或静⽌位置的最⼤位移。振幅越⼤,⾳量越⼤。
波形:不同的波形有不同的⾳⾊。波形是波在物理介质上移动的抽象表达形式。简单的说,就是声波所对应的函数的曲线图形。
纯⾳与复合⾳
最普通最基本的声波就是简谐振动所产⽣的正弦波,⽽纯⾳则指的是以某个固定频率进⾏简谐振动所产⽣的声波。⽐如⾳叉,或者我们拿起座机电话听筒听到的声⾳就是⼀种近似的纯⾳。
复合⾳则是由多个纯⾳组成的⾳。其产⽣是由于物体振动时引起不同部位的振动,如⼀根琴弦,当它在振动时就同时包含了琴弦的不同部位的振动:⾸先是整条弦的振动,然后还有⼆分之⼀、三分之⼀、四分之⼀等琴弦不同部位的振动,这些部分振动就产⽣了不同⾳⾼的⾳,这些⾳⼜是同时发响,于是就混合在⼀起,形成了复合⾳。
纯⾳的函数
通过上⾯的讨论,我们可以看出纯⾳实际上可以被视为各种各样的⾳的基本组成。那么纯⾳的函数是怎样的呢?纯⾳的函数可以写为是:
y=Asin2πw
其中
A
为振幅,
w
控制频率。下图表⽰了两个纯⾳的函数图形。当然也可以说是⼀个复合⾳。
我们通常说的do,re,mi,fa,so,la,ti⼜是什么呢?实际上这些⾳(或者说是唱名)是⼀种⾳⾼的记法。⽽⾳⾼于频率是指数的关系。所以知道了频率也就知道了⾳⾼。
f=440×2(p−69)/12
其中
f
代表频率,
p
代表⾳⾼。标准⾳la的定义为
p=69
,也就是频率
f=440
。我们常说的中央c的定义则为
p=60
,频率
f=261.63
。下图为常⽤的⾳的频率表:
Matlab中的sound()函数
在Matlab中,有⼀个发声函数sound()。这个函数可以让我们⽅便的编辑声⾳。
sound(Y,FS) nds the signal in vector Y (with sample frequency FS) out to the speaker on platforms
that support sound. Values in Y are assumed to be in the range -1.0 <= y <= 1.0. Values outside that range are clipped. Stereo sounds are played, on platforms that support it, when Y is an N-by-2 matrix.
sound(Y,FS,BITS) plays the sound using BITS bits/sample if possible. Most platforms support BITS=8 or 16.
参数Y是输⼊的信号,也就是声⾳的函数。⽐如上⾯提到的标准⾳la的函数可写为y=sin(2π⋅440)。
参数FS是采样频率,定义了每秒从连续信号中提取并组成离散信号的采样个数。FS越⼤,保留的信息就越多。⽐如⾳频CD或者mp3的采样频率为44,100Hz。
参数BITS是⽐特率。作为⼀种数字⾳乐压缩效率的参考性指标,⽐特率表⽰单位时间(1秒)内传送的⽐特数bps(bit per cond,位/秒)的速度。简单地说,⽐特率间接衡量⾳频质量的⼀个指标。许多⾳乐⽂件例如mp3的⽐特率为128kbps,⽽
24BIT灌制的CD(⽐如很多XRCD)压出的⽆损⾳频APE能达到1000kbps以上。
输⼊信号Y
介绍完sound()后,我们可以看出其中需要我们⾃⼰编辑的主要就是输⼊信号Y。以中央c为例⼦:
fs=44100; %确定采样频率
t=0: 1/fs: 0.5; %t为⾳长
c=sin(2*pi*261.63 *t); %中央c的频率为261.63Hz
sound(c, fs)
也可以很简单的编辑⼀个⾳阶⼤调⾳阶:
防爆膜多少钱fs=44100;
t=0: 1/fs: 0.5;
do=sin(2*pi*261.63 *t);
re=sin(2*pi*293.66 *t);
mi=sin(2*pi*329.63 *t);
fa=sin(2*pi*349.23 *t);
so=sin(2*pi*392.00 *t);
la=sin(2*pi*440.00 *t);
ti=sin(2*pi*493.88 *t);
Cscale=[do,re,mi,fa,so,la,ti];
sound(Cscale,fs)
⼀些Matlab⾃带的声⾳效果也很有意思:
%鸟声
load chirp
sound(y,Fs)
%锣声
灯迷load gong
sound(y,Fs)
%哈⾥路亚
load handel
sound(y,Fs)
%笑声
load laughter
sound(y,Fs)
%啪哒声
load splat
sound(y,Fs)
%⽕车
load train
sound(y,Fs)
和弦的实现
上⾯介绍了如何⽤sound()来编辑单⾳与⾳阶。但是玩⾳乐⼜怎么能没有和弦?由于输⼊信号Y只能是⼀个N×2的矩阵,也就是说sound()⼀次最多可以同时播放两个⾳。那么我们怎么实现最简单的⼤三和弦呢?简单来说就是通过叠加。
fs=44100;
t=0: 1/fs: 0.5;
y = sin(2*pi*261.63*t);
y = y + sin(2*pi*329.63*t);
y = y + sin(2*pi*392*t);
四叶草含义soundsc(y,fs); %soundsc()没有限制⾳量
再来⼀个⼤⼩七和弦(或者叫属七和弦)
fs=44100;
t=0: 1/fs: 0.5;
y = sin(2*pi*261.63*t);
y = y + sin(2*pi*329.63*t);
y = y + sin(2*pi*466.16*t);
soundsc(y,fs);
当然这样写和弦⽐较费事,如果和弦⽤得多的话建议写⼀个和弦的function⽂件来实现。
实例
现在有了⾳与和弦,我们就可以开始编写⼀些简单的歌曲啦。
clear
fs=44100;
t=0: 1/fs: 0.5;
%%%%%backing track%%%%%
one=0.5*sin(2*pi*261.63*t);
one=one+0.5*sin(2*pi*329.63*t);
one=one+0.5*sin(2*pi*466.16*t);
four=0.5*sin(2*pi*349.23*t);
four=four+0.5*sin(2*pi*440*t);
four=four+0.5*sin(2*pi*622.25*t);
five=0.5*sin(2*pi*392*t);
five=five+0.5*sin(2*pi*493.88*t);
five=five+0.5*sin(2*pi*698.46*t);
bar1=[one one one one];
新诡案组>英文小作文bar4=[four four four four];
bar5=[five five five five];
backing=[bar1 bar1 bar1 bar1 bar4 bar4 bar1 bar1 bar5 bar4 bar1 bar1];
%%%%%pentatonic%%%%%
so=sin(2*pi*196*t);
la=sin(2*pi*220*t);
do=sin(2*pi*261.63*t);
re=sin(2*pi*293.66*t);
blue=sin(2*pi*311.13*t);
blk=sin(2*pi*0*t); %blank
男人喝什么壮阳%%%%%melody%%%%%
melody=[so so la la do do blue blue blue blk re do do do la blue blue la ... la do blue re so la do blk blk re blue do re so la la so la do re blue ... blue blue so so la la re blue do];
%%%%%%%%%%%%%%%
song=[backing;melody];
soundsc(song,fs)
audiowrite() 和 audioread()
最后,如果⼤家希望保存下来⾃⼰写的⾳频的话可以⽤audiowrite()函数。⽽读取则可⽤audioread()函数。
audiowrite('mysong.wav',melody,fs)摔跤比赛
[y,Fs] = audioread('mysong.wav');
这个audioread()函数也⼗分有趣。我们可以录制⼀段⾃⼰的声⾳看看⾃⼰声⾳的函数图形。
[y,Fs] = audioread('test.m4a');
t=length(y);
t=linspace(0, 1.8097,t); %时长可从audioinfo('test.m4a') 查看。
plot(t,y)
机械波(Mechanical wave)是机械振动在空间中的传播,是波的⼀种。机械波的特点是必须通过介质来传播。另外有⼀些波,⽐如电磁波,引⼒波,不通过介质,⽽是通过场来传播,它们不是机械波。 ↩修鞋匠