1 /******************************************/
4 by Gary P. Scavone, 2001
6 Text executable using two streams with
9 /******************************************/
15 typedef signed long MY_TYPE;
16 #define FORMAT RtAudio::RTAUDIO_SINT24
17 #define SCALE 2147483647.0
20 #define FORMAT RtAudio::RTAUDIO_SINT8
23 typedef signed short MY_TYPE;
24 #define FORMAT RtAudio::RTAUDIO_SINT16
27 typedef signed long MY_TYPE;
28 #define FORMAT RtAudio::RTAUDIO_SINT32
29 #define SCALE 2147483647.0
31 typedef float MY_TYPE;
32 #define FORMAT RtAudio::RTAUDIO_FLOAT32
36 typedef double MY_TYPE;
37 #define FORMAT RtAudio::RTAUDIO_FLOAT64
41 /* Error function in case of incorrect command-line
42 argument specifications
44 cout << "\nuseage: call_twostreams N fs\n";
45 cout << " where N = number of channels,\n";
46 cout << " and fs = the sample rate.\n\n";
52 int in(char *buffer, int buffer_size, void *data)
55 MY_TYPE *my_buffer = (MY_TYPE *) buffer;
56 MY_TYPE *my_data = (MY_TYPE *) data;
57 long buffer_bytes = buffer_size * chans * sizeof(MY_TYPE);
59 memcpy(my_data, my_buffer, buffer_bytes);
64 int out(char *buffer, int buffer_size, void *data)
67 MY_TYPE *my_buffer = (MY_TYPE *) buffer;
68 MY_TYPE *my_data = (MY_TYPE *) data;
69 long buffer_bytes = buffer_size * chans * sizeof(MY_TYPE);
71 memcpy(my_buffer, my_data, buffer_bytes);
76 int main(int argc, char *argv[])
78 int device, buffer_size, stream1, stream2, fs;
83 // minimal command-line checking
84 if (argc != 3) usage();
86 chans = (int) atoi(argv[1]);
87 fs = (int) atoi(argv[2]);
89 // Open the realtime output device
91 device = 0; // default device
93 audio = new RtAudio();
100 stream1 = audio->openStream(0, 0, device, chans,
101 FORMAT, fs, &buffer_size, 8);
102 stream2 = audio->openStream(device, chans, 0, 0,
103 FORMAT, fs, &buffer_size, 8);
109 data = (MY_TYPE *) calloc(chans*buffer_size, sizeof(MY_TYPE));
111 audio->setStreamCallback(stream1, &in, (void *)data);
112 audio->setStreamCallback(stream2, &out, (void *)data);
113 audio->startStream(stream1);
114 audio->startStream(stream2);
120 cout << "\nRunning two streams (quasi-duplex) ... press <enter> to quit.\n";
123 cout << "\nStopping both streams.\n";
125 audio->stopStream(stream1);
126 audio->stopStream(stream2);
132 cout << "\nPress <enter> to restart streams:\n";
136 audio->startStream(stream1);
137 audio->startStream(stream2);
143 cout << "\nRunning two streams (quasi-duplex) ... press <enter> to quit.\n";
147 audio->stopStream(stream1);
148 audio->stopStream(stream2);
154 audio->closeStream(stream1);
155 audio->closeStream(stream2);
157 if (data) free(data);