matlab演奏歌曲(MATLAB·学习 | music:祝你生日快乐)
导读:...
一 、前言
本篇文章内容为个人学习分享 ,读代码须知以下
乐理的基本知识 ,以及十二平均律(波的频率与音高的标准) ,个人推荐在维基百科中搜索十二平均律表 。
二 、整体思想
在主函数中 ,将一些简单的乐谱按照节拍 ,按键 ,基调 ,半音改变经行拆解 。
然后我个人学习时 ,以440hz为标准的do依次类推 ,得到的基础钢琴七键 ,然后通过改变基础七键得到其他的音高 。
因为相邻的音阶是等差的 ,且音高p = 69 + 12 x log2(f频率/440) ,了解更加细致的讲解点击这里编辑
三 、matlab实现代码:
1.主文件:初始化乐谱
2.声波制作函数:
function y=get_ware(tone, rythm,keynote_type,Soundzone_change,up_down)
%tone为音节,rythm为节拍 ,keynote_type为当前基调默认为C调 ,keynote_change为改变基调,up_down为音节升降
%Sound zone_change为改变音区;
Fs=8192;
freqs=[440*2.^(3/12),440*2^(5/12),440*2^(7/12),440*2^(8/12),440*2^(10/12),440*2^(12/12),440*2^(14/12)];%C调中音
freqs=freqs*2.^((keynote_type-3)/12);
freqs=freqs*2.^((Soundzone_change-2)*12/12);
freqs=freqs*2.^((up_down-2)/12);
x=linspace(0,2*pi*rythm,floor(Fs*rythm));
y=(sin(freqs(tone)*x).*(1-(x/(2*pi*rythm))));
end
四 、总结:
上述的音乐绘制还有一些值得研究的地方 ,比如说 ,如何发出同时发出多个音 ,实现更为复杂的乐曲的演奏 ,以及如何模拟出钢琴按键轻重不同导致的尾音长短的不同 。还有就是在转换乐谱上边 ,如果有更加智能的方式生成就更加好了 ,因为基础的演奏的函数其实很简单 。
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!