Skip to content

Commit 0310d74

Browse files
mgorges0-8-15
authored andcommitted
DemoRTAudio: Add option to start and stop rtaudio. Closes part-cw#407.
1 parent 0f26ad8 commit 0310d74

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

apps/DemoRTAudio/main.scm

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#|
22
LambdaNative - a cross-platform Scheme framework
3-
Copyright (c) 2009-2013, University of British Columbia
3+
Copyright (c) 2009-2020, University of British Columbia
44
All rights reserved.
55

66
Redistribution 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

4646
int mode=0;
4747
double srate=0;
4848

4949
float 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
5454
static float ring[RINGSZE];
5555
int 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

7984
end-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

Comments
 (0)