使用matlab制作音乐

这篇具有很好参考价值的文章主要介绍了使用matlab制作音乐。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.一些音乐基础

1.认识简谱

简谱中最重要的信息就是曲调、节拍,位于简谱左上角,

如图中的1=G,是以G调为基准频率,即1对应G调,其他常见的还有1=C等,

4/4为一节4个1/4拍,一节则为一个短竖线隔开的,相似的还有3/4排,1/2拍等。使用matlab制作音乐

 对应数字是在以1为基频下的不同音频

0拍表示占位,不出声

数字左上角带#为半个音阶

数字上下方的点代表增加或者降低一个八度,也有两个点的情况,对应降低两个八度。

在4/4拍的谱中,一节有四个1/4拍组成,每个1/4拍为1秒,单个数字对应一个1/4拍,数字下方一个下划线表示这个音占1/8拍,两个表示1/16拍,以此类推...在一节中排数和总是等于这个谱对应的拍数,上例为4/4拍,即4秒。

数字右边的点表示这个音延长其1/2拍,如1·表示3/8拍,数字后面的-表示再延长1/4拍。

数字间的上连接符号表示过渡平稳,连贯,一般在演唱时需要考虑。

2.基本曲调频率

根据十二平均律计算,得出下面不同曲调对应频率
使用matlab制作音乐

 表示以这个频率振动发出声音,产生的调则为对应音调。

值得注意的是,一个八度音对应是倍频关系。这也是由于十二平均率计算规律。

根据此可确定出每个数字对应频率

在G调基础上对应频率

g0表示占位,g1_表示降调,g2_5表示#2

g0=0;2
g1_=195.998;
g2_=220.000;
g3_=246.942;
g4_=261.626;
g5_=293.665;
g6_=329.628;
g7_=349.228;
g1=391.995;
g2=440;
g2_5=415.305;
g3=493.883;
g4=523.251;
g4_5=554.365;
g5=587.330;
g5_5=622.254;
g6=659.255;
g7=698.456;
g33=987.767;

二.使用matlab产生声音

1.乐音频率,抽样频率 ,节拍

使用如220hz为频率的正弦波,持续一段时间

这个波的频率为乐音的频率,取一个个抽样的点的频率表示抽样频率,持续的时间则为节拍的时间

抽样频率一般要远大于发音频率,保证不失真。

 因此我们可以创建一个频率为220,持续时间为1s,抽样频率为8000的一段矩阵

fs=8000;
f=220;
x=linspace(0,1,fs);
y=sin(2*pi*f*x);
plot(x,y);
sound(y,fs);

使用matlab制作音乐

可以看到产生了频率为220hz,持续时间为1s,采样频率为8000的一段波。

只需要不断改变频率和节拍(持续时间),一个简单的音乐就可以播放了。

2.播放一段音乐

f1=[g0 g0 g0 g5_];
t1=[1 1 1 1];
f2=[g3 g2_5 g3 g6];
t2=[1.5 0.25 0.75 1.5];
f3=[g5 g3 g6_];
t3=[0.75 2.25 1];
f45=[g1 g2 g3 g5 g4_5 g5 g5_5 g5];
t45=[2 0.75 1.75 0.5 0.5 0.5 1.5 0.5];
f67=[g6 g33 g0];
t67=[1.5 4.5 2];
f0=[f1 f2 f3 f45 f67];
t0=[t1 t2 t3 t45 t67];
for i=1:size(f0,2)
    x=linspace(0,t0(i),8000*t0(i));
    y=sin(2*pi*f0(i)*x);
    sound(y,8000);
    pause(t0(i));
end

 我们用两个一维矩阵储存音调和节拍信息,要求必须一一对应!否则播放矩阵对不上。

sound函数播放,pause函数延迟一段时间。

3.给音乐加包络

 可以听到这一段音乐中在中间过渡的时候总是有杂音,影响音乐品质,因此我们这是由于相位不连续造成的,我们的解决方法是给声音加包络

关于包络信号讲解(10条消息) 利用包络函数优化MATLAB中sound函数的发声【matlab调音_2】_歪卜巴比的博客-CSDN博客_钢琴包络函数

其中最后的x/exp(-kx/rhythm)型包络函数表达形式有误或不完整。

