On Sun, 25 Jan 2009, Kjetil S. Matheussen wrote: > > Erik Nomitch: >> >> Hi, >> >> I'm making a random "beat" generator based on a directory tree of >> samples and a map file. Currently, it shuffles sample order and >> creates a list of samples and their corresponding start time (example >> list below). >> >> I need a good way to mix all of these seperate samples into one single >> audio file based on the time at which each starts at. Any >> recommendations or thoughts would be appreciated. File format doesn't >> matter, I'll use whatever is easiest. >> >> Thanks, >> Erik Nomitch >> >> ex: >> at: 0.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_C2A.wav >> at: 2.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_C2S.wav >> at: 4.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_T1A.wav >> at: 6.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_T1S.wav >> at: 8.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_aOrig.wav >> at: 10.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01.wav >> at: 12.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01_ST.wav >> at: 14.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01_VT1.wav >> at: 4.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_C2A.wav >> at: 6.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_C2S.wav >> at: 8.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_T1A.wav >> at: 10.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_T1S.wav >> at: 12.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_aOrig.wav >> at: 14.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01.wav >> at: 16.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01_ST.wav >> at: 18.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01_VT1.wav >> at: 4.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_C2A.wav >> at: 8.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_C2S.wav >> at: 12.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_T1A.wav >> at: 16.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_T1S.wav >> at: 20.0 play /home/tux/.projects/elign/808/clap/808Clap-Kult_aOrig.wav >> at: 24.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01.wav >> at: 28.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01_ST.wav >> at: 32.0 play /home/tux/.projects/elign/808/clap/808Clap-R8_01_VT1.wav >> etc... >> > > Below is some code I have hacked together for Snd to do this. > Compile snd with the "--with-guile" option, save your txt > above ("at: etc.") into a file called "score.txt", start Snd, and paste the > code below into the terminal you started > snd in. > > Alternatively, you can save the code below into a > file, and use the "-b" option to start a gui-less > Snd which load and runs a specified script file. > Oops, I didn't test this on a clean Snd, and there seems to be a lot of dependencies. Instead, use snd-ls, http://heim.ifi.uio.no/~ksvalast/arkiv/src/snd/, and the code below instead: (define (map-file filename func) (let* ((fd (open-file filename "r")) (line (read-line fd)) (ret '())) (while (not (eof-object? line)) (set! ret (cons (func line) ret)) (set! line (read-line fd))) (reverse ret))) (define* (fileplay seconds filename) (let* ((samples (seconds->samples seconds)) (end (+ (mus-sound-frames filename) samples))) (for-each (lambda (ch) (define fd (make-readin filename :channel ch)) (run (lambda () (do ((i samples (1+ i))) ((= i end)) (out-any i (readin fd) ch *output*))))) (iota (mus-sound-chans filename))))) (define (create score samplerate channels outfile) (set! (optimization) 6) (primitive-eval `(with-sound (:srate ,samplerate :channels ,channels :output ,outfile) ,@(map (lambda (start filename) `(fileplay ,start ,filename)) (map string->number (map cadr (map-file score (lambda (l) (string-split l #\space))))) (map cadddr (map-file score (lambda (l) (string-split l #\space)))))))) (create "score.txt" 44100 2 "/tmp/test.wav") _______________________________________________ Linux-audio-user mailing list Linux-audio-user@xxxxxxxxxxxxxxxxxxxx http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user