您的位置:首页 > 编程语言 > MATLAB

运用MATLAB代码创作超好听的台剧《想见你》片尾曲——《想见你》

2020-07-18 04:49 429 查看

写在最前面的话:

2020年听过最美的故事就是来自1998的李子维爱上了2019年的黄雨萱。

  •  想念离我如此之近,才发现你多遥不可及
  •  你的出现就足够占据我余生的那些年
  •  失去你的时间里面,我的世界从未往前
  •  所有的离别都是我在练习失去你
  •  要我怎么穿越时间,重新和你相识一遍
  •  在想念的时候,就把温柔的自己都用完了
  •  慢慢把自己搁浅在无法拼凑的昨天

27岁黄雨萱爱上的是拥有王全胜身体的李子惟的灵魂 ,17岁的李子维爱上的是拥有陈韵茹身体的黄雨萱的灵魂 ,17岁追逐阳光一样刺眼李子维的陈韵茹车祸死掉 ,27岁深爱黄雨萱的王全胜空难死掉。

这样的一部穿越时空的爱恋,深入人心,让我们认识到了李子维,也认识了黄雨萱,还有那个小天使莫俊杰。片尾曲八三夭乐团的《想见你》在一段时间甚至成为了手机中重复播放的曲目。

正文部分:

在网上闲逛的时候无意间发现有同学使用MATLAB创作了歌曲,第一次发现MATLAB竟然也可以这么玩。在仔细研究了相关的代码后,理解了一下其中的原理,并去学习了一下乐理的基础知识后,决定自己动手探索一下,并在以下部分具体解释以下其中的奥秘。

1.什么是声音

从本质上来说,声音其实是一种机械波。各种波源的振动通过介质的传播到人类或者动物的听觉器官(耳)后,听觉器官中的特殊分化细胞将感受到的振动转换为神经冲动。这些携带着振动信息的神经冲动传导至听觉中枢后,经过大脑的分析处理,最终便产生出了我们对振动的感受-声音。

声音是一种由振动带来的感受,一般来说音波常常被简化为正弦平面波的合成,而我们所说的声音的三个主要的主观属性(即音调、音量、音色)则是由如下参数刻画的:

  • 频率:频率越高,音调越高。人耳可以听到的振动频率范围在20到2万赫兹(Hz)之间。高于这个频率范围的我们称为超声波,而低于这个范围的我们叫次声波。
  • 波长:波长越长,音调越低。
  • 振幅:振幅是在振动中距离平衡位置或静止位置的最大位移。振幅越大,音量越大。
  • 波形:不同的波形有不同的音色。波形是波在物理介质上移动的抽象表达形式。简单的说,就是声波所对应的函数的曲线图形。

在信号学中,音乐信号属于正弦波,并且是由很多大大小小频率不一的波组成的。

2.MATLAB中函数介绍

在MATLAB中播放音乐的是由sound(Y,fs,bits)函数来完成,该函数的三个参数代表输入信号、采样率、比特率。假设信号输入频率是w0,采样频率为Fs,我们知道连续正弦信号可以表示为y(t)=Asin(w0*t),其中w0=2π*f0,这里f0就是信号的频率,t为连续的时间。在离散信号中,t是离散的,我们以固定的时间间隔采样,设时间间隔为Ts=1/Fs。那么t=n*Ts,n表示第n个样点。所以连续信号就可以表示成y(t)=Asin(2π*f0*n*Ts)=Asin(2π*f0*n/Fs),也就是y(n)=Asin(2π*f0*n/Fs)。
        采样频率Fs是可以任意选择的,但是为了能从离散信号无失真还原原始信号,采样频率需要大于声音最高频率的两倍。Fs越大,保留的信息就越多,但是采样相同时间数据量就越大。

同时对于音频采样率的设计,音频采样率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。在当今的主流采集卡上,采样频率一般共分为11025Hz、22050Hz、24000Hz、44100Hz、48000Hz五个等级,11025Hz能达到AM调幅广播的声音品质,而22050Hz和24000HZ能达到FM调频广播的声音品质,44100Hz则是理论上的CD音质界限,48000Hz则更加精确一些。所以本文中也采取使用48000Hz。

对于正弦函数y(n)=Asin(2π*f0*n/Fs),其中A决定振幅大小即控制声音大小,f0决定频率大小即控制声音的音调高低,n/Fs的范围控制着声音的长短,所以理论上利用这个公式可以发出任何声音,只是不能控制音色和音质。控制音色的主要是是谐波,一般形容高于基波频率的小波就叫作谐波。

3.简单乐理介绍

国际标准音调的频率是440Hz,即每秒内振动的次数为440次。

以国际标准音 A-la-440HZ为准:

C - do -  261.6HZ;

D - re -  293.6HZ;

E - mi -  329.6HZ;

F - fa -  349.2HZ;

G - sol- 392HZ;

A - la -  440HZ;

B - si -  493.8HZ;

在音乐中,相邻的音组中相同音名的两个音,包括变化音级,称之为八度。现代生物学研究表明,人耳的敏感程度与声音频率大致呈指数关系。每当声音的频率翻倍,我们就记它为一个单位——西方叫“八度”,东方叫均。因此对于高八度与低八度之间的频率就是成二倍的关系。

对于乐谱的简谱:

  • 增时线和减时线

简谱中,音的长短是在基本音符的基础上加短横线、附点、延音线和连音符号表示的。