这里进行修改

 使用matlab制作音乐

 上式为完整的包络函数,其中t代表节拍时间。

修改后的包络函数解决了不同节拍时长和k值导致不同音量大小的问题

 其形状为

 使用matlab制作音乐

 很明显,这使得声音更加圆润,对比传统指数包络,有一个先上升的过程,能保证前一个音符能量消失后,才发出后续音符,这样就能有效消除,音符交替时的轻微杂音

这里k值的大小决定了下降的快慢,根据不同谱子进行调整,一般来说,k值越大声音越清脆。 

4.完整代码

clc;clear all
fs=8000;
k=10;
k0=5;
g0=0;
g1_=195.998;
g2_=220.000;
g3_=246.942;
g4_=261.626;
g5_=293.665;
g6_=329.628;
g7_=349.228;
g1=391.995;
g2=440;
g2_5=415.305;
g3=493.883;
g4=523.251;
g4_5=554.365;
g5=587.330;
g5_5=622.254;
g6=659.255;
g7=698.456;
g33=987.767;
%前奏
f1=[g0 g0 g0 g5_];
t1=[1 1 1 1];
f2=[g3 g2_5 g3 g6];
t2=[1.5 0.25 0.75 1.5];
f3=[g5 g3 g6_];
t3=[0.75 2.25 1];
f45=[g1 g2 g3 g5 g4_5 g5 g5_5 g5];
t45=[2 0.75 1.75 0.5 0.5 0.5 1.5 0.5];
f67=[g6 g33 g0];
t67=[1.5 4.5 2];

f0=[f1 f2 f3 f45 f67];
t0=[t1 t2 t3 t45 t67];
d=0.2;
for n=1:size(f0,2)
    x=linspace(0,t0(n),t0(n)*fs);
    if n==1
        m0=d*exp(1)*k0*x.*exp((-k0/t0(n))*x).*sin(2*pi*f0(n)*x);
        %m=k*x.*exp(-k*x).*sin(2*pi*f0(n)*x);
        %m0=exp(-k0*x).*sin(2*pi*f0(n)*x); 
    else 
        if n==size(f0,2)-1
            m0=[m0 d*exp(1)*2/t0(n)*x.*exp((-4/t0(n))*x).*sin(2*pi*f0(n)*x)]; 
        else
            m0=[m0 d*exp(1)*k0/t0(n)*x.*exp((-k0/t0(n))*x).*sin(2*pi*f0(n)*x)];
            %m=[m k*x.*exp(-k*x).*sin(2*pi*f0(n)*x)];
            %m0=[m0 exp(-k0*x).*sin(2*pi*f0(n)*x)];
        end
    end
