11#|
22LambdaNative - a cross-platform Scheme framework
3- Copyright (c) 2009-2013 , University of British Columbia
3+ Copyright (c) 2009-2020 , University of British Columbia
44All rights reserved.
55
66Redistribution and use in source and binary forms, with or
@@ -41,30 +41,30 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4141
4242#include <math.h>
4343
44- void rtaudio_register(void (*)(int), void (*)(float), void (*)(float*,float*));
44+ void rtaudio_register(void (*)(int), void (*)(float), void (*)(float*,float*),void (*)(void) );
4545
4646int mode=0;
4747double srate=0;
4848
4949float buffer;
5050
51- void my_realtime_init(int samplerate) { srate=(double)samplerate; buffer=0; }
51+ void my_realtime_init(int samplerate) { srate=(double)samplerate; buffer=0; }
5252
5353#define RINGSZE 10000
5454static float ring[RINGSZE];
5555int ring_in=0, ring_out=0;
5656
57- void my_realtime_input(float v)
58- {
57+ void my_realtime_input(float v)
58+ {
5959 if (mode!=0) {
60- buffer=v;
60+ buffer=v;
6161 ring[ring_in++]=v;
6262 if (ring_in==RINGSZE) ring_in=0;
6363 }
64- }
64+ }
6565
66- void my_realtime_output(float *v1,float *v2)
67- {
66+ void my_realtime_output(float *v1,float *v2)
67+ {
6868 static double t=0;
6969 if (mode==0) {
7070 buffer = 0.95*sin(2*M_PI*440.*t);
@@ -74,12 +74,17 @@ void my_realtime_output(float *v1,float *v2)
7474 if (ring_out==RINGSZE) ring_out=0;
7575 }
7676 t+=1/srate;
77- }
77+ }
78+
79+ void my_realtime_close()
80+ {
81+ buffer=0;
82+ }
7883
7984end-of-c-declare
8085)
8186
82- (c-initialize " rtaudio_register(my_realtime_init,my_realtime_input,my_realtime_output);" )
87+ (c-initialize " rtaudio_register(my_realtime_init,my_realtime_input,my_realtime_output,my_realtime_close );" )
8388
8489(define rtdemo-mode (c-lambda (int) void " mode=___arg1;" ))
8590(define rtdemo-buffer (c-lambda () double " ___result=buffer;" ))
@@ -104,14 +109,23 @@ end-of-c-declare
104109 (lambda (g w t x y )
105110 (let ((mode (glgui-widget-get g w 'value )))
106111 (rtdemo-mode mode))))
107- )
112+ (glgui-button-string gui (/ w 4 ) (/ h 3 ) (/ w 2 ) 32 ' (" Start" " Stop" ) ascii_18.fnt
113+ (lambda (g w t x y )
114+ (let ((mode (glgui-widget-get g w 'value )))
115+ (if (fx= mode 1 )
116+ (rtaudio-stop)
117+ (rtaudio-start 8000 0.5 )
118+ )
119+ )
120+ ))
121+ )
108122 (rtaudio-start 8000 0.5 )
109123 (let ((logdir (string-append (system-directory) " /log" )))
110124 (if (not (file-exists? logdir)) (create-directory logdir)))
111125 )
112126; ; events
113- (lambda (t x y )
114- (if (= t EVENT_KEYPRESS) (begin
127+ (lambda (t x y )
128+ (if (= t EVENT_KEYPRESS) (begin
115129 (if (= x EVENT_KEYESCAPE) (terminate))))
116130 (glgui-widget-set! gui mybox 'color (color-shade Red (abs (rtdemo-buffer))))
117131 (glgui-event gui t x y))
0 commit comments