短横线的用法有两种:写在基本音符右边的短横线叫增时线。增时线越多,音的时值就越长。

不带增时线的基本音符叫四分音符,每增加一条增时线,表示延长一个四分音符的时间。

写在基本音符下面的短横线叫减时线。减时线越多,音就越短,每增加一条减时线,就表示缩短为原音符音长的一半。

写在音符右边的小圆点叫做附点,表示延长前面音符时值的一半。附点往往用于四分音符和少于四分音符的各种音符。

  • 音高音低

记在简谱基本音符号下面的小圆点,叫低音点,它表示将基本音符降低一个音组,即降低一个纯八度。记两个圆点表示将基本音符号降低两个音组,即降低两个纯八度。

记在简谱基本音符号上面的小圆点,叫高音点,它表示将基本音符号升高一个音组,即升高一个纯八度。记两个圆点,表示升高两个音组,即升高两个纯八度。

  • 音符长短

表示音乐的长短需要有一个相对固定的时间概念。简谱里将音符分为全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符等。在这几个音符里面最重要的是四分音符,它是一个基本参照度量长度,即四分音符为一拍。这里一拍的概念是一个相对时间度量单位。一拍的长度没有限制,可以是1秒也可以是2秒或半秒。假如一拍是一秒的长度,那么二拍就是两秒;一拍定为半秒的话,两拍就是一秒的长度。一旦这个基础的一拍定下来,那么比一拍长或短的符号就相对容易了。

4.如何用MATLAB创作《想见你》

根据《想见你》的简谱,在这里设定采样频率为48000Hz,以标准音440为基础,通过sound函数来创作,具体代码如下。

[code]clc;clear all;
fs=48000;

C3_2=key(48, 2, fs);
D3_2=key(50, 2, fs);
E3_2=key(52, 2, fs);
F3_2=key(53, 2, fs);
G3_2=key(55, 2, fs);
A3_2=key(57, 2, fs);
B3_2=key(59, 2, fs);
C4_2=key(60, 2, fs);
D4_2=key(62, 2, fs);
E4_2=key(64, 2, fs);
F4_2=key(65, 2, fs);
G4_2=key(67, 2, fs);
A4_2=key(69, 2, fs);
B4_2=key(71, 2, fs);
C5_2=key(72, 2, fs);
D5_2=key(74, 2, fs);
E5_2=key(76, 2, fs);
F5_2=key(77, 2, fs);
G5_2=key(79, 2, fs);
A5_2=key(81, 2, fs);
B5_2=key(83, 2, fs);

PART1=[G4_8 D4_4 C4_4 D4_4 C4_8 D4_8 D4_4 G4_8 G4_1];
PART2=[G3_8 C4_4 B3_4 C4_4 A3_8 C4_1 E4_8 E4_8];
PART3=[A3_8 A3_4 B3_4 C4_4 G3_8 G3_1 E3_8];
PART4=[F3_4 E4_8 E4_4 F4_2 D4_2];

PART5=[G3_8 D4_4 C4_4 D4_4 C4_8 D4_1 G4_8 ];
PART6=[G4_4 C4_4 B3_4 C4_4 A3_8 C4_8 C4_4 A4_8 G4_1];
PART7=[E4_8 A4_4 B4_4 C5_4 C4_1 E4_8];
PART8=[F4_4 E4_8 F4_4 G4_2 D4_2 C4_4 D4_4];

PART9=[E4_4 D4_8 E4_4 G4_2 D4_4 C4_8 D4_4 F4_2];
PART10=[C4_4 B3_8 C4_4 D4_4 A3_4 G3_2 C4_4 D4_4];

PART11=[E4_4 D4_8 E4_4 G4_2 D4_4 C4_8 D4_4 B4_1];
PART12=[C5_2 C5_4 B4_8 C5_4 B4_8 C5_4 E4_2];
PART13=[G4_2 G4_8 C5_8 B4_8 C5_8];

PART14=[E4_4 D4_8 E4_4 G4_2 D4_4 C4_8 D4_4 B4_2];
PART15=[B4_4 C5_2 E4_8 G4_8 G4_2 C5_8 B4_8 C5_8];
PART16=[A4_4 G4_8 A4_4 C5_2 G4_4 C5_8 G4_4 E4_2];
PART17=[F4_4 A4_8 G4_1 A4_8 E4_4 D4_2 C5_8 B4_8 C5_8];

PART18=[E4_4 D4_8 E4_4 G4_2 D4_4 C4_8 D4_4 B4_2];
PART19=[B4_4 C5_8 C5_8 C5_8 D5_4 E5_8 E5_2 D5_4 E5_8 C5_8];
PART20=[C5_4 A4_4 A4_2 A4_8 G4_4 C5_8 G4_8 G4_2 E4_8];
PART21=[F4_4 G4_8 A4_4 C5_2 E5_2 D5_2 C5_2];

PA1=[PART1 PART2 PART3 PART4];
PA2=[PART5 PART6 PART7 PART8];
PA3=[PART9 PART10];
PA4=[PART11 PART12 PART13];
PA5=[PART14 PART15 PART16 PART17];
PA6=[PART18 PART19 PART20 PART21];

legend=[PA1 PA2 PA3 PA4 PA5 PA6];
sound(legend,fs)

整首曲子共1分30秒,代码可以很好的重现《想见你》歌曲的伴奏(亲测有效),是不是很神奇很好听也很有意思呀!由于篇幅较长这里只粘贴部分代码,有需要的请点击链接自取~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: