{
   "code" : "// you can create your midi file using MuseScore, Finale, Sibelius, Logic, etc.\r\n// TIP: create one separate midi file per layer (melodies, chords, etc).\r\n\r\n// ===========================================\r\n// THE FOLLOWING TWO THINGS YOU ONLY DO ONCE\r\n// ===========================================\r\n\r\n\r\n// Install quark (do only once -- may take a few seconds)\r\nQuarks.install(\"wslib\");\r\n\r\n// Recompile class library (need to do only once)\r\nthisProcess.recompile\r\n\r\n// if the above does not work, you need to install git on your computer:\r\n// Mac: https://git-scm.com/download/mac\r\n// PC: https://git-scm.com/download/win\r\n\r\n// ===========================\r\n// LOAD MIDI FILE AND TEST IT\r\n// ===========================\r\n\r\n// adjust the path\r\n// download MIDI file, select it in your file browser (one click only), \"copy\" it (ctrl+C), paste (ctrl+V) path here:\r\n~melody = SimpleMIDIFile.read( \"/home/sclork/Downloads/melody.mid\" );\r\n\r\n// you can load as many midi files as you want, just create other variables for them (~melody1, ~melody2, ~chords, ~thingy, etc)\r\n\r\n// remember to boot server!\r\ns.boot;\r\n\r\n// play it (cmd-. to stop)\r\n~melody.p.play;\r\n\r\n// ==================================\r\n// PLAY WITH A DIFFERENT INSTRUMENT\r\n// ==================================\r\n\r\n// another SynthDef:\r\n(\r\nSynthDef(\"plucking\", {arg amp = 0.1, freq = 440, decay = 2, dampen = 0.1, pan = 0;\r\n\r\n\tvar env, snd;\r\n\tenv = Env.linen(0, decay, 0).kr(doneAction: 2);\r\n\tsnd = Pluck.ar(\r\n\t\tin: WhiteNoise.ar(amp),\r\n\t\ttrig: Impulse.kr(0),\r\n\t\tmaxdelaytime: 0.1,\r\n\t\tdelaytime: freq.reciprocal,\r\n\t\tdecaytime: decay,\r\n\t\tcoef: dampen);\r\n\tsnd = Pan2.ar(snd, pan);\r\n\tOut.ar(0, snd);\r\n}).add;\r\n\r\n~bpm = TempoClock.new(120/60).permanent_(true);\r\n)\r\n\r\n// Playing through Pbindf\r\n// Specifying synth-specific parameters:\r\n\r\n// ex. 1\r\n(\r\nPbindf(~melody.p,\r\n\t\\instrument, \"plucking\",\r\n\t\\decay, 15,\r\n\t\\dampen, 0.12,\r\n\t\\amp, 1,\r\n).play(~bpm);\r\n)\r\n\r\n// ex. 2\r\n(\r\nPbindf(~melody.p,\r\n\t\\instrument, \"plucking\",\r\n\t\\decay, Pwhite(0.1, 15),\r\n\t\\ctranspose, Pwhite(0, 1) + [-12, -7], // mess it up!\r\n\t\\dampen, Pwhite(0.1, 0.6),\r\n\t\\amp, Pwhite(0.3, 1)\r\n).trace.play(~bpm);\r\n)\r\n\r\n// ex. 3\r\n(\r\nPstretch(0.5,\r\n\tPbindf(~melody.p, // Pstretch duratins (speed up or slow down);\r\n\t\t\\instrument, \"plucking\",\r\n\t\t\\decay, 1,\r\n\t\t\\dampen, 0.1,\r\n\t\t\\amp, 1,\r\n\t\t\\ctranspose, [-24, -21, -17],\r\n\t\t\\amp, Pseq([0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 2], inf)\r\n)).trace.play(~bpm);\r\n)\r\n\r\n// ex. 4\r\n(\r\nPstretch(Pn(Pgeom(0.5, 1.1, 14)), // can also stretch by pattern!\r\n\tPbindf(~melody.p,\r\n\t\t\\instrument, \"plucking\",\r\n\t\t\\decay, 1,\r\n\t\t\\dampen, 0.1,\r\n\t\t\\amp, 1,\r\n\t\t\\ctranspose, [-24, -21, -17],\r\n\t\t\\amp, Pwhite(0.5, 2)\r\n)).trace.play(~bpm);\r\n)\r\n\r\n// ex. 5\r\n(\r\nPbindf(~melody.p,\r\n\t\\instrument, \"plucking\",\r\n\t\\decay, 15,\r\n\t\\dampen, 0.12,\r\n\t\\amp, 1,\r\n\t\\delta, Pseq([1/3, 1, 1/3, 1/4], inf) // CREATE NEW RHYTHM (ignoring original durs -- note we have to use \\delta to override the original durations from the midi file\r\n).play(~bpm);\r\n)",
   "id" : "1-5aT",
   "is_private" : null,
   "labels" : [
      "midi",
      "pbindf",
      "simplemidifile",
      "quarks"
   ],
   "ancestor_list" : [],
   "description" : "Load a MIDI file and play it with your own SynthDef. Examples of how to use it with Pbindf",
   "name" : "Demo: Loading a MIDI file, playing it with your own SynthDef",
   "author" : "Bruno Ruviaro"
}
