#lang scribble/manual
@(require (for-label racket))

@title{(disk-out bufnum channels)}


Note: There are constraints on the size of the buffer, it must be
greater than or equal to twice the size of the audio bus.  There
must be the same number of channels at the buffer and the disk-out
ugen.


@racketblock[
(let ((bus-size 1024)
      (bufferexpt 15))
  (= 0 (fxand (expt 2 bufferexpt)
	      (- (fxarithmetic-shift bus-size 1) 1))))
]


@racketblock[
(let ((g (letc ((bufnum 0))
	   (let ((z (clip2
		     (rlpf 
		      (lf-pulse ar 
				(mul-add (sin-osc kr 0.2 0) 10 21)
				(mce2 0 0.1) 
				0.1) 
		      100 
		      0.1) 
		     0.4)))
	     (mrg2 (disk-out bufnum z)
		   (out 0 z))))))
  (with-sc3
   (lambda (fd)
     (send-synth fd "disk-out-help" g)
     (async fd (b-alloc 10 32768 2))
     (async fd (b-write 10
		       "/tmp/test.aiff"
		       "aiff"
		       "float"
		       32768
		       0
		       1))
     (send fd (s-new1 "disk-out-help" 1001 1 1 "bufnum" 10)))))
]


@racketblock[
(with-sc3
 (lambda (fd)
   (send fd (n-free1 1001))
   (async fd (b-close 10))
   (async fd (b-free 10))))
]


@racketblock[
(system "sndfile-info /tmp/test.aiff")
]

@racketblock[
(system "jack.play /tmp/test.aiff")
]


