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

@title{(poll trig in trigid label)}


Print/query the current output value of a UGen.

trig - a non-positive to positive transition telling poll to return
       a value

in - the signal you want to poll

trigid - if greater then 0, a '/tr' message is sent back to the
         client (similar to send-trig)

label - a string or symbol to be printed with the polled value

poll returns its in signal (and is therefore transparent).
WARNING: Printing values from the Server in intensive for the
CPU. poll should be used for debugging purposes.


@racketblock[
(define (string->ugen s)
  (make-mce 
   (cons (string-length s)
	 (map char->integer (string->list s)))))
]


@racketblock[
(let ((t (impulse kr 2 0))
      (i (line kr 0 1 5 remove-synth)))
  (audition (poll t i 0 (string->ugen "Test"))))
]


@racketblock[
(with-sc3
 (lambda (fd)
   (letrec ((print (lambda (e) (display e) (newline)))
	    (showing (lambda (f) (lambda () (let ((v (f))) (print v) v))))
	    (repeat (lambda (f) (if (f) (repeat f) #f))))
     (async fd (/notify 1))
     (repeat (showing (lambda () (wait fd "/tr"))))
     (async fd (/notify 0)))))
]

multichannel Expansion (Broken...)


@racketblock[
(define (poll* trig in trigId label)
  (poll trig in trigId (string->ugen label)))
]


@racketblock[
(poll* (impulse kr (mce2 10 5) 0)
       (line kr 0 (mce2 1 5) (mce2 1 2) do-nothing)
       0
       "Test")
]


@racketblock[
(with-sc3 server-status)
]


