皆さん こんにちは~ シコミンです!
17年年初的时候看到了@huolabaga做的matlab演奏卡农,觉得挺有意思的,就自己花了点零碎时间做了一个Matlab演奏钢琴的程序,其中思路大致借鉴了@huolabaga桑的。当时是随便写的,最近翻出来看的时候发现我当时写得真是一团糟...
最近事情不多,就花点时间分几次把内容好好梳理一下吧。
讲到音乐演奏就得提下十二平均律。
十二平均律也叫作“十二等程律”,一个八度分为十二个音,每一个叫做半音音程,每份只占半个音。通俗点说就是我们收悉的do、re、mi、fa、so、la、ti被分为12个等份,每份半个音,其中特殊的两个地方是3(mi)与4(fa)还有7(ti)与1(do)之间本来就是半个音差距,学过二胡的同学都知道,拉mi和fa两个音的时候,手指是贴在一起的,其他音都是隔开一个手指。
十二平均律
“十二平均律”将八度音程均分为12等分。每升高一个半音,那么对应的音符就升高2^(1/12) 。
了解了十二平均律,我们就开始愉快地敲代码了~
Matlab代码:
load C5-piano.mat;
%导入钢琴音色的数据:data fs
original_note=8;%数值音符(取值自己定),之后根据12平均律进行计算具体八度音符
我的数值音符对照表(可以自己设计,不必照这个表)
建议为方便使用可以把0设置成休止符,下面的其他音符一次往后减一
我的对照表
badu=ceil(original_note/12);%数值音符除以12得所在八度
note=mod(original_note,12);%数值音符对12取余得实际所在八度具体第几个音符
%最后音调取决于音符note和八度badu;
if note==0 %如果note==0则降低一度
badu=badu-1;
end
fs_c=fs*2^(note/12)*2^(badu-2);%整体降2个八度
上面那个式子
sound(data(1:55000,:),fs_c); %改变original_note的值播放出来听一听
第一期就先到这吧。