diff --git a/lambeat.scm b/lambeat.scm index ac3bb76..e98af09 100644 --- a/lambeat.scm +++ b/lambeat.scm @@ -1,12 +1,13 @@ (use-modules (ice-9 binary-ports)) (include "music.scm") +; Bitrate is the number time to sample the music function each second (define bitrate 8000) ; Get the music as a list sampled at the bitrate -(define (play t) ( - cons (music t) (if (< t 30) - (play (+ t (/ 1 bitrate))) +(define (play t end) ( + cons (* 1/4 (tri (* t (music t)))) (if (< t end) + (play (+ t (/ 1 bitrate)) end) '() ) )) @@ -17,4 +18,4 @@ cons (put-u8 (current-output-port) (modulo b 256)) (put-u8 (current-output-port) (quotient b 256)) -)) (play 0)) +)) (play 0 4)) diff --git a/lib.scm b/lib.scm index 6c86521..5a12152 100644 --- a/lib.scm +++ b/lib.scm @@ -1,5 +1,5 @@ -; Saw wave with a period of 1 second -(define (saw t) ( +; Triangle wave with a period of 1 second +(define (tri t) ( let ((m (floor-remainder (+ t (/ 1 4)) 1))) (if (< m 1/2) (- (* 4 m) 1) @@ -11,7 +11,7 @@ lambda (t) ( if (or (< t start) (>= t (+ start len))) 0 - (saw (* freq t)) + freq ) )) diff --git a/music.scm b/music.scm index 0c35ee1..7934bda 100644 --- a/music.scm +++ b/music.scm @@ -1,19 +1,30 @@ (include "lib.scm") (define (melody t) ( - apply + (map - (lambda (octave pitch start len) ((note (getfreq octave pitch) start len) t)) - ;'(3) - ;(cons (* 3 (sin t)) '()) - ;'(0) - ;'(6.28) - '(3 3 3 3 3 3 3 3 3 3) - '(4 8 4 11 4 2 8 4 11 4) - '(0 1/4 3/4 1 5/4 3/2 7/4 9/4 5/2 11/4) - '(1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4) + apply + ( + map (lambda (x) ( + apply (lambda (octave pitch start len) ((note (getfreq octave pitch) start len) t)) x + )) '( + (2 5 1 1) + (2 8 4 1) + (3 5 7 1) + (3 0 9 1) + (2 10 10 1) + (2 8 12 1) + (2 7 15 1) + (2 8 17 1) + (2 7 18 1) + (3 3 19 1) + (2 8 21 1) + (3 0 22 1) + (3 3 23 1) + (3 5 25 1) + (3 0 30 1) + (3 3 31 1) + ) ) )) (define (music t) ( - melody (floor-remainder t 3) + melody (* t 8) ))