Matlab 制作《最炫民族风》弱爆了,附代码

分类: matlab 1212人阅读 评论(0) 收藏 举报

matlabreference

[plain] view plaincopy

  1.    

[plain] view plaincopy

  1. 大家可以在Matlab下实验下。。。。。。  

[plain] view plaincopy

  1. % Most shining national wind//最炫民族风 on Matlab  
  2. % The Modification is from "canon", not by me  
  3.   
  4. fs = 44100; % sample rate  
  5. dt = 1/fs;  
  6.   
  7. T16 = 0.125;  
  8.   
  9. t16 = [0:dt:T16];  
  10. [temp k] = size(t16);  
  11.   
  12. t4 = linspace(0,4*T16,4*k);  
  13. t8 = linspace(0,2*T16,2*k);  
  14.   
  15. [temp i] = size(t4);  
  16. [temp j] = size(t8);  
  17.   
  18. % Modification functions  
  19. mod4=(t4.^4).*exp(-30*(t4.^0.5));  
  20. mod4=mod4*(1/max(mod4));  
  21. mod8=(t8.^4).*exp(-50*(t8.^0.5));  
  22. mod8=mod8*(1/max(mod8));  
  23. mod16=(t16.^4).*exp(-90*(t16.^0.5));  
  24. mod16=mod16*(1/max(mod16));  
  25.   
  26. f0 = 2*146.8; % reference frequency  
  27.   
  28. ScaleTable = [2/3 3/4 5/6 15/16 …  
  29. 1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 …  
  30. 2 9/4 5/2 8/3 3 10/3 15/4 4 …  
  31. 1/2 9/16 5/8];  
  32.   
  33. % 1/4 notes  
  34. do0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4);  
  35. re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4);  
  36. mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4);  
  37.   
  38. fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4);  
  39. so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4);  
  40. la0f = mod4.*cos(2*pi*ScaleTable(3)*f0*t4);  
  41. ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4);  
  42. do1f = mod4.*cos(2*pi*ScaleTable(5)*f0*t4);  
  43. re1f = mod4.*cos(2*pi*ScaleTable(6)*f0*t4);  
  44. mi1f = mod4.*cos(2*pi*ScaleTable(7)*f0*t4);  
  45. fa1f = mod4.*cos(2*pi*ScaleTable(8)*f0*t4);  
  46. so1f = mod4.*cos(2*pi*ScaleTable(9)*f0*t4);  
  47. la1f = mod4.*cos(2*pi*ScaleTable(10)*f0*t4);  
  48. tb1f = mod4.*cos(2*pi*ScaleTable(11)*f0*t4);  
  49. ti1f = mod4.*cos(2*pi*ScaleTable(12)*f0*t4);  
  50. do2f = mod4.*cos(2*pi*ScaleTable(13)*f0*t4);  
  51. re2f = mod4.*cos(2*pi*ScaleTable(14)*f0*t4);  
  52. mi2f = mod4.*cos(2*pi*ScaleTable(15)*f0*t4);  
  53. fa2f = mod4.*cos(2*pi*ScaleTable(16)*f0*t4);  
  54. so2f = mod4.*cos(2*pi*ScaleTable(17)*f0*t4);  
  55. la2f = mod4.*cos(2*pi*ScaleTable(18)*f0*t4);  
  56. ti2f = mod4.*cos(2*pi*ScaleTable(19)*f0*t4);  
  57. do3f = mod4.*cos(2*pi*ScaleTable(20)*f0*t4);  
  58. blkf = zeros(1,i);  
  59.   
  60. % 1/8 notes  
  61. do0e = mod8.*cos(2*pi*ScaleTable(21)*f0*t8);  
  62. re0e = mod8.*cos(2*pi*ScaleTable(22)*f0*t8);  
  63. mi0e = mod8.*cos(2*pi*ScaleTable(23)*f0*t8);  
  64.   
  65. fa0e = mod8.*cos(2*pi*ScaleTable(1)*f0*t8);  
  66. so0e = mod8.*cos(2*pi*ScaleTable(2)*f0*t8);  
  67. la0e = mod8.*cos(2*pi*ScaleTable(3)*f0*t8);  
  68. ti0e = mod8.*cos(2*pi*ScaleTable(4)*f0*t8);  
  69. do1e = mod8.*cos(2*pi*ScaleTable(5)*f0*t8);  
  70. re1e = mod8.*cos(2*pi*ScaleTable(6)*f0*t8);  
  71. mi1e = mod8.*cos(2*pi*ScaleTable(7)*f0*t8);  
  72. fa1e = mod8.*cos(2*pi*ScaleTable(8)*f0*t8);  
  73. so1e = mod8.*cos(2*pi*ScaleTable(9)*f0*t8);  
  74. la1e = mod8.*cos(2*pi*ScaleTable(10)*f0*t8);  
  75. tb1e = mod8.*cos(2*pi*ScaleTable(11)*f0*t8);  
  76. ti1e = mod8.*cos(2*pi*ScaleTable(12)*f0*t8);  
  77. do2e = mod8.*cos(2*pi*ScaleTable(13)*f0*t8);  
  78. re2e = mod8.*cos(2*pi*ScaleTable(14)*f0*t8);  
  79. mi2e = mod8.*cos(2*pi*ScaleTable(15)*f0*t8);  
  80. fa2e = mod8.*cos(2*pi*ScaleTable(16)*f0*t8);  
  81. so2e = mod8.*cos(2*pi*ScaleTable(17)*f0*t8);  
  82. la2e = mod8.*cos(2*pi*ScaleTable(18)*f0*t8);  
  83. ti2e = mod8.*cos(2*pi*ScaleTable(19)*f0*t8);  
  84. do3e = mod8.*cos(2*pi*ScaleTable(20)*f0*t8);  
  85. blke = zeros(1,j);  
  86.   
  87. % 1/16 notes  
  88. do0s = mod16.*cos(2*pi*ScaleTable(21)*f0*t16);  
  89. re0s = mod16.*cos(2*pi*ScaleTable(22)*f0*t16);  
  90. mi0s = mod16.*cos(2*pi*ScaleTable(23)*f0*t16);  
  91.   
  92. fa0s = mod16.*cos(2*pi*ScaleTable(1)*f0*t16);  
  93. so0s = mod16.*cos(2*pi*ScaleTable(2)*f0*t16);  
  94. la0s = mod16.*cos(2*pi*ScaleTable(3)*f0*t16);  
  95. ti0s = mod16.*cos(2*pi*ScaleTable(4)*f0*t16);  
  96. do1s = mod16.*cos(2*pi*ScaleTable(5)*f0*t16);  
  97. re1s = mod16.*cos(2*pi*ScaleTable(6)*f0*t16);  
  98. mi1s = mod16.*cos(2*pi*ScaleTable(7)*f0*t16);  
  99. fa1s = mod16.*cos(2*pi*ScaleTable(8)*f0*t16);  
  100. so1s = mod16.*cos(2*pi*ScaleTable(9)*f0*t16);  
  101. la1s = mod16.*cos(2*pi*ScaleTable(10)*f0*t16);  
  102. tb1s = mod16.*cos(2*pi*ScaleTable(11)*f0*t16);  
  103. ti1s = mod16.*cos(2*pi*ScaleTable(12)*f0*t16);  
  104. do2s = mod16.*cos(2*pi*ScaleTable(13)*f0*t16);  
  105. re2s = mod16.*cos(2*pi*ScaleTable(14)*f0*t16);  
  106. mi2s = mod16.*cos(2*pi*ScaleTable(15)*f0*t16);  
  107. fa2s = mod16.*cos(2*pi*ScaleTable(16)*f0*t16);  
  108. so2s = mod16.*cos(2*pi*ScaleTable(17)*f0*t16);  
  109. la2s = mod16.*cos(2*pi*ScaleTable(18)*f0*t16);  
  110. ti2s = mod16.*cos(2*pi*ScaleTable(19)*f0*t16);  
  111. do3s = mod16.*cos(2*pi*ScaleTable(20)*f0*t16);  
  112. blks = zeros(1,k);  
  113.   
  114.   
  115. % Melody by Schau_mal   
  116. part0 = [mi1f la0e la0e do1f mi1f …  
  117. re1e re1s mi1s re1e do1e re1e do1e la0f …  
  118. mi1f la0e la0e do1f mi1f …  
  119. so1e re1s mi1s re1e do1e re1e do1e ti0e so0e …  
  120. mi1f la0e la0e do1f mi1f …  
  121. re1e re1s mi1s re1e do1e re1e do1e la0e so0e …  
  122. mi1f la0e la0e do1f mi1f …  
  123. so1e mi1e blkf blkf blkf …  
  124. ];  
  125.   
  126. part1 = [la0f la0e so0e la0f la0e do1e …  
  127. do1f re1e do1e la0f la0f …  
  128. do1f do1e so0e do1e re1e mi1e so1e …  
  129. so1e mi1e re1f mi1f mi1f …  
  130. la1e la1e la1e so1e mi1e mi1f do1e …  
  131. la0e la0e la0e mi1e re1s mi1s re1e re1f …  
  132. mi1e mi1e so1e mi1e re1e mi1e re1e do1e …  
  133. la0f so0f la0f la0f …  
  134. ];  
  135.   
  136. part2 = [mi1e mi1e so1e mi1e mi1e so1e so1e la1e …   
  137. do2e la1e so1f la1s do2s la1e la1f …  
  138. la0f la0e so0e la0f do1f …  
  139. re1e mi1s re1s do1e re1e mi1f mi1f …  
  140. la0e la1e la1e so1e re1e mi1s re1s do1e re1e …  
  141. mi1f mi1f blke blke blkf …  
  142. do1e la0e la0e do1e re1f so0e so0e …  
  143. mi1e so1e mi1e re1e do1f do1f …  
  144. la0e do1e re1e mi1e re1e do1e so0e mi0e …  
  145. la0f la0f blke blke blkf …  
  146. ];  
  147.   
  148. part3 = [la0f la0e so0e la0f do1f …  
  149. re1e mi1s re1s do1e re1e mi1f mi1f …  
  150. la0e la1e la1e so1e re1e mi1s re1s do1e re1e …  
  151. mi1f mi1f blke blke blkf …  
  152. do1e la0e la0e do1e re1f so0e so0e …  
  153. mi1e so1e mi1e re1e do1f do1e do1e …  
  154. la0e do1e re1e mi1e so1e mi1e mi1e so1e …  
  155. la1f la1f la1f la1f …  
  156. ];  
  157.   
  158. part4 = [la1e la1s la1s la1e la1e la1e la1s so1s mi1e re1e …  
  159. re1e re1s re1s mi1e mi1s so1s mi1e mi1s re1s do1e do1s la0s …  
  160. la0f la0e so0e la0f la0e do1e …  
  161. re1e mi1s re1s do1e re1e mi1f mi1f …  
  162. la1e so1e mi1e re1e so1e mi1e re1e do1e …  
  163. do1f do1f la0s do1s re1s mi1s re1s do1s la0s do1s  
  164. ];  
  165.   
  166. part5 = [do2e do2s do2s la1e la1s la1s so1e so1s so1s mi1e mi1s mi1s …  
  167. re1e mi1s re1s do1e la0s so0s la0s so0s do1s re1s mi1s so1s la1s re2s …  
  168. do2f do2f blks blks blks blks do1e re1e …  
  169. mi1f mi1f mi1f so1e mi1e …  
  170. la1f la1f la1e do1e so1e mi1e …  
  171. re1f re1e re1s re1s re1e re1e do1e re1e …  
  172. mi1f mi1e mi1s mi1s mi1e re1s do1s ti0e do1s re1s …  
  173. mi1f mi1f mi1f so1e mi1e …  
  174. do2f la1f la1f la1e do1e …  
  175. re1f so1f so1f la1f …  
  176. ti1f ti1f ti1f ti1f …  
  177. ];  
  178.   
  179. part6 = [blkf blkf mi1e so1e mi1e so1e …  
  180. mi1f la0e la0s la0s do1f la0e mi1s la0s …  
  181. do1e do1s do1s re1e do1s re1s mi1f mi1f …  
  182. mi1f la0e la0s la0s so1f re1e re1s re1s …  
  183. mi1f mi1f mi1s re1s do1s la0s mi0s re0s mi0s so0s …  
  184. do1f la0e la0s la0s re1f so0e so0s so0s …  
  185. mi0f so0e so0s so0s do1f do1f …  
  186. la0f do1e do1s la0s mi1e mi1s mi1s re1e re1s mi1s …  
  187. ];  
  188.   
  189. % Combination, v1 is complete version, v2 is simple version.  
  190. v1 = [part0 part1 part1 part2 part3 part4 part0 part1 part1 part2 part3 part5 part3 part6 part3];  
  191. v2 = [part0 part1 part1 part2 part3 part5 part3 part6 part3];  
  192.   
  193. % Let's rock ^_^  
  194. s = v1;  
  195. s = s/max(s);  
  196. sound(s,fs);  

 

