Advertisement
mkv

hairyvagina.m

mkv
Jul 1st, 2011
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 9.90 KB | None | 0 0
  1. % matlab playing "Penguins of The Apocalypse" by FearofDark
  2. % written by ed <tripflag at gmail>
  3. % protected by GPLv2 and stallmans beard
  4.  
  5. % frequency(note) = f0 * a^n
  6. % f0 = base frequency, A4=440Hz
  7. %  n = steps from base frequency
  8. %  a = 2^(1/12)
  9.  
  10. x  = @(quarters)          zeros(1, quarters * 0.25 * 0.25 * 44100);
  11. freq = @(octave,steps)    440.00 * (2^(1/12)) ^ (steps + (octave*12)-36);
  12. size = @(quarters)        (1/44100) * (1:quarters * 0.25 * 0.25 * 44100);
  13. zise = @(quarters)        quarters * 0.25 * 0.25 * 44100;
  14.  
  15. % calculate the frequency of each note
  16. mc  = @(octave, quarters) 2 * pi * freq(octave, -9) * size(quarters);
  17. mcs = @(octave, quarters) 2 * pi * freq(octave, -8) * size(quarters);
  18. md  = @(octave, quarters) 2 * pi * freq(octave, -7) * size(quarters);
  19. mds = @(octave, quarters) 2 * pi * freq(octave, -6) * size(quarters);
  20. me  = @(octave, quarters) 2 * pi * freq(octave, -5) * size(quarters);
  21. mf  = @(octave, quarters) 2 * pi * freq(octave, -4) * size(quarters);
  22. mfs = @(octave, quarters) 2 * pi * freq(octave, -3) * size(quarters);
  23. mg  = @(octave, quarters) 2 * pi * freq(octave, -2) * size(quarters);
  24. mgs = @(octave, quarters) 2 * pi * freq(octave, -1) * size(quarters);
  25. ma  = @(octave, quarters) 2 * pi * freq(octave,  0) * size(quarters);
  26. mas = @(octave, quarters) 2 * pi * freq(octave,  1) * size(quarters);
  27. mb  = @(octave, quarters) 2 * pi * freq(octave,  2) * size(quarters);
  28.  
  29. % generate "squarewave" notes
  30. c  = @(o,q) sin( mc(o,q)) + sin( mc(o,q) *3)/3 + sin( mc(o,q) *5)/5 + sin( mc(o,q) *7)/7 + sin( mc(o,q) *9)/9 + sin( mc(o,q) *11)/11;
  31. cs = @(o,q) sin(mcs(o,q)) + sin(mcs(o,q) *3)/3 + sin(mcs(o,q) *5)/5 + sin(mcs(o,q) *7)/7 + sin(mcs(o,q) *9)/9 + sin(mcs(o,q) *11)/11;
  32. d  = @(o,q) sin( md(o,q)) + sin( md(o,q) *3)/3 + sin( md(o,q) *5)/5 + sin( md(o,q) *7)/7 + sin( md(o,q) *9)/9 + sin( md(o,q) *11)/11;
  33. ds = @(o,q) sin(mds(o,q)) + sin(mds(o,q) *3)/3 + sin(mds(o,q) *5)/5 + sin(mds(o,q) *7)/7 + sin(mds(o,q) *9)/9 + sin(mds(o,q) *11)/11;
  34. e  = @(o,q) sin( me(o,q)) + sin( me(o,q) *3)/3 + sin( me(o,q) *5)/5 + sin( me(o,q) *7)/7 + sin( me(o,q) *9)/9 + sin( me(o,q) *11)/11;
  35. f  = @(o,q) sin( mf(o,q)) + sin( mf(o,q) *3)/3 + sin( mf(o,q) *5)/5 + sin( mf(o,q) *7)/7 + sin( mf(o,q) *9)/9 + sin( mf(o,q) *11)/11;
  36. fs = @(o,q) sin(mfs(o,q)) + sin(mfs(o,q) *3)/3 + sin(mfs(o,q) *5)/5 + sin(mfs(o,q) *7)/7 + sin(mfs(o,q) *9)/9 + sin(mfs(o,q) *11)/11;
  37. g  = @(o,q) sin( mg(o,q)) + sin( mg(o,q) *3)/3 + sin( mg(o,q) *5)/5 + sin( mg(o,q) *7)/7 + sin( mg(o,q) *9)/9 + sin( mg(o,q) *11)/11;
  38. gs = @(o,q) sin(mgs(o,q)) + sin(mgs(o,q) *3)/3 + sin(mgs(o,q) *5)/5 + sin(mgs(o,q) *7)/7 + sin(mgs(o,q) *9)/9 + sin(mgs(o,q) *11)/11;
  39. a  = @(o,q) sin( ma(o,q)) + sin( ma(o,q) *3)/3 + sin( ma(o,q) *5)/5 + sin( ma(o,q) *7)/7 + sin( ma(o,q) *9)/9 + sin( ma(o,q) *11)/11;
  40. as = @(o,q) sin(mas(o,q)) + sin(mas(o,q) *3)/3 + sin(mas(o,q) *5)/5 + sin(mas(o,q) *7)/7 + sin(mas(o,q) *9)/9 + sin(mas(o,q) *11)/11;
  41. b  = @(o,q) sin( mb(o,q)) + sin( mb(o,q) *3)/3 + sin( mb(o,q) *5)/5 + sin( mb(o,q) *7)/7 + sin( mb(o,q) *9)/9 + sin( mb(o,q) *11)/11;
  42.  
  43. % generate clean sinewave notes
  44. oc  = @(octave, quarters)  sin( mc(octave, quarters));
  45. ocs = @(octave, quarters)  sin(mcs(octave, quarters));
  46. od  = @(octave, quarters)  sin( md(octave, quarters));
  47. ods = @(octave, quarters)  sin(mds(octave, quarters));
  48. oe  = @(octave, quarters)  sin( me(octave, quarters));
  49. of  = @(octave, quarters)  sin( mf(octave, quarters));
  50. ofs = @(octave, quarters)  sin(mfs(octave, quarters));
  51. og  = @(octave, quarters)  sin( mg(octave, quarters));
  52. ogs = @(octave, quarters)  sin(mgs(octave, quarters));
  53. oa  = @(octave, quarters)  sin( ma(octave, quarters));
  54. oas = @(octave, quarters)  sin(mas(octave, quarters));
  55. ob  = @(octave, quarters)  sin( mb(octave, quarters));
  56.  
  57. % generate sawtooth notes holy shit why am I doing this
  58.  
  59. % ret = zeros(1, size(quarters)) prepares empty array of correct size
  60. % per = 1/freq(octave,steps) results in samples per period
  61. % ret(a) = 1 - 2(mod(a,per)/per);   <- sawtooth
  62.  
  63. % ...just need to figure out how to implement this [spoiler];_;[/spoiler]
  64. % NEVERMIND HERE WE GO LOL
  65.  
  66. sc  = @(octave, quarters)  saw( 1/freq(octave,-9), zise(quarters));
  67. scs = @(octave, quarters)  saw( 1/freq(octave,-8), zise(quarters));
  68. sd  = @(octave, quarters)  saw( 1/freq(octave,-7), zise(quarters));
  69. sds = @(octave, quarters)  saw( 1/freq(octave,-6), zise(quarters));
  70. se  = @(octave, quarters)  saw( 1/freq(octave,-5), zise(quarters));
  71. sf  = @(octave, quarters)  saw( 1/freq(octave,-4), zise(quarters));
  72. sfs = @(octave, quarters)  saw( 1/freq(octave,-3), zise(quarters));
  73. sg  = @(octave, quarters)  saw( 1/freq(octave,-2), zise(quarters));
  74. sgs = @(octave, quarters)  saw( 1/freq(octave,-1), zise(quarters));
  75. sa  = @(octave, quarters)  saw( 1/freq(octave, 0), zise(quarters));
  76. sas = @(octave, quarters)  saw( 1/freq(octave, 1), zise(quarters));
  77. sb  = @(octave, quarters)  saw( 1/freq(octave, 2), zise(quarters));
  78.  
  79. % Drums up this shit
  80. rand('state', sum(100 * clock));    % seed that shit
  81.  
  82. % KICK
  83. kick = randn(1, 5512);              % gaussian noise
  84. kick = kick / max(abs(kick));       % normalize <-1 .. +1>
  85. global A;
  86. A = 1;
  87. while A < 5512
  88.     kick(A) = kick(A) * ((5512-A) / 5512);
  89.     A = A + 1;
  90. end
  91.  
  92. % CRASH
  93. white = randn(1, 5512);
  94. white = white / max(abs(white));
  95. crash = zeros(1, 5512);
  96. RANGE = 128;
  97. A = 1;
  98. MAX = 0;
  99. while A < 5512-RANGE
  100.     RANGE = 0.0232*A;
  101.     AVG = 0;
  102.     B = 1;
  103.     while B < RANGE;
  104.         AVG = AVG + white(A+B);
  105.         B = B + 1;
  106.     end
  107.     crash(A) = (AVG/RANGE) * ((5512-A)/1000);
  108.     MAX = max(MAX, crash(A));
  109.     A = A + 1;
  110. end
  111. A = 1;
  112. while A < 5512-RANGE
  113.     crash(A) = crash(A) * (4-MAX);
  114.     A = A + 1;
  115. end
  116.  
  117. % DERP
  118. derp = zeros(1, 5512);
  119. RANGE = 128;
  120. A = 1;
  121. MAX = 0;
  122. while A < 5512-RANGE
  123.     AVG = 0;
  124.     B = 1;
  125.     while B < RANGE;
  126.         AVG = AVG + white(A+B);
  127.         B = B + 1;
  128.     end
  129.     derp(A) = (AVG/RANGE) * ((5512-A)/5512);
  130.     MAX = max(MAX, derp(A));
  131.     A = A + 1;
  132. end
  133. A = 1;
  134. while A < 5512-RANGE
  135.     derp(A) = derp(A) * (30-MAX);
  136.     A = A + 1;
  137. end
  138.  
  139. % a scale, for testan purposes
  140. scale1 = [  c(0,4), x(1),  d(0,4), x(1),  e(0,4), x(1),  f(0,4), x(1),  g(0,4), x(1),  a(0,4), x(1),  b(0,4), x(1),  c(1,8) ];
  141. scale2 = [  c(1,4), x(1),  d(1,4), x(1),  e(1,4), x(1),  f(1,4), x(1),  g(1,4), x(1),  a(1,4), x(1),  b(1,4), x(1),  c(2,8) ];
  142. scale3 = [ sc(2,4), x(1), sd(2,4), x(1), se(2,4), x(1), sf(2,4), x(1), sg(2,4), x(1), sa(2,4), x(1), sb(2,4), x(1), sc(3,8) ];
  143. scale4 = [  c(3,4), x(1),  d(3,4), x(1),  e(3,4), x(1),  f(3,4), x(1),  g(3,4), x(1),  a(3,4), x(1),  b(3,4), x(1),  c(4,8) ];
  144. %scale  = [ scale1 * 0.2 + scale2 * 0.2 + scale3 * 0.2 + scale4 * 0.2 ];
  145.  
  146. % the lead
  147. L1 = [ x(4), cs(4,1), ds(4,3), cs(4,4), as(3,4), cs(4,4), as(3,2), x(2), gs(3,2), fs(3,2), x(2), gs(3,6) ]; %36
  148. L2 = [ as(3,2), x(2), gs(3,2), fs(3,2), ds(3,2), gs(3,6), as(3,4), gs(3,2), fs(3,2), ds(3,2), cs(3,2) ];    %28
  149. L3 = [ as(3,2), x(2), gs(3,2), fs(3,2), ds(3,2), gs(3,18) ];                                                %28
  150. L4 = [ as(3,2), x(2), gs(3,2), fs(3,2), ds(3,2), cs(3,4), fs(3,2), x(2), fs(3,2), x(4), f(3,4) fs(3,4) ];   %32+4
  151. % 36 + 28 + 36 + 28 + 36 + 28 + 36 + 28 = 256... +4 = 260
  152.  
  153. % the bass
  154. B1 = [ sgs(1,4), sgs(1,1), x(1), sgs(2,4), sgs(1,1), x(1), sfs(1,6), x(2), sfs(2,2), x(2), sfs(1,4), sfs(2,2), sfs(1,2) ];         %32
  155. B2 = [ sb(0,4), sb(0,1), x(1), sb(1,4), sb(0,1), x(1), sds(1,6), x(2), sds(2,2), x(2), sds(1,4), sds(2,1), x(1), sds(1,1), x(1) ]; %32
  156. B3 = [ sgs(1,3), x(1), sgs(1,1), x(1), sgs(2,4), sgs(1,1), x(1), sfs(1,6), x(2), sfs(2,2), x(2), sfs(1,4), sfs(2,2), sfs(1,2) ];   %32
  157. B4 = [ sds(1,4), sds(2,1) x(1), sds(1,4), sds(2,1), x(1), scs(2,6), x(2), scs(3,2), x(2), sds(3,2), scs(3,2), sgs(2,2), scs(2,2) ]; %32+4
  158.  
  159. % preparations for...
  160. v0 =  0.0;
  161. v1 =  1.0/15.0;
  162. v2 =  2.0/15.0;
  163. v3 =  3.0/15.0;
  164. v4 =  4.0/15.0;
  165. v5 =  5.0/15.0;
  166. v6 =  6.0/15.0;
  167. v7 =  7.0/15.0;
  168. v8 =  8.0/15.0;
  169. v9 =  9.0/15.0;
  170. vA = 10.0/15.0;
  171. vB = 11.0/15.0;
  172. vC = 12.0/15.0;
  173. vD = 13.0/15.0;
  174. vE = 14.0/15.0;
  175. vF = 15.0/15.0;
  176.  
  177. % arpeggiated awesomeness
  178. A1 = [ ogs(2,2)*vA,              oas(2,1)*vC, ogs(2,1)*v5,  ob(2,1)*vC, oas(2,1)*v5, ocs(3,1)*v8,  ob(2,1)*v5, ...
  179.        ofs(3,1)*v8, ocs(3,1)*v5, oas(3,1)*v6, ofs(3,1)*v3, ocs(4,1)*v6, oas(3,1)*v3, ofs(3,1)*v6, ocs(4,1)*v3 ];
  180. A2 = [ ogs(4,1)*v6, ofs(4,1)*v3, oas(4,1)*v8, ogs(4,1)*v5, ocs(5,1)*v8, oas(4,1)*v5, ods(5,1)*v8, ocs(5,1)*v5, ...
  181.        ofs(5,1)*v8, ods(5,1)*v5, oas(5,1)*v6, ofs(5,1)*v3,  ob(5,1)*v6, oas(5,1)*v3, ocs(6,1)*v6,  ob(5,1)*v3 ];
  182. A3 = [ ofs(6,1)*v8, ocs(6,1)*v5, ocs(6,1)*v8, ofs(6,1)*v5,  ob(5,1)*v8, ocs(6,1)*v5, oas(5,1)*v8,  ob(5,1)*v5, ...
  183.        ofs(5,1)*v6, oas(5,1)*v3, ods(5,1)*v6, ofs(5,1)*v3, ocs(5,1)*v6, ods(5,1)*v3, oas(4,1)*v8, ocs(5,1)*v5 ];
  184. A4 = [ ofs(4,1)*v8, oas(4,1)*v5, ods(4,1)*v8, ofs(4,1)*v5, ocs(4,1)*v8, ods(4,1)*v5,  ob(3,1)*v8, ocs(4,1)*v6, ...
  185.        oas(3,1)*v6,  ob(3,1)*v3, ofs(3,1)*v6, oas(3,1)*v3, ods(3,1)*v6, ofs(3,1)*v3, ocs(3,1)*v6, ods(3,1)*v3 ];
  186.  
  187. % ITT: it's mergan tiem
  188. lead = [ L1, L2, L1, L3, L1, L2, L1, L4 ];
  189. bass = [ B1, B2, B3, B4, B1, B2, B3, B4, sfs(1,4), zeros(1, 3) ];
  190. arps = [ A1, A2, A3, A4, A1, A2, A3, A4 ];
  191. arps = [ arps, arps, ogs(2,2)*v1, zeros(1,5544) ];
  192. % >three samples difference
  193. % >doesn't compile
  194. % >add three dummy samples
  195. % >everything's fine
  196. % MEETHLEEEEEEB
  197.  
  198. %wavwrite(lead*0.33,44100,'penguin1.wav');
  199. %wavwrite(bass*0.33,44100,'penguin2.wav');
  200.  
  201. %drums = [ crash, x(1), kick, x(1), kick, kick, kick, ];
  202. drums = [ derp, kick*0.4, kick*1.2, kick*0.4, crash, kick*0.4, kick*1.2, kick*0.4 ];
  203. drums = [ drums, drums, drums, drums ];
  204. drums = [ drums, drums, drums, drums, crash, zeros(1,5544) ];
  205. song = bass * 0.2 + lead * 0.2 + drums * 0.4 + arps * 0.3;
  206. %wavwrite(bass, 44100, 'a1.wav');
  207. %wavwrite(lead, 44100, 'a2.wav');
  208. %song = bass * 0.33;
  209. wavwrite(bass, 44100, '1.wav');
  210. wavwrite(lead, 44100, '2.wav');
  211. wavwrite(arps, 44100, '3.wav');
  212. wavwrite(drums, 44100, '4.wav');
  213. wavwrite(song, 44100, 'matlabs-of-the-derpocalypse.wav');
  214. %song = scale;
  215. sound(song, 44100);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement