1 /******************************************/
4 by Gary P. Scavone, 2001
6 Test 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 <device>\n";
45 cout << " where N = number of channels,\n";
46 cout << " fs = the sample rate,\n";
47 cout << " and device = the device to use (default = 0).\n\n";
53 int in(char *buffer, int buffer_size, void *data)
56 MY_TYPE *my_buffer = (MY_TYPE *) buffer;
57 MY_TYPE *my_data = (MY_TYPE *) data;
58 long buffer_bytes = buffer_size * chans * sizeof(MY_TYPE);
60 memcpy(my_data, my_buffer, buffer_bytes);
65 int out(char *buffer, int buffer_size, void *data)
68 MY_TYPE *my_buffer = (MY_TYPE *) buffer;
69 MY_TYPE *my_data = (MY_TYPE *) data;
70 long buffer_bytes = buffer_size * chans * sizeof(MY_TYPE);
72 memcpy(my_buffer, my_data, buffer_bytes);
77 int main(int argc, char *argv[])
79 int buffer_size, stream1 = 0, stream2 = 0, fs, device = 0;
84 // minimal command-line checking
85 if (argc != 3 && argc != 4 ) usage();
87 chans = (int) atoi(argv[1]);
88 fs = (int) atoi(argv[2]);
90 device = (int) atoi(argv[3]);
92 // Open the realtime output device
95 audio = new RtAudio();
102 stream1 = audio->openStream(0, 0, device, chans,
103 FORMAT, fs, &buffer_size, 8);
104 stream2 = audio->openStream(device, chans, 0, 0,
105 FORMAT, fs, &buffer_size, 8);
111 data = (MY_TYPE *) calloc(chans*buffer_size, sizeof(MY_TYPE));
113 audio->setStreamCallback(stream1, &in, (void *)data);
114 audio->setStreamCallback(stream2, &out, (void *)data);
115 audio->startStream(stream1);
116 audio->startStream(stream2);
122 cout << "\nRunning two streams (quasi-duplex) ... press <enter> to quit.\n";
125 cout << "\nStopping both streams.\n";
127 audio->stopStream(stream1);
128 audio->stopStream(stream2);
134 cout << "\nPress <enter> to restart streams:\n";
138 audio->startStream(stream1);
139 audio->startStream(stream2);
145 cout << "\nRunning two streams (quasi-duplex) ... press <enter> to quit.\n";
149 audio->stopStream(stream1);
150 audio->stopStream(stream2);
156 audio->closeStream(stream1);
157 audio->closeStream(stream2);
159 if (data) free(data);