#!r6rs (library (rsc3 graphdef graphdef) (export graphdef? make-graphdef graphdef->u8t encode-graphdef graphdef-name) (import (rnrs) (rsc3 u8 encode) (rsc3 u8 u8t) (rsc3 graphdef control) (rsc3 graphdef ugen)) ;; A represents a UGen graph. (define-record-type graphdef (fields name constants defaults controls ugens)) (define (graphdef-ugen g n) (list-ref (graphdef-ugens g) n)) (define (graphdef-control g n) (list-ref (graphdef-controls g) n)) (define (graphdef-constant g n) (list-ref (graphdef-constants g) n)) (define SCgf (map encode-u8 (map char->integer (string->list "SCgf")))) (define (graphdef->u8t g) (let ((n (graphdef-name g)) (c (graphdef-constants g)) (d (graphdef-defaults g)) (k (graphdef-controls g)) (u (graphdef-ugens g))) (list SCgf (encode-i32 0) (encode-i16 1) (encode-pstr n) (encode-i16 (length c)) (map encode-f32 c) (encode-i16 (length d)) (map encode-f32 d) (encode-i16 (length k)) (map control->u8t k) (encode-i16 (length u)) (map ugen->u8t u)))) (define (encode-graphdef g) (u8t->bytevector (graphdef->u8t g))) )