moved gui stuff to a separate file

This commit is contained in:
Mustafa 2014-05-17 15:16:58 -07:00
parent 50094471ab
commit d9aee73607
3 changed files with 29 additions and 61 deletions

View file

@ -23,8 +23,6 @@ Oregano will have these concepts/objects:
- custom instruments - custom instruments
- adding filters to tracks - adding filters to tracks
- ability to change filter parameters - ability to change filter parameters

View file

@ -4,67 +4,13 @@
;; --- gui stuff ;; --- gui stuff
;; TODO - put in another file. (require "gui.rkt")
(require (prefix-in gui: racket/gui))
(define frame (new gui:frame% [label "Sliders"]))
(gui:send frame show #t)
;; parent should be a frame
(new gui:slider% [parent frame]
[label "freq"]
[min-value 300]
[max-value 1000]
[init-value 400]
;; callback receives the slider object and an event object
[callback (lambda (s event)
(send-msg (n-set1 1001 "freq" (gui:send s get-value))))])
;; hypothetical usage
#;(add-filter track2 (lpf #:resonance .3
#:cutoff (slider 300 800 500)))
(define (slider name min-n max-n init)
;; TODO - determine available bus
(define bus-id 16)
(new gui:slider% [parent frame]
[label name]
[min-value min-n]
[max-value max-n]
[init-value init]
;; callback receives the slider object and an event object
[callback (lambda (s event)
(send-msg
(c-set1 bus-id (/ (gui:send s get-value) 1000))))])
(send-msg (c-set1 bus-id (/ init 1000)))
(in 1 kr bus-id))
(new gui:check-box%
[label "note-on"]
[parent frame]
[value #f]
[callback (lambda (element event)
(if (gui:send element get-value)
(send-msg (n-run1 1001 1))
(send-msg (n-run1 1001 0))))])
; ------- end of gui stuff ; ------- end of gui stuff
;; simplifies sending osc messages to server
(define (send-msg msg)
(with-sc3 (lambda (fd)
(send fd msg))))
(define current-node-id 1000) (define current-node-id 1000)
(define (gen-node-id) (define (gen-node-id)
(set! current-node-id (add1 current-node-id)) (set! current-node-id (add1 current-node-id))
@ -79,7 +25,8 @@
(define sin-instrument (define sin-instrument
(letc ([bus 0] (letc ([bus 0]
[freq 440]) [freq 440])
(out bus (mul (slider "amplitude" 100 800 200) (sin-osc ar freq 0))))) ;; TODO - remove slider
(out bus (mul (signal-slider "amplitude" 100 800 200) (sin-osc ar freq 0)))))
(define saw-instrument (define saw-instrument
(letc ([bus 0] (letc ([bus 0]
@ -115,6 +62,9 @@
(send-msg (n-run1 node-id 0)) (send-msg (n-run1 node-id 0))
node-id) node-id)
; === user instrument funcs ===
(define (preset-instrument name) (define (preset-instrument name)
(let ([node-id (gen-node-id)]) (let ([node-id (gen-node-id)])
(create-synth name node-id))) (create-synth name node-id)))
@ -125,9 +75,15 @@
(send-msg (n-set1 inst "bus" track)) (send-msg (n-set1 inst "bus" track))
(send-msg (n-run1 inst 1))) (send-msg (n-run1 inst 1)))
(define (note-off inst) (define (inst-on inst)
(send-msg (n-run1 inst 1)))
(define (inst-off inst)
(send-msg (n-run1 inst 0))) (send-msg (n-run1 inst 0)))
(define (set-inst-param inst name val)
(send-msg (n-set1 inst name val)))
#| #|
- to stop/run: - to stop/run:
@ -135,13 +91,25 @@
|# |#
;; ======== test run ===========
;; ======== example useage ===========
(define my-sin (preset-instrument "sin-inst")) (define my-sin (preset-instrument "sin-inst"))
(param-slider "change frequency" 300 1000 400
(lambda (val)
(set-inst-param my-sin "freq" val)))
(param-check-box "synth on" #f
(lambda (v)
(if v
(inst-on my-sin)
(inst-off my-sin))))
(show-gui)
;; example: ;; example:
(sleep 1) (sleep 0.5)
; (note-on my-sin 500 1) ; (note-on my-sin 500 1)
; (note-off my-sin) ; (note-off my-sin)

View file

@ -8,5 +8,7 @@ sleep 1
jack_connect -s default SuperCollider:out_1 system:playback_1 jack_connect -s default SuperCollider:out_1 system:playback_1
jack_connect -s default SuperCollider:out_2 system:playback_2 jack_connect -s default SuperCollider:out_2 system:playback_2
# go to scsynth
fg