Matlab 制作《最炫民族风》弱爆了,附代码-编程之家

前两天在网上看到了有人用matlab演奏出最炫民族风,我用了这么多年matlab还是第一次知道有这种玩法,于是把他的代码研究了一下,自己制作了一首歌曲,在这里分享一下。   首先介绍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:(座机电话提示音就是la,可以用来调吉他) fs=44100; t=0: 1/fs: 0.5; la = sin(2*pi*440*t); (下文介绍440是怎么来的) sound(la, fs)   下面介绍一下简单乐理: 看过柯南的同学都知道,音高和频率是指数的关系,它们满足下面的公式,其中p是音高,f是频率
f=440 * 2(p-69)/12,这就是著名的十二平均率。 标准音la,即钢琴的A4键,定义为p=69。音高每上升一个半音,p加1。 Matlab 制作《最炫民族风》弱爆了,附代码-编程之家 如上图所示,从C4到B4分别对应着do re mi fa sol la xi,它们的p值分别为 60 62 64 65 67 69 71,注意中间有黑键,你也可以根据下表来查询某个音的频率。

Frequency in hertz (semitones above or below middle C)
Octave→
Note↓
0 1 2 3 4 5 6 7 8 9
C 16.352 (−48) 32.703 (−36) 65.406 (−24) 130.81 (−12) 261.63 (0) 523.25 (+12) 1046.5 (+24) 2093.0 (+36) 4186.0 (+48) 8372.0 (+60)
C♯/D♭ 17.324 (−47) 34.648 (−35) 69.296 (−23) 138.59 (−11) 277.18 (+1) 554.37 (+13) 1108.7 (+25) 2217.5 (+37) 4434.9 (+49) 8869.8 (+61)
D 18.354 (−46) 36.708 (−34) 73.416 (−22) 146.83 (−10) 293.66 (+2) 587.33 (+14) 1174.7 (+26) 2349.3 (+38) 4698.6 (+50) 9397.3 (+62)
D♯/E♭ 19.445 (−45) 38.891 (−33) 77.782 (−21) 155.56 (−9) 311.13 (+3) 622.25 (+15) 1244.5 (+27) 2489.0 (+39) 4978.0 (+51) 9956.1 (+63)
E 20.602 (−44) 41.203 (−32) 82.407 (−20) 164.81 (−8) 329.63 (+4) 659.26 (+16) 1318.5 (+28) 2637.0 (+40) 5274.0 (+52) 10548 (+64)
F 21.827 (−43) 43.654 (−31) 87.307 (−19) 174.61 (−7) 349.23 (+5) 698.46 (+17) 1396.9 (+29) 2793.8 (+41) 5587.7 (+53) 11175 (+65)
F♯/G♭ 23.125 (−42) 46.249 (−30) 92.499 (−18) 185.00 (−6) 369.99 (+6) 739.99 (+18) 1480.0 (+30) 2960.0 (+42) 5919.9 (+54) 11840 (+66)
G 24.500 (−41) 48.999 (−29) 97.999 (−17) 196.00 (−5) 392.00 (+7) 783.99 (+19) 1568.0 (+31) 3136.0 (+43) 6271.9 (+55) 12544 (+67)
G♯/A♭ 25.957 (−40) 51.913 (−28) 103.83 (−16) 207.65 (−4) 415.30 (+8) 830.61 (+20) 1661.2 (+32) 3322.4 (+44) 6644.9 (+56) 13290 (+68)
A 27.500 (−39) 55.000 (−27) 110.00 (−15) 220.00 (−3) 440.00 (+9) 880.00 (+21) 1760.0 (+33) 3520.0 (+45) 7040.0 (+57) 14080 (+69)
A♯/B♭ 29.135 (−38) 58.270 (−26) 116.54 (−14) 233.08 (−2) 466.16 (+10) 932.33 (+22) 1864.7 (+34) 3729.3 (+46) 7458.6 (+58) 14917 (+70)
B 30.868 (−37) 61.735 (−25) 123.47 (−13) 246.94 (−1) 493.88 (+11) 987.77 (+23) 1975.5 (+35) 3951.1 (+47) 7902.1 (+59) 15804 (+71)

有了上面的基础,下面就可以用matlab创作歌曲了,这里以李健的传奇作为示例:(喜欢李健的可以加我好友~~) clc clear fs=44100; t=0:1/fs:0.5;   e3_2=key(52, 2, fs); %表示2分音符的e3 a3_2=key(57, 2, fs); c4_2=key(60, 2, fs); e4_2=key(52, 2, fs); g3_2=key(55, 2, fs); d4_2=key(62, 2, fs); e4_2=key(64, 2, fs); g4_2=key(67, 2, fs);   e4_4=key(52, 4, fs); g3_4=key(55, 4, fs); a3_4=key(57, 4, fs); b3_4=key(59, 4, fs); c4_4=key(60, 4, fs); d4_4=key(62, 4, fs); e4_4=key(64, 4, fs); f4_4=key(65, 4, fs); g4_4=key(67, 4, fs); a4_4=key(69, 4, fs);   e3_8=key(52, 8, fs); g3_8=key(55, 8, fs); a3_8=key(57, 8, fs); b3_8=key(59, 8, fs); c4_8=key(60, 8, fs); d4_8=key(62, 8, fs); e4_8=key(64, 8, fs); f4_8=key(65, 8, fs); g4_8=key(67, 8, fs); a4_8=key(69, 8, fs); b4_8=key(71, 8, fs);   part1=[c4_8 c4_8 c4_4 e4_4 d4_4 d4_8 d4_4 c4_4 c4_8]; part2=[d4_4 d4_4 c4_8 a3_8 a3_2]; part3=[b3_8 b3_8 b3_4 c4_8 d4_8 d4_4]; part4=[b3_4 a3_8 g3_4 e3_8 e3_2 e3_2]; part5=[e4_8 d4_8 e4_4 d4_8 d4_8 d4_4 d4_8 c4_8 c4_2    d4_4 a3_4 a3_8 a3_8 d4_8 c4_8 c4_2]; part6=[d4_4 a3_8 g3_4 g3_8 e3_2 e3_2]; part7=[g4_4 g4_8 d4_8 d4_4 e4_4 g4_4 g4_8 d4_8 d4_4 c4_4 a3_2 a3_2];  part8=[d4_4 d4_8 a3_8 a3_4 e4_4 d4_4 d4_8 c4_8 c4_4]; part9=[c4_8 c4_8 c4_4 g3_8 c4_8 c4_4 g4_4 f4_4 e4_4 d4_4 d4_8 c4_8 c4_2 c4_4]; part10=[c4_8 e4_8 g4_8 a4_4 g4_8 a4_4 g4_4 g4_8 a4_4];   para1=[part1 part2 part3 part4]; para2=[part5 part3 part6]; para3=[part7 part8 c4_4 g3_2 g3_2]; para4=[part7 part8 c4_8 d4_8 d4_2 d4_2]; para5=[part9 part10 g4_8 e4_8 e4_8 d4_4 e4_8 e4_2]; para6=[part9 part10 g4_4 e4_8 g4_4 g4_8 g4_2];   legend=[para1 para2 para3 para4 para5 para6]; sound(legend,fs)   其中有两个函数: function g=key(p, n, fs) t=0 : 1/fs : 2/n; g=sin(2*pi* fre(p) *t);   function f = fre(p) f=440*2^((p-69)/12);