end
sound(m0,fs*2)
plot(linspace(0,sum(t0),sum(t0)*fs),m0)
pause(sum(t0)/2-2)
%主调
f7=[g0 g0 g0 g5_ g6_ g1];
t7=[1 1 0.5 0.5 0.5 0.5];
f8=[g5 g3 g0 g5 g2 g1];
t8=[0.5 1.5 0.5 0.5 0.5 0.5];
f9=[g3 g2 g0 g5 g2 g1];
t9=[0.5 1.5 0.5 0.5 0.5 0.5];
f10=[g2 g2 g0 g3 g1 g6_];
t10=[0.5 1.5 0.5 0.5 0.5 0.5];
f11=[g2 g1 g0 g5_ g6_ g1];
t11=[0.5 1.5 0.5 0.5 0.5 0.5];
f12=[g5 g3 g0 g5 g2 g1];
t12=[0.5 1.5 0.5 0.5 0.5 0.5];
f13=[g3 g2 g0 g5 g2 g1];
t13=[0.5 1.5 0.5 0.5 0.5 0.5];
f14=[g3 g2 g0 g3 g6_ g1];
t14=[0.5 1.5 0.5 0.5 0.5 0.5];
f15=[g1 g1 g0 g0 g3 g4];
t15=[0.5 1.5 1 0.5 0.25 0.25];
f16=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t16=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f17=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t17=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f18=[g5 g3 g2 g1 g5_ g1 g1];
t18=[0.5 0.5 0.5 0.5 0.5 0.5 1];
f19=[g3 g3 g2 g3 g2 g1 g3 g4];
t19=[0.5 0.25 0.25 0.5 0.5 1.5 0.25 0.25];
f20=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t20=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f21=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t21=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f22=[g5 g3 g2 g1 g5_ g1 g1];
t22=[0.5 0.5 0.5 0.5 0.5 0.5 1];
f23=[g3 g3 g2 g3 g2 g1];
t23=[0.5 0.25 0.25 0.5 0.5 2];
f24=[g3 g3 g2 g3 g2 g3 g3 g2 g3 g2];
t24=[0.5 0.25 0.25 0.5 0.5 0.5 0.25 0.25 0.5 0.5];
f25=[g3 g3 g2 g3 g2 g1];
t25=[0.5 0.25 0.25 0.5 0.5 2];
f26=[g3 g3 g2 g3 g2 g3 g3 g2 g3 g2];
t26=[0.5 0.25 0.25 0.5 0.5 0.5 0.25 0.25 0.5 0.5];
f27=[g3 g3 g2 g3 g2 g1 g0 g3 g4];
t27=[0.5 0.25 0.25 0.5 0.5 1 0.5 0.25 0.25];
f28=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t28=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f29=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t29=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f30=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t30=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f31=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t31=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f32=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t32=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f33=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t33=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f34=[g5 g5 g3 g5 g5 g5 g3 g5 g6 g5 g5];
t34=[0.5 0.25 0.25 0.5 0.5 0.25 0.25 0.25 0.25 0.5 0.5];
f35=[g3 g5 g3 g2 g1 g5_ g1 g1 g1 g2];
t35=[0.125 0.375 0.5 0.5 0.5 0.5 0.5 0.5 0.25 0.25];
f36=[g3 g3 g2 g3 g3 g2 g3 g3 g2 g3 g4 g3 g2];
t36=[0.5 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25];
f37=[g1 g1 g2 g1 g7_ g6_ g0 g2 g3];
t37=[0.5 0.25 0.25 0.5 0.5 1 0.5 0.25 0.25];
f38=[g4 g4 g3 g4 g4 g3 g4 g4 g3 g4 g5 g4 g3];
t38=[0.5 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25];
f39=[g2 g2 g1 g7_ g1 g2 g5_ g1 g2];
t39=[0.5 0.25 0.25 0.5 0.5 0.5 0.5 0.5 0.5];
f40=[g3 g3 g2 g3 g3 g2 g3 g3 g2 g3 g4 g3 g2];
t40=[0.5 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25];
f41=[g1 g1 g2 g1 g7_ g6_ g0 g2 g3];
t41=[0.5 0.25 0.25 0.5 0.5 1 0.5 0.25 0.25];
f42=[g4 g4 g3 g4 g4 g3 g4 g4 g3 g4 g5 g4 g3];
t42=[0.5 0.25 0.25 0.5 0.25 0.25 0.5 0.25 0.25 0.25 0.25 0.25 0.25];
f43=[g5 g3 g2 g1 g5_ g1 g1];
t43=[0.5 0.5 0.5 0.5 0.5 0.5 1];

f=[f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f21 f22 f23 f24 f25 f26 f27 f28 f29 f30 f31 f32 f33 f34 f35 f36 f37 f38 f39 f40 f41 f42 f43];
t=[t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43];

for n=1:size(f,2)
    x=linspace(0,t(n),t(n)*fs);
    if n==1
        m=exp(1)*k/t(n)*x.*exp((-k/t(n))*x).*sin(2*pi*f(n)*x);
        %m=k*x.*exp(-k*x).*sin(2*pi*f(n)*x);
        %m=exp(-k*x).*sin(2*pi*f(n)*x);
    else
        m=[m exp(1)*k/t(n)*x.*exp((-k/t(n))*x).*sin(2*pi*f(n)*x)];
        %m=[m k*x.*exp(-k*x).*sin(2*pi*f(n)*x)];
        %m=[m exp(-k*x).*sin(2*pi*f(n)*x)];
    end
end
sound(m,fs*2)

 文章来源地址https://www.toymoban.com/news/detail-498671.html

到了这里,关于使用matlab制作音乐的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 逐步攻略:使用Matlab音频系统工具箱创建自己的VST插件,让音乐编程在Nashville崭新绽放

    尊敬的读者,欢迎阅读这篇文章。我作为一个热爱音乐和编程的人,十分激动地在这里和大家分享我最近的一次学习经验。正如标题所述,我们将探索一种崭新的方式来创建 VST 插件,即使用 Matlab 音频系统工具箱。这篇文章也许对于那些像我一样在音乐和编程的交叉点上寻找

    2024年02月09日
    浏览(50)
  • Matlab转Python 画图pcolormesh的使用及一些注意事项

    今天想把matlab一段画图代码转为python,使用到了colormap,尝试了一下午,将结果以及一些注意事项记录下来,算作学习笔记了。 先上matlab原代码 结果如下: 注意: 在pcolormesh函数使用过后,就必须要设置xlim或者ylim,然后再使用colorbar的函数,否则设置ylim会导致语句无效,不

    2024年02月06日
    浏览(44)
  • 函数调用栈的一些简单认识

    程序的执行可以理解为连续的函数调用,每一个用户态( 用户态指的是CPU指令集权限ring 0,用户只能访问常用CPU指令集,在应用程序中运行 )进程都对应一个调用栈结构,当一个函数执行完毕后,会自动回到原先调用函数的位置(call指令)的下一步命令并执行,堆栈结构的

    2024年02月02日
    浏览(28)
  • 【前端基础知识】网易云音乐iframe外链的使用

    HTML 内联框架元素 ( iframe) 表示嵌套的浏览上下文(browsing context)。它能够将另一个 HTML 页面 嵌入 到当前页面中。 使用网页版的网易云音乐! 这一串就是网易云音乐的外链了 新建一个html页面,复制这个标签到head里就可以了。 要注意的是需要在src开头加上协议:https:或者

    2024年02月08日
    浏览(49)
  • Python爬虫网易云音乐,Tkinter制作音乐播放器

    目录 一、效果展示 二、环境 三、实现过程 四、源码 页面的美化以及功能还有待升级~ 先来说一下已有功能吧: 可以在搜索框中通过歌曲或歌手名称进行搜索,效果和在网易云官网搜索一样。 点击开始下载,就会将搜索结果的第一条歌曲下载到指定文件夹 下载完毕后,会遍

    2024年02月04日
    浏览(52)
  • Net 高级调试之一:开始认识一些调试工具

    一、简介 从今天开始一个长系列,Net 高级调试的相关文章,我自从学习了之后,以前很多模糊的地方现在很清楚了,原来自己的功力还是不够,所以有很多不明白,通过学习 Net 高级调试,眼前豁然开朗,茅塞顿开。其实,刚开始要学习《Net 高级调试》,还是很是很困难的

    2024年02月08日
    浏览(46)
  • Unity 关于生命周期函数的一些认识

    Unity 生命周期函数主要有以下一些: Awake() : 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable() : 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset() : 在脚本组件被重置时调用。用于重置脚本的初始状态。 Start

    2024年01月21日
    浏览(53)
  • TCP协议的一些认识及实践知识简介

    一、简介 引用《TCP/IP详解-卷1》中的介绍,TCP与UDP使用相同的网络层(IP层),TCP却向应用层提供了与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。 所谓面向连接的,是指在彼此通信前要先建立连接。同时这种点对点的连接表明了TCP不支持多播和广播。

    2024年02月05日
    浏览(34)
  • Html5版音乐游戏制作及分享(H5音乐游戏)

    这里实现了Html5版的音乐游戏的核心玩法。 游戏的制作借鉴了,很多经典的音乐游戏玩法,通过简单的代码将音乐的节奏与操作相结合。 可以通过手机进行游戏,准确点击下落时的目标,进行得分。 点击试玩 游戏内的下落数据是通过手打记录的,可能有些偏差哈。 1、Html中

    2023年04月17日
    浏览(46)
  • 小案例:用Python制作音乐播放器

    以下是音乐播放器要实现的功能:         1.可以通过打开存放音频文件夹来添加音频         2.可以播放和暂停音频         3.可以设置播放音量 需要实现音频播放器的模块:         1. pygame 的音频播放功能         2. easygui 的 fileopenbox 函数与 os 的 listdir 函数        

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包