什么是声音

从本质上来说,声音其实是一种机械波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) sends 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 second,位/秒)的速度。简单地说,比特率间接衡量音频质量的一个指标。许多音乐文件例如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)是机械振动在空间中的传播,是波的一种。机械波的特点是必须通过介质来传播。另外有一些波,比如电磁波,引力波,不通过介质,而是通过场来传播,它们不是机械波。 ↩

matlab怎么发声,听听函数,看看声音--Matlab的sound()函数相关推荐

  1. 数字语音处理——用sound函数播放喀秋莎(附赠歌唱动荡的青春)

    sound函数 上课老师提到了sound函数,一个非常简单的函数,sound - 将信号数据矩阵转换为声音.以下为其用法: sound(y) //以默认采样率 8192 赫兹向扬声器发送音频信号 y. ...

  2. matlab 产生声音,matlab实现声音转换

    <matlab实现声音转换>由会员分享,可在线阅读,更多相关<matlab实现声音转换(19页珍藏版)>请在人人文库网上搜索. 1.数字信号处理声音转换课题报告1.课题研究目标 ...

  3. matlab样本序列的时域波形,基于MATLAB的简易声音信号频谱分析仪设计

    基于MATLAB的简易声音信号频谱分析仪设计 汉宁窗时域波形曲线图 汉宁窗频域特性曲线图 在MATLAB中,生成汉宁窗的函数是hanning.使用该函数进行频谱修正时,先生成一个和待修正的样本具有相同 ...

  4. 不用工具箱的神经网络matlab程序_MATLAB中的神经网络工具箱(2)函数命令及模型搭建...

    前面介绍了神经网络工具箱GUI的使用,它功能强大可以直接生成脚本.但是函数命令的灵活性是GUI所不及的.也应该有所了解. 神经网络函数命令 1.网络创建函数 函数名称 功能 fitnet 创建函数拟合 ...

  5. 【 MATLAB 】序列的奇偶分解的 MATLAB 函数编写实践

    序列 x(n)的奇偶分解的公式为: 编写一个序列 x(n) 的奇偶分解式 xe(n) 和 xo(n),需要考虑的问题是序列长度,下标的变化. 这里必须做个声明,下面的程序中用到了前几篇博客中的几个函数 ...

  6. 【 MATLAB 】通过案例学会编写一个 matlab 函数(小猫掉进山洞问题)

    这是关于matlab学习的第一篇博文,我是不愿意承认自己不会MATLAB的,因为这东西大一的时候就学过,如果白驹过隙,都不好意思说自己研几了,科研的过程中MATLAB是必须要会的,于是得系统的看一下了 ...

  7. matlab中fminunc函数使用方法,[分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB)...

    [分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB) 无约束非线性规划函数\fminunc函数使用方法(MATLAB) %用于求解无约束非线性规划的函数有:fminsearch和f ...

  8. MATLAB实战系列(十一)-多种群遗传算法的函数优化算法(附MATLAB代码)

    前言: 本篇博文参考,智能优化算法书籍<MATLAB智能算法30个案例分析(第2版)>,今天要与大家分享的智能算法是多种群遗传算法. 本地MATLAB环境部署 因为后面要介绍的多种群遗传算 ...

  9. matlab抓取股票数据,Matlab经过sina web接口获取个数即时股票数据函数实现代码

    Matlab通过sina web接口获取个数即时股票数据函数实现代码 代码如下: function stockinfo = queryprice(stocktype, stockid) %stockt ...

最新文章

  1. 全网最简单的网络图画法,小白福音包学包会
  2. tf.keras.activations.sigmoid 激活函数 示例
  3. xml文件上传服务器读取不了,本地读取服务器Xml文件及本地读本地的xml
  4. 基于busybox的Linux小系统制作 (initrd)
  5. 转 执行计划突变分析
  6. UART 异步串行通信发送模块设计与实现
  7. 程序员幽默:年后上班综合症,你中了几招?!!
  8. InfluxDB安装及使用
  9. Dubbo-admin无法显示Group分组信息
  10. Java 读取txt文件生成Word文档
  11. 各地的磁倾角_全国各地区地磁场强度表
  12. 创建新的apple id_新的Apple Maps与Google Maps:哪个适合您?
  13. 静觅爬虫学习笔记8-爬取猫眼电影
  14. 【12c】12c RMAN新特性之recover table(表级别恢复)
  15. 了解一下什么是领导力,以及如何培养领导力
  16. Eclipse更改字体大小设置
  17. 调试 GPS 1.575G干扰无法搜星问题
  18. php网上交友系统,解决方案-PHP交友程序_交友源码_征婚交友系统- OELOVE官方网站...
  19. shangguan yan
  20. docker的基础用法

热门文章

  1. AXI总线学习(AXI34)
  2. CMWAP 和 CMNET
  3. presto 剖析详解
  4. Redis删除指定前缀的key
  5. [Mur-003] Mur源码分析之三:一个能运行起来的例子
  6. 0基础快速入门Python,小白必看
  7. Python制作某电商平台商品竞拍脚本,能自动定时、抢拍、购买!吊不吊?
  8. 关于软路由改造的流水账(一)
  9. IMPL2. get_cells/get_pins等获取对象常用命令解析
  10. 一切相识,都是有缘人