基于MATLAB的简单音乐合成
- 格式:docx
- 大小:28.34 KB
- 文档页数:11
在Matlab中实现音乐合成和音乐分析的方法音乐作为一种艺术形式,是人类情感和创造力的结晶。
如何在Matlab中实现音乐合成和音乐分析的方法,成为了许多音乐爱好者和研究者所关注的问题。
本文将介绍一些常用的音乐合成和音乐分析的方法,并说明它们在Matlab中的实现。
首先,我们来讨论音乐合成的方法。
音乐合成的目标是通过人工的方式生成音乐声音信号。
这可以通过基于规则的方法或基于样本的方法实现。
基于规则的音乐合成常常依赖于合成器,通过调整音色、音高、音量等参数来实现声音生成。
在Matlab中,我们可以利用`audioplayer`函数和音频波形生成函数来实现基于规则的音乐合成。
首先,我们需要定义一个音频波形生成函数,它可以根据输入的参数生成对应的音频波形。
然后,我们可以使用`audioplayer`函数将生成的音频波形播放出来。
通过调整参数可以实现不同的音乐效果。
而基于样本的音乐合成则是利用已有的音频样本来合成音乐。
在Matlab中,我们可以使用`audioread`函数来读取音频样本,然后通过重复拼接、叠加和变调等方式来生成新的音乐。
此外,我们还可以利用`resample`函数来改变音频的采样率,从而实现音乐的时间拉伸或压缩。
通过调整样本的选择和变换方式,我们可以获得不同风格和效果的音乐合成结果。
接下来,我们来讨论音乐分析的方法。
音乐分析的目标是对音乐进行特征提取和结构分析,以便深入理解音乐的内在规律和风格特点。
在Matlab中,有许多用于音乐分析的工具箱和函数可供使用。
一种常用的音乐分析方法是通过频谱分析来提取音乐的频率和强度信息。
在Matlab中,我们可以利用`fft`函数对音频信号进行傅里叶变换,得到音频信号的频谱。
通过分析频谱的峰值频率、能量分布等特征,我们可以获得音乐的基本音高、音色和音量等信息。
此外,我们还可以利用`spectrogram`函数来生成音频的时频谱图,以便更直观地观察音乐信号的时变特征。
音乐合成实验目录音乐合成实验.........................................................摘要:...........................................................第一部分简单的合成音乐........................................1.1合成《东方红》..........................................1.2 除噪音,加包络.........................................1.3改变程序,实现1.2中的音乐升高和降低一个八度 ............1.4在1.2的音乐中加入谐波 .................................1.5自选音乐合成——《两只老虎》...........................第二部分用傅里叶变换分析音乐..................................2.1载入fmt.wav并播放 .....................................2.2载入文件Guitar.mat,处理原始数据realwave.............2.3分析wave2proc的基波和谐波.............................2.4自动分析fmt.wav的音调和节拍 ...........................第三部分基于傅里叶级数的音乐合成...............................3.1 用2.3分析出来的结果重新加谐波...........................3.2 通过2.4提取的吉他音调信息弹奏《东方红》...............实验收获.........................................................摘要:本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。
Matlab中的电子音乐制作与音频合成技术引言电子音乐制作是一种结合技术和艺术的创造过程,而Matlab作为一种强大的数学计算软件,不仅可以应用于科学研究和工程设计,也能够用于音频处理和音乐创作。
本文将介绍Matlab中的一些电子音乐制作和音频合成技术,探讨如何利用Matlab来实现音频效果的设计和实现。
1. Matlab中的音频处理工具Matlab提供了许多音频处理工具箱,如Audio System Toolbox和DSP System Toolbox。
这些工具箱包含了各种音频处理算法和函数,可以用于音频的录制、分析、编辑和合成等方面。
通过这些工具箱,用户可以实现各种音频效果,如均衡器、压缩器、延时器等,并可以对音频进行滤波、混响、合成等处理。
2. 音频合成技术音频合成是电子音乐制作的重要环节之一,它可以通过合成器、采样和合成算法等方式来生成各种音频信号。
Matlab中的音频合成技术主要通过生成相应的音频波形来实现。
2.1 合成器Matlab提供了很多合成器函数,如sine、square、sawtooth等,用于生成不同类型的音频波形。
用户可以通过调整参数,如频率、振幅、相位等来控制波形的特性。
这些合成器函数可以通过简单的数学公式来实现生成音频波形的过程,使用户能够灵活地创作各种音乐效果。
2.2 采样合成除了使用合成器函数生成音频波形外,Matlab还提供了采样合成技术,用户可以通过将各种音频样本进行采样和合成来实现音频合成。
这种方法可以将现实世界中的各种音频素材转化为数字信号,并通过合成算法进行处理和合成。
3. 音频效果的设计与实现Matlab中的音频处理工具箱提供了丰富的音频效果函数和滤波器设计工具,使用户能够设计和实现各种音频效果。
3.1 均衡器均衡器是一种常用的音频效果器,它可以调整不同频段的音量,改变音频频谱的平衡来达到音频加工的效果。
Matlab中可以使用filter函数和滤波器设计工具来设计和实现不同类型的均衡器。
目录音乐合成实验................................................................................................. 错误!未定义书签。
摘要: (1)第一部分简单的合成音乐 (1)1.1合成《葫芦娃》 (1)1.2 除噪音,加包络 (5)1.3改变程序,实现1.2中的音乐升高和降低一个八度 (8)1.4在1.2的音乐中加入谐波 (9)摘要:本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。
由潜入深,一步一步分析了用MATLAB进行音乐合成的过程。
通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB 基本使用的目标。
第一部分简单的合成音乐1.1 合成《葫芦娃》根据《葫芦娃》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。
用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。
clear all;clc;freq=8000; %抽样频率T=1/freq;pattime=0.5; %节拍的时间note2=0:T:2*pattime;note4=0:T:1*pattime;note8=0:T:0.5*pattime;note_1=261.63; %各个音乐对应的频率note_2=293.67;note_3=329.63;note_5=391.99;note_6=440;note_7=493.88;note_1b=523.25;wave1=sin(2*pi*note_1*note4); %各个音符所对应的节拍wave2=sin(2*pi*note_1*note4);wave3=sin(2*pi*note_3*note2);wave4=sin(2*pi*note_1*note4);wave5=sin(2*pi*note_1*note4);wave6=sin(2*pi*note_3*note2);wave7=sin(2*pi*note_6*note4);wave8=sin(2*pi*note_6*note4);wave9=sin(2*pi*note_6*note8);wave10=sin(2*pi*note_5*note8);wave11=sin(2*pi*note_6*note4);wave12=sin(2*pi*note_5*note4);wave14=sin(2*pi*note_3*note4); wave15=sin(2*pi*note_1b*note8); wave16=sin(2*pi*note_6*note8); wave17=sin(2*pi*note_6*note8); wave18=sin(2*pi*note_5*note8); wave19=sin(2*pi*note_6*note2); wave20=sin(2*pi*note_5*note4); wave21=sin(2*pi*note_1*note4); wave22=sin(2*pi*note_2*note2); wave23=sin(2*pi*note_7*note2); wave24=sin(2*pi*note_7*note8); wave25=sin(2*pi*note_5*note8); wave26=sin(2*pi*note_3*note4); wave27=sin(2*pi*note_5*note2); wave28=sin(2*pi*note_1b*note8); wave29=sin(2*pi*note_6*note8); wave30=sin(2*pi*note_6*note8); wave31=sin(2*pi*note_5*note8); wave32=sin(2*pi*note_5*note8); wave33=sin(2*pi*note_6*note8); wave34=sin(2*pi*note_6*note8); wave35=sin(2*pi*note_5*note4); wave36=sin(2*pi*note_1*note4); wave37=sin(2*pi*note_3*note2); wave38=sin(2*pi*note_1b*note8); wave39=sin(2*pi*note_6*note8); wave40=sin(2*pi*note_6*note8); wave41=sin(2*pi*note_5*note8); wave42=sin(2*pi*note_5*note8); wave43=sin(2*pi*note_6*note8); wave44=sin(2*pi*note_6*note8); wave45=sin(2*pi*note_5*note4); wave46=sin(2*pi*note_1*note4); wave47=sin(2*pi*note_2*note2); wave48=sin(2*pi*note_3*note2); wave49=sin(2*pi*note_3*note8); wave50=sin(2*pi*note_1*note8); wave51=sin(2*pi*note_6*note4); wave52=sin(2*pi*note_1*note2); wave53=sin(2*pi*note_3*note4); wave54=sin(2*pi*note_5*note4); wave55=sin(2*pi*note_6*note4); wave56=sin(2*pi*note_6*note8);wave58=sin(2*pi*note_5*note4);wave59=sin(2*pi*note_6*note4);wave60=sin(2*pi*note_6*note8);wave61=sin(2*pi*note_1b*note2);wave62=sin(2*pi*note_7*note8);wave63=sin(2*pi*note_5*note4);wave64=sin(2*pi*note_6*note2);wave=[wave1 wave2 wave3 wave4 wave5 wave6 wave7 wave8 wave9 wave10 wave11 wave12 wave13 wave14 wave15 wave16 wave17 wave18 wave19 wave20 wave21 wave22 wave23 wave24 wave25 wave26 wave27 wave28 wave29 wave30 wave31 wave32 wave33 wave34 wave35 wave36 wave37 wave38 wave39 wave40 wave41 wave42 wave43 wave44 wave45 wave46 wave47 wave48 wave49 wave50 wave51 wave52 wave53 wave54 wave55 wave56 wave57 wave58 wave59 wave60 wave61 wave62 wave63 wave64]; %歌曲wave数组sound(wave,8000); %播放waveplot(wave); %描画函数在MA TLAB中运行,播放出了《葫芦娃》,但是可以听出效果很不好,只能听出具有《葫芦娃》的调子而已。
基于MATLAB的音频处理技术研究第一章引言音频处理技术是数字信号处理领域的一个重要分支,在音频信号采集、分析、增强和合成等方面有着广泛的应用。
随着数字信号处理技术的不断发展,基于MATLAB的音频处理技术也得到了快速的发展和应用。
本文将介绍MATLAB在音频处理领域的应用和研究,然后重点分析基于MATLAB的音频信号预处理和特征提取技术。
第二章 MATLAB在音频处理中的应用MATLAB是一种强大的数学仿真软件,其内置了丰富的数学分析工具和信号处理库,可以广泛应用于信号处理、数字通信、嵌入式系统设计等领域。
在音频处理领域,MATLAB提供了丰富的函数和工具箱,可以对音频进行采集、分析、合成和处理等任务。
2.1 音频采集MATLAB提供了嵌入式硬件支持包,可以连接各种类型的音频设备,如麦克风、音频接口等。
用户可以使用MATLAB编写程序,对音频进行实时采集和录制,并实时在MATLAB的界面上进行显示和处理。
2.2 音频分析MATLAB提供了许多用于音频信号分析的工具箱,如信号处理工具箱、音频工具箱和语音处理工具箱等。
用户可以利用这些工具箱进行频域分析、时域分析、滤波、FFT、STFT和解调等操作,以及进行各种音频信号的特征提取和分类。
2.3 音频合成MATLAB提供了各种音频合成的工具箱,如声学模型工具箱、可重复性工具箱和音频合成器等。
用户可以利用这些工具箱进行音频信号的合成和生成,例如混响效果、合成乐器音效等。
第三章基于MATLAB的音频信号预处理技术MATLAB提供了许多音频信号预处理的工具,这些工具可以在进行音频信号分析和特征提取之前对信号进行预处理,如降噪、去混响、去噪声,以及去掉杂音等。
3.1 降噪降噪是去除音频信号中的噪音干扰,使得信号更加清晰的重要步骤。
MATLAB提供了多种降噪算法,例如小波阈值法、基于分量分析的降噪方法和基于统计学习的降噪方法等。
这些算法可以对音频信号进行有效的降噪,从而提高信号的质量,提高后续分析的准确性。
音乐合成大作业实验报告无84 王梦娣2008011134实验报告部分一、简单的音乐合成1.请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。
请用sound 函数播放每个乐音,听一听音调是否正确。
最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?问题解答:《东方红》片段:其中所用音符的唱名、音名及对应频率(由十二平均律和相应键数间隔即可导出)如下:(单位是Hz)用sound播放单音,音调正确。
以一拍0.5秒计,播出合成音乐。
发现音乐听起来,总体上音调、节拍正确,但乐音无声音强弱变化,两音之间有明显的“啪”的杂声。
2.你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。
这种噪声严重影响合成音乐的质量,丧失真实感。
为了消除它,我们可以用图1.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。
此外建议用指数衰减的包络来表示。
问题解答:这个问题,实际上我并没有完全理解题意,没有明白是需要乐音之间有重叠,还是没有重叠,所以,我把两种方法都做了一遍,结果发现,用耳朵完全听不出区别。
对于无重叠的包络:我对包络所做的处理是,对于上图折线部分用指数实现,因为题目中有说当主观感受为线性变化时声音的概率实际上呈指数变化。
做出的结果的图像如下:包络0.511.522.533.54加包络后的音乐有重叠的包络:(处理后的音)从图像上可明显看出有重叠包络和无重叠包络的区别,但是听起来,基本听不出区别。
3. 请用最简单的方法将(2) 中的音乐分别升高和降低一个八度。
(提示:音乐播放的时间可以变化)再难一些,请用resample 函数(也可以用interp 和decimate 函数)将上述音乐升高半个音阶。
(提示:视计算复杂度,不必特别精确)问题解答:0.050.10.150.20.25未处理的一个音符加包络处理过的音符x 104-1.5-1-0.50.511.5由于题目中已有提示“音乐播放的时间可以变化”,所以很容易就想到用Sample函数实现音调的改变,用Sample函数也确实是最简单的方法。
M A T L A B数学实验报告姓名:学号:指导老师:专业班级:音乐合成学号班级姓名指导教师实验题目音乐合成评分1.实验目的:1.熟悉MATLAB的软件和语言指令的使用;2. 学习利用MATLAB进行连续信号的时域、频域分析;3. 通过电子音乐合成方面的练习增进对傅里叶级数的理解2.实验内容:使用matlab演奏《当你孤单你会想起谁》3.详细设计:1.本次音乐合成所作曲目为《当你孤单你会想起谁》简谱首先介绍matlab函数的玩法:matlab播放音乐是由sound(Y,fs,bits)函数完成的,该函数的3个参数代表输入信号、采样率、比特率。
先说采样率fs的设置,人耳能够听到的声音范围是20~20000Hz。
根据采样定理fs只需要大于40000即可。
此处采样率的设置采用了MP3的标准,即fs=44.1k.再说输入信号Y,Y一般是一个正弦波,如A*sin(2*pi*w*t)。
其中A控制着声音的大小,w控制着声音的高低,t的范围控制着声音的长短,所以理论上利用这个公式可以发出任何声音,只是不能控制音色和音质(音色音质很难用参数量化,我问了一下学语音的同学,这个东西跟音频谱重心,音频扩展度和音频谱平坦度有关系,这里不作讨论)。
比特率采用默认值即可,该参数省略。
于是用下面的公式就可以播放出标准音la:fs=44100;t=0: 1/fs: 0.5;la = sin(2*pi*440*t);sound(la, fs)据所知,音高和频率是指数的关系,它们满足下面的公式,其中p是音高,f是频率标准音la,即钢琴的A4键,定义为p=69。
音高每上升一个半音,p加1。
设计代码:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% when you are lonely,who will you think about? //当你孤单你会想起谁 on Matlab fs = 44100; % sample ratedt = 1/fs;T16 = 0.125;t16 = [0:dt:T16];[temp k] = size(t16);t4 = linspace(0,4*T16,4*k);t8 = linspace(0,2*T16,2*k);[temp i] = size(t4);[temp j] = size(t8);% Modification functionsmod4=(t4.^4).*exp(-30*(t4.^0.5));mod4=mod4*(1/max(mod4));mod8=(t8.^4).*exp(-50*(t8.^0.5));mod8=mod8*(1/max(mod8));mod16=(t16.^4).*exp(-90*(t16.^0.5));mod16=mod16*(1/max(mod16));f0 = 2*146.8; % reference frequency ScaleTable = [2/3 3/4 5/6 15/16 ...1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 ...2 9/4 5/2 8/3 3 10/3 15/4 4 ...1/2 9/16 5/8];% 1/4 notesdo0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4); re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4); mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4); fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4); so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4); la0f = mod4.*cos(2*pi*ScaleTable(3)*f0*t4); ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4); do1f = mod4.*cos(2*pi*ScaleTable(5)*f0*t4); re1f = mod4.*cos(2*pi*ScaleTable(6)*f0*t4); mi1f = mod4.*cos(2*pi*ScaleTable(7)*f0*t4); fa1f = mod4.*cos(2*pi*ScaleTable(8)*f0*t4); so1f = mod4.*cos(2*pi*ScaleTable(9)*f0*t4); la1f = mod4.*cos(2*pi*ScaleTable(10)*f0*t4); tb1f = mod4.*cos(2*pi*ScaleTable(11)*f0*t4); ti1f = mod4.*cos(2*pi*ScaleTable(12)*f0*t4); do2f = mod4.*cos(2*pi*ScaleTable(13)*f0*t4); re2f = mod4.*cos(2*pi*ScaleTable(14)*f0*t4); mi2f = mod4.*cos(2*pi*ScaleTable(15)*f0*t4); fa2f = mod4.*cos(2*pi*ScaleTable(16)*f0*t4); so2f = mod4.*cos(2*pi*ScaleTable(17)*f0*t4); la2f = mod4.*cos(2*pi*ScaleTable(18)*f0*t4); ti2f = mod4.*cos(2*pi*ScaleTable(19)*f0*t4); do3f = mod4.*cos(2*pi*ScaleTable(20)*f0*t4); blkf = zeros(1,i);% 1/8 notesdo0e = mod8.*cos(2*pi*ScaleTable(21)*f0*t8); re0e = mod8.*cos(2*pi*ScaleTable(22)*f0*t8); mi0e = mod8.*cos(2*pi*ScaleTable(23)*f0*t8); fa0e = mod8.*cos(2*pi*ScaleTable(1)*f0*t8); so0e = mod8.*cos(2*pi*ScaleTable(2)*f0*t8);la0e = mod8.*cos(2*pi*ScaleTable(3)*f0*t8);ti0e = mod8.*cos(2*pi*ScaleTable(4)*f0*t8);do1e = mod8.*cos(2*pi*ScaleTable(5)*f0*t8);re1e = mod8.*cos(2*pi*ScaleTable(6)*f0*t8);mi1e = mod8.*cos(2*pi*ScaleTable(7)*f0*t8);fa1e = mod8.*cos(2*pi*ScaleTable(8)*f0*t8);so1e = mod8.*cos(2*pi*ScaleTable(9)*f0*t8);la1e = mod8.*cos(2*pi*ScaleTable(10)*f0*t8);tb1e = mod8.*cos(2*pi*ScaleTable(11)*f0*t8);ti1e = mod8.*cos(2*pi*ScaleTable(12)*f0*t8); do2e = mod8.*cos(2*pi*ScaleTable(13)*f0*t8);re2e = mod8.*cos(2*pi*ScaleTable(14)*f0*t8); mi2e = mod8.*cos(2*pi*ScaleTable(15)*f0*t8);fa2e = mod8.*cos(2*pi*ScaleTable(16)*f0*t8); so2e = mod8.*cos(2*pi*ScaleTable(17)*f0*t8);la2e = mod8.*cos(2*pi*ScaleTable(18)*f0*t8);ti2e = mod8.*cos(2*pi*ScaleTable(19)*f0*t8); do3e = mod8.*cos(2*pi*ScaleTable(20)*f0*t8); blke = zeros(1,j);% 1/16 notesdo0s = mod16.*cos(2*pi*ScaleTable(21)*f0*t16); re0s = mod16.*cos(2*pi*ScaleTable(22)*f0*t16); mi0s = mod16.*cos(2*pi*ScaleTable(23)*f0*t16); fa0s = mod16.*cos(2*pi*ScaleTable(1)*f0*t16); so0s = mod16.*cos(2*pi*ScaleTable(2)*f0*t16); la0s = mod16.*cos(2*pi*ScaleTable(3)*f0*t16); ti0s = mod16.*cos(2*pi*ScaleTable(4)*f0*t16); do1s = mod16.*cos(2*pi*ScaleTable(5)*f0*t16); re1s = mod16.*cos(2*pi*ScaleTable(6)*f0*t16); mi1s = mod16.*cos(2*pi*ScaleTable(7)*f0*t16); fa1s = mod16.*cos(2*pi*ScaleTable(8)*f0*t16); so1s = mod16.*cos(2*pi*ScaleTable(9)*f0*t16); la1s = mod16.*cos(2*pi*ScaleTable(10)*f0*t16); tb1s = mod16.*cos(2*pi*ScaleTable(11)*f0*t16); ti1s = mod16.*cos(2*pi*ScaleTable(12)*f0*t16); do2s = mod16.*cos(2*pi*ScaleTable(13)*f0*t16); re2s = mod16.*cos(2*pi*ScaleTable(14)*f0*t16); mi2s = mod16.*cos(2*pi*ScaleTable(15)*f0*t16); fa2s = mod16.*cos(2*pi*ScaleTable(16)*f0*t16); so2s = mod16.*cos(2*pi*ScaleTable(17)*f0*t16); la2s = mod16.*cos(2*pi*ScaleTable(18)*f0*t16); ti2s = mod16.*cos(2*pi*ScaleTable(19)*f0*t16); do3s = mod16.*cos(2*pi*ScaleTable(20)*f0*t16); blks = zeros(1,k);% Melody by Schau_malpart1 = [mi1e fa1e so1e so1e so1e so1e so1f mi1e fa1e...so1e so1e so1e so1e so1f la1e ti1e...do2f mi1f mi1e re1e mi1e mi1e mi1e mi1e ...];part2=[ so1e so1e fa1e fa1e mi1e re1e do1e do1e mi1e...mi1e fa1e mi1e do1e do1f so1e so1e...so1e fa1e fa1e mi1e fa1e so1e so1e mi1e mi1e re1e re1e re1e ...];part3 = [mi1e fa1e so1e so1e so1e so1e so1f so1e so1e...so1e so1e so1e so1e so1f la1e ti1e...do2f mi1f mi1e re1e mi1e mi1e mi1e mi1e mi1e so1e...];part4 = [ so1e so1e fa1e fa1e mi1e re1e do1e do1e mi1e mi1e fa1e mi1e do1e so1e so1e...so1e fa1e fa1e mi1e fa1e so1e so1e la1e la1e so1e so1e la1f ti1f...do2e do2e re2e do2e do2f do2e do2e...ti1e do2e ti1e so1e so1e so1e so1e...la1f do1f do1f re1e mi1e mi1e so1e so1e mi1e re1f la1e ti1e...do2e do2e re2e do2e do2f do2e do2e...ti1e do2e ti1e so1e so1f so1e so1e...la1e do2e do2e do2e do2e do2e do2e...do2e re2s re2e do2e mi2e re2e re2f re2f re2f re2f re2f ...];part5 = [mi2f mi2e fa2e mi2e re2f do2e re2e so2e re2e re2f re2f...do2f do2e re2e do2f ti1e la1e...ti1f mi2e ti1e ti1e ...la1f re2e mi2e re2e do2e la1f ...so1f re2e mi2e re2e do2e la1f...];% Combination, v1 is complete version, v2 is simple version.v1 = [part1 part2 part3 part4 part5];s = v1;sound(s,fs);输入此代码后,即可使《当你孤单你会想起谁》以matlab的形式播放出来4:实验结果:经过matlab的处理后,《当你孤单你会想起谁》通过matlab播放了出来,并可以画出如下图片。
《数字信号处理》课程设计说明书设计题目:基于MATLAB 的简单音乐合成姓名:_________________________________________专业年级:______________________________________学号:_________________________________________指导老师:______________________________________时间:2015 年 6 月25 日《数字信号处理课程设计》任务书指导老师(签名):1设计基础....................................1.1 MATLAB软件简介..............................1.2乐曲解析..................................2设计与实现...................................2.1 简单的音乐合成 ................................2.1.1原理分析 ................................2.1.2 Matlab 源代码 ..............................2.1.3运行结果分析 ...............................2.2除噪音,加包络.................................2.2.1原理分析 ................................2.2.2 Matlab 源代码 ..............................2.2.3运行结果分析 ..............................2.3加谐波....................................2.3.1原理分析 ................................2.3.2 Matlab 源代码 ..............................2.3.2运行结果分析 .............................. 3总结与体会...................................4参考文献....................................1 设计基础1.1 MATLAB 软件简介MATLAB 是matrix&laboratory 两个词的组合,意为矩阵工厂(矩阵实验室MATLAB 工作界面)。
是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB 和Mathematica、Maple 并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB 来解算问题要比用C,FORTRAN 等语言完成相同的事情简捷得多,并且MATLAB 也吸收了像Maple 等软件的优点,使MATLAB 成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN ,C++,JAVA 的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB 函数库中方便自己以后调用,此外许多的MATLAB 爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
1.2 乐曲解析乐音的基本特征可以用基波频率、谐波频率和包络波形三个方面来描述,我们用大写英文字母CDEFGAB 表示每个音的“音名”(或称为“音调”),当指定某一音名时,它对应固定的基波信号频率。
图 1 表示钢琴的键盘结构,并注明了每个琴键对应的音名和基波频率值。
这些频率值是按“十二平均律”计算导出,下面解释计算规则:图1-1 钢琴键盘和相应频率从图1-1可以看到,靠下边的A键称为小字组A,它的频率值fA0= 220Hz,而靠上面的另一个A键是小字一组A,它的频率值是fA仁440Hz。
两者为二倍频率关系,即fA1相当于fA0的二次谐波。
也称为8度音或倍频程Octave(即我们画频响特性图时所用的术语“倍频程” )。
根据《两只老虎》简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB 中生成幅度为1,抽样频率为8000kHz的正弦信号表示这些乐音,用sou nd播放合成的音乐图1-2乐曲《两只老虎》曲谱由图可知《两只老虎》的曲调定为C,即仁C,对应的频率为261.63Hz,据此可以计算出其他乐音的频率,类推计算出各乐音对应的频率见表1-1部分乐音对应的频率:表1-1部分乐音对应的频率在确定了各乐音的频率之后需要确定每个乐音的持续时间。
每小节有两拍,一拍的时间是0.5此部分乐音的持续时间见表1-2部分乐音对应的时间:表1-2部分乐音对应的时间而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。
用一个行向量来存储这段音乐对应的抽样点,在用sounc函数播放即可。
根据以上分析在MATLAB中编写如下程序:soun d_1_1.mclear;clc;fs=8000; %抽样频率f=[261.63 293.66 329.63 261.63 261.63 293.66 329.63 261.63 329.63 349.23392 329.63 349.23 392];%各个乐音对应的频率time=fs*[0.5 , 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1, 0.5,0.5,1]; %各个乐音的抽样点数N=length(time); %这段音乐的总抽样点数east=zeros(1,N); %用eas向量来储存抽样点n=1; for num=1:N %利用循环产生抽样数据,num表示乐音编号t=1/fs:1/fs:time(num)/fs; %产生第num个乐音的抽样点east( n:n+time( nu m)-1)=si n(2*pi*f( nu m)*t);%抽样点对应的幅值n=n+time( nu m);endsoun d(east,8000); %播放音乐2设计与实现2.1简单的音乐合成根据《两只老虎》片段的简谱和“十二平均律”计算出该片段中各个乐音的频率,在MATLAB中生成幅度为1、抽样频率为8000kHz的正弦信号表示这些乐音。
请用sound函数播放每个乐音,听一听音调是否正确,最后用这一系列乐音信号拼出《两只老虎》片段,注意控制每个乐音持续的时间要符合节拍,用sou nd函数播放合成的乐音。
2.12 Matlab 源代码clear;clc; fs=8000; %抽样频率f=[261.63 293.66 329.63 261.63 261.63 293.66 329.63 261.63 329.63 349.23392 329.63 349.23 392];%各个乐音对应的频率time=fs*[0.5,0.5, 0.5,0.5, 0.5,0.5, 0.5,0.5,0.5,0.5,1,0.5,0.5,1]; %各个乐音的抽样点数N=le ngth(time); n=1;for num=1:N %利用循环产生抽样数据,num表示乐音编号t=1/fs:1/fs:time(num)/fs; %产生第num个乐音的抽样点east( n:n+time( nu m)-1)=sin(2*pi*f( nu m)*t);%抽样点对应的幅值n=n+time( nu m); endsoun d(east,8000); %播放音乐2.1.3运行结果分析初步合成的音乐音调符合曲谱,能听出《两只老虎》的旋律。
2.2除噪音,加包络2.2.1原理分析你一定注意到⑴的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。
这种噪声严重影响合成音乐的质量,丧失真实感,下面通过加包络来消噪音。
t 最简单的包络为指数衰减。
最简单的指数衰减是对每个音乘以e「t因子,在实验-1 5t中首先加的是e .的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。
于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。
2.2.2 Matlab 源代码clear;clc; fs=8000;%抽样频率f=[261.63 293.66 329.63 261.63 261.63 293.66 329.63 261.63 329.63 349.23 392 329.63 349.23 392]; %各个乐音对应的频率time=fs*[0.5 ,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,1,0.5,0.5,1];%各个 乐音的抽样点数%各个乐音对应的频率N=length(time); % 这段音乐的总抽样点数 xio=zeros(1,N); %用east 向量来储存抽样点 n=1;for num=1:N %利用循环产生抽样数据, num 表示乐音编号k=1:4P(s:L(k+1)-1)=(T(k+1)-T(k))/(L(k+1)-L(k))*(b(s:L(k+1)-1)-L(k+1)*ones(1,L(k+1)-s))+T(k+ 1)*ones(1,L(k+1)-s);%包络线直线方程通式s=L(k+1);end laohu (n:n+time(num)-1 )=sin(2*pi*f(num)*t).*P(1 :time(num)) ;%给第 num 个乐音加上包络n=n+time(num); endsound(laohu ,8000); plot(laohu );wavw ri t e ( laohu , ' laohu 2')t=1/fs:1/fs:(time(num))/fs; P=zeros(1,time(num)); L=(time(num))*[ 0 1/5 3/8 5/8 1];T=[0 1.5 1 1 0];s=1; b=1:1:time(num); for%产生第 num 个乐音的抽样点%P 为存储包络数据的向量%包络线端点对应的横坐标%包络线端点对应的纵坐标%产生包络线抽样点m=[1 0.3 0.2]; %波形幅值矩阵2.2.3 运行结果分析播放后可以听出噪音已经消除, 同时因为不同时长的乐音衰减的快慢不一样, 音乐 听起来更有起伏感,如图为 2-1 波形图。