{
   "ancestor_list" : [],
   "description" : "This is my favourite computer music tune programmed in SuperCollider: The legendary Super Mario theme :)",
   "author" : "Dave",
   "name" : "Super Mario Theme",
   "code" : "/*********************************************************\r\n* The legendary Super Mario Theme for SuperCollider      *\r\n* created by David Hofmann, HfM Karlsruhe, February 2011 *\r\n*                                                        *\r\n* Contains all three voices and percussion sounds        *\r\n**********************************************************/\r\n\r\n(\r\n// global pitch Offset, can be used to transpose the whole song\r\n~pitchOffset = 60;\r\n\r\n// global duration divisor, can be used to make the song faster or slower\r\n~durParam = 6.5;\r\n\r\n// *************************** SynthDefs ***************************\r\n\r\n// SynthDef for the first and second voice\r\nSynthDef(\\mario, { |out, amp=0.3, freq=440|\r\n\tvar snd;\r\n\tsnd = LFPulse.ar(freq)!2;\r\n\tsnd = snd * EnvGen.ar(Env.linen(0.001, 0.1, 0.03), doneAction:2);\r\n\tOffsetOut.ar(out, snd*amp);\r\n}).add;\r\n\r\n// SynthDef for the bass\r\nSynthDef(\\bass, { |out, amp=0.5, freq=440|\r\n\tvar snd;\r\n\tsnd = LFTri.ar(freq)!2;\r\n\tsnd = snd * EnvGen.ar(Env.linen(0.001, 0.1, 0.03), doneAction:2);\r\n\tOffsetOut.ar(out, snd*amp);\r\n}).add;\r\n\r\n\r\n// SynthDef for percussion sounds\r\nSynthDef(\\beat, { |out, amp=0.3, sustain=0.01|\r\n\tvar snd;\r\n\tsnd = WhiteNoise.ar()!2;\r\n\tsnd = HPF.ar(snd, 2000);\r\n\tsnd = snd * EnvGen.ar(Env.linen(0.005, sustain, 0.01), doneAction:2);\r\n\tOffsetOut.ar(out, snd*amp);\r\n}).add;\r\n\r\n//Synth(\\mario);\r\n//Synth(\\bass);\r\n//Synth(\\beat, [\\sustain, 0.05]);\r\n\r\n(\r\n{\r\n\t/* Here comes the note and rhythm data.\r\n\t * The overall sequence of the song is:\r\n\t * Intro\r\n\t * Part 1 (2x)\r\n\t * Part 2 (2x)\r\n\t * Part 3\r\n\t * Intro\r\n\t * Part 1 (2x)\r\n\t * Part 4 (2x)\r\n\t * Part 3\r\n\t * Intro */\r\n\t\r\n\t// Pseqs of note lengths. These rhythms are used by voice 1 and 2 commonly, they are always parallel\r\n\t// Intro\r\n\tvar times_intro =  Pseq([1, 2, 2, 1, 2, 4, 4]);\t\r\n\t// Part 1\r\n\tvar triplet = Pn(4/3, 3);\r\n\tvar times_part1 = Pseq([ Pn(3,3), 2,  2, 1, 2, triplet,  2,  1,  2,  2,  1,  1,  3]);\r\n\t// Part 2\r\n\tvar seq1 = Pseq([Pn(1,3), 2, 2]);\r\n\tvar seq2 = Pseq([1, 1, 2, 1, 1, 3]);\r\n\tvar times_part2  =  Pseq([2, seq1, seq2, seq1, 2, 1, 6, seq1, seq2,  3, 3, 8]);\r\n\t// Part 3\r\n\tvar seq3 = Pseq([1, 2, 2, 1, 2, 1, 2, 1, 4]);\r\n\tvar times_part3  = Pseq([ seq3, 1, 2, 2, 1, 1, 9, seq3]);\r\n\t// Part 4\r\n\tvar seq4 = Pseq([1, 2, 3, 2, 1, 2, 1, 4]);\r\n\tvar times_part4  = Pseq([seq4, Pn(triplet, 2),  1, 2, 1, 4, seq4, Pn(triplet, 2), 8]);\r\n\t\r\n\t// *************************** Notes for Voice 1 ***************************\r\n\t// Intro\r\n\tvar notes_intro_1 = Pseq([Pn(16,3), 12, 16, 19, 7]);\r\n\t// Part 1\r\n\tvar notes_part1_1 = Pseq([12, 7, 4, 9, 11, 10, 9, 7, 16, 19, 21, 17, 19, 16, 12, 14, 11 ]);\r\n\t// Part 2\r\n\tvar nseq1 = Pseq([19, 18, 17, 15, 16]);\r\n\tvar nseq2 = Pseq([7, 9, 12, 9, 12, 14]);\r\n\tvar notes_part2_1 = Pseq([\\rest, nseq1, nseq2, nseq1, Pn(24,3), nseq1, nseq2, 15, 14, 12]);\r\n\t// Part 3\r\n\tvar nseq3 = Pseq([Pn(12,4), 14, 16]);\r\n\tvar notes_part3_1 = Pseq([nseq3, 12, 9, 7, Pn(nseq3, 2), 12, 9, 7]);\r\n\t// Part 4\r\n\tvar nseq4 = Pseq([16, 12, 7, 8, 9, 17, 17, 9, 11]);\r\n\tvar notes_part4_1 = Pseq([nseq4, Pn(21,3), 19, 17, 16, 12, 9, 7, nseq4, Pn(17,3), 16, 14, 12]);\r\n\t\r\n\t// *************************** Notes for Voice 2 ***************************\r\n\t// Intro\r\n\tvar notes_intro_2 = Pseq([Pn(6,5), 7, 7]);\r\n\t// Part 1\r\n\tvar notes_part1_2 = Pseq([4, 0, -5, 0, 2, 1, 0, 0, 7, 11, 12, 9, 11, 9, 2, 5, 2 ]);\r\n\t// Part 2\r\n\tvar nseq5 = Pseq([16, 15, 14, 11, 12]);\r\n\tvar nseq6 = Pseq([4, 5, 7, 0, 4, 5]);\r\n\tvar notes_part2_2 = Pseq([\\rest, nseq5, nseq6, nseq5, Pn(19,3), nseq5, nseq6, 8, 5, 4]);\r\n\t// Part 3\r\n\tvar nseq7 = Pseq([Pn(8,4), 10, 7]);\r\n\tvar notes_part3_2 = Pseq([nseq7, 4, 4, 0, Pn(nseq7, 2), 4, 4, 0]);\r\n\t// Part 4\r\n\tvar nseq8 = Pseq([12, 9, 4, 4, 5, 12, 12, 5, 7]);\r\n\tvar notes_part4_2 = Pseq([nseq8, Pn(17,3), 16, 14, 12, 9, 5, 4, nseq8, Pn(14,3), 12, 11, 7]);\r\n\t\r\n\t// *************************** Rhythm and notes for the bass ***************************\r\n\t// Intro\r\n\tvar notes_intro_bass = Pseq([2, 2, 2, 2, 2, 11, 7-12]);\r\n\t// Part 1\r\n\tvar notes_part1_bass = Pseq([7, 4, 0, 5, 7, 6, 5, 4, 12, 16, 17, 14, 16, 12, 9, 11, 7]-12);\r\n\t// Part 2\r\n\tvar nseq9 = Pseq([0, 7, 12, 5, Pn(12,3), 5, 0]);\r\n\tvar notes_part2_bass = Pseq([nseq9, 4, 7, 12, Pn(29,3), 7, nseq9, 8, 10, 12, 7, 7, 0]-12);\r\n\tvar seq5 = Pseq([3, 3, 2, 3, Pn(1,3), 2]);\r\n\tvar seq6 = Pseq([3, 3, 1, 2, 2]);\r\n\tvar times_part2_bass  = Pseq([seq5, seq6, 1, 2, 2, seq5, 2, 3, seq6]);\r\n\t// Part 3\r\n\tvar nseq10 = Pseq([8, 15, 20, 19, 12]);\r\n\tvar notes_part3_bass = Pseq([nseq10, 7, nseq10, 12, 7, nseq10, 7]-24);\r\n\tvar seq7 = Pseq([3, 3, 2]);\r\n\tvar times_part3_bass  = Pseq([Pn(seq7, 3), 3, 1, 2, 2, Pn(seq7, 2)]);\r\n\t// Part 4\r\n\tvar nseq11 = Pseq([0, 3, 4, 12, 5, 5, 12, 12, 5]);\r\n\tvar notes_part4_bass = Pseq([nseq11, 2, 5, 7, 11, 7, 7, 12, 12, 7, nseq11, Pn(7,3), 9, 11, 12, 7, 7, 0]-12);\r\n\tvar seq8 = Pseq([3, 1, Pn(2,4), 1, 1, 2]);\r\n\tvar times_part4_bass  = Pseq([Pn(seq8,3), 3, 1, triplet, 1, 2, 1, 4]);\r\n\t\r\n\t// *************************** Rhythm (times) and sustain lengths (notes) of the percussion track ***************************\r\n\t// Intro\r\n\tvar notes_intro_drums = Pseq([5, 1, 5, 1, 5, 5, 5, 1, 1, 1]);\r\n\tvar times_intro_drums = Pseq([2, 1, 2, 1, 2, 3, 2, 1, 1, 1]);\r\n\t\r\n\t// Part 1\r\n\tvar notes_part1_drums = Pseq([\\rest, 1, 1, 5, 1, 1]);\r\n\tvar times_part1_drums = Pseq([2,8/6,4/6,2,8/6,4/6]);\r\n\t\r\n\t// Part 2 has the same drums as part 1\r\n\t// Part 3 notes are the same as the intro notes\r\n\tvar times_part3_drums = Pseq([2, 1, 2, 1, 2, 3, 2, 1, 1, 1]);\r\n\t\r\n\t// Part 4\r\n\tvar notes_part4_drums = Pseq([1, 1, 5, 1]);\r\n\tvar times_part4_drums = Pseq([3, 1, 2, 2]);\r\n\t\r\n\t// whole percussion track\r\n\tvar drums_notes = Pseq([notes_intro_drums, Pn(notes_part1_drums, 8), Pn(notes_part1_drums, 16), Pn(notes_intro_drums, 4), Pn(notes_part1_drums, 8), Pn(notes_part4_drums, 16), Pn(notes_intro_drums, 4)]/100);\r\n\t\r\n\t// *************************** Pdefs ***************************\t\r\n\t// Pdef for Voice 1\r\n\tPdef(\\voice1, Pbind(\r\n\t\t\\instrument, \\mario,\r\n\t\t\\dur, Pseq([times_intro, Pn(times_part1, 2), Pn(times_part2, 2), times_part3, times_intro, Pn(times_part1, 2), Pn(times_part4, 2), times_part3, times_intro]/~durParam),\r\n\t\t\\midinote, Pseq([notes_intro_1, Pn(notes_part1_1, 2), Pn(notes_part2_1, 2), notes_part3_1, notes_intro_1, Pn(notes_part1_1, 2), Pn(notes_part4_1, 2), notes_part3_1, notes_intro_1]+~pitchOffset)\r\n\t)).play;\r\n\t\r\n\t// Pdef for Voice 2\r\n\tPdef(\\voice2, Pbind(\r\n\t\t\\instrument, \\mario,\r\n\t\t\\dur, Pseq([times_intro, Pn(times_part1, 2), Pn(times_part2, 2), times_part3, times_intro, Pn(times_part1, 2), Pn(times_part4, 2), times_part3, times_intro]/~durParam),\r\n\t\t\\midinote, Pseq([notes_intro_2, Pn(notes_part1_2, 2), Pn(notes_part2_2, 2), notes_part3_2, notes_intro_2, Pn(notes_part1_2, 2),Pn(notes_part4_2, 2), notes_part3_2, notes_intro_2]+~pitchOffset)\r\n\t)).play;\r\n\t\r\n\t// Pdef for the Bass\r\n\tPdef(\\voice3, Pbind(\r\n\t\t\\instrument, \\bass,\r\n\t\t\\dur, Pseq([times_intro, Pn(times_part1, 2), Pn(times_part2_bass, 2), times_part3_bass, times_intro, Pn(times_part1, 2), Pn(times_part4_bass, 2), times_part3_bass, times_intro]/~durParam),\r\n\t\t\\midinote, Pseq([notes_intro_bass, Pn(notes_part1_bass, 2), Pn(notes_part2_bass, 2), notes_part3_bass, notes_intro_bass, Pn(notes_part1_bass, 2),Pn(notes_part4_bass, 2), notes_part3_bass, notes_intro_bass]+~pitchOffset)\r\n\t)).play;\r\n\t\r\n\t// Pdef for the percussion track\r\n\t// it uses the notes both for \\degree and \\sustain. The \\degree mapping is only needed for rests\r\n\tPdef(\\percussion, Pbind(\r\n\t\t\\instrument, \\beat,\r\n\t\t\\dur, Pseq([times_intro_drums, Pn(times_part1_drums, 8), Pn(times_part1_drums, 16), Pn(times_part3_drums, 3), times_intro_drums, Pn(times_part1_drums, 8), Pn(times_part4_drums, 16), Pn(times_part3_drums, 3), times_intro_drums]/~durParam),\r\n\t\t\\degree, drums_notes,\r\n\t\t\\sustain, drums_notes\r\n\t)).play;\r\n\t\r\n}.value\r\n)\r\n)",
   "is_private" : null,
   "id" : "1-11N",
   "labels" : [
      "percussion",
      "patterns",
      "games",
      "song",
      "melody",
      "tune"
   ]
}
