{
   "labels" : [
      "utility",
      "youtube",
      "rickroll"
   ],
   "is_private" : null,
   "id" : "1-5i3",
   "code" : "// Helper function to extract audio from a youtube video\r\n// and save it to a file\r\n// \r\n// Note:\r\n// - Linux/OSX/Unix only (uses .unixCmd)\r\n// - Needs yt-dlp to be installed\r\n// - The download procedure is synchronous\r\n\r\n(\r\n~ytdl = {|vid, filename, debug=false|\r\n\tvar output;\r\n\tif (File.exists(filename)) {\r\n\t\tif (debug) {(filename + \"already present\").postln};\r\n\t\tfilename;\r\n\t} {\r\n\t\tif (debug) {(\"downloading\" + vid + \"into\" + filename).postln};\r\n\t\toutput = [\"yt-dlp\", \"--extract-audio\", \"--audio-format\", \"wav\",\r\n\t\t\t\"--output\", filename, vid].unixCmdGetStdOut;\r\n\t\tif (debug) {output.postln};\r\n\t\tfilename;\r\n\t};\r\n};\r\n)\r\n\r\n// example usage\r\n(\r\n~rr = \"dQw4w9WgXcQ\";\r\n~file = \"/tmp/rr.wav\";\r\n\r\n(\"downloading:\" + ~file).postln;\r\n~ytdl.(~rr, ~file);\r\n(\"download complete:\" + ~file).postln;\r\n\r\n~buffer = Buffer.read(s, ~file);\r\n)\r\n\r\n(\r\n// BUFFER MUST BE STEREO!\r\nSynthDef(\\hellish, {\r\n\t|out, bufnum, descent=20, dist=7|\r\n\tvar beat = 60/113;\r\n\tvar cuts = [beat, beat/2, beat/3];\r\n\tvar rates = Line.kr([-1,1,-1], [-1.5, 1.3, -1.2], descent);\r\n\tvar frames = BufFrames.kr(bufnum);\r\n\tvar lf = LFNoise0.ar(cuts).linlin(-1, 1, 0, frames);\r\n\tvar snd = PlayBuf.ar(2, bufnum, BufRateScale.kr(bufnum)/rates,\r\n\t\tImpulse.kr(cuts), startPos: lf);\r\n\tsnd = Splay.ar(snd.flatten.scramble) * Line.kr(1, dist, descent);\r\n\tsnd = snd.tanh * 0.5;\r\n\tOut.ar(out, snd);\r\n}).add;\r\n)\r\n\r\nSynth(\\hellish, [\\bufnum, ~buffer]);\r\n\r\nFile.delete(~file);",
   "author" : "gosub",
   "name" : "Function to extract audio from youtube + example usage",
   "description" : "Helper function to extract audio from a youtube video, and save it to a file.\r\n\r\nNote: Linux/OSX/Unix only (uses .unixCmd), needs yt-dlp to be installed, the download procedure is synchronous",
   "ancestor_list" : []
}
