Mercurial > hg > audiostuff
comparison rtaudio-test.cpp @ 1:9cadc470e3da
reorganize, add more
author | pmeerw@pan |
---|---|
date | Fri, 30 Oct 2009 23:07:52 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:deadffdf5d60 | 1:9cadc470e3da |
---|---|
1 #include <cmath> | |
2 #include <stdlib.h> | |
3 #include <iostream> | |
4 #include <vector> | |
5 #include "RtAudio.h" | |
6 | |
7 int myCallback(void *outputBuffer, void *inputBuffer, unsigned int bufferFrames, double streamTime, RtAudioStreamStatus status, void *userData) { | |
8 unsigned int i, j; | |
9 float *buffer = (float *) outputBuffer; | |
10 | |
11 if ( status ) | |
12 std::cout << "Stream underflow detected!" << std::endl; | |
13 | |
14 if (!buffer) | |
15 return 0; | |
16 | |
17 // Write interleaved audio data. | |
18 static int t = 0; | |
19 for ( i=0; i<bufferFrames/2; i++ ) { | |
20 for ( j=0; j<2; j++ ) { | |
21 *buffer++ = 0; // 0.25*cosf((t/(float)1000)); | |
22 | |
23 } | |
24 if (++t > 1000) t = 0; | |
25 } | |
26 | |
27 return 0; | |
28 } | |
29 | |
30 int main() { | |
31 RtAudio audio; | |
32 | |
33 // Determine the number of devices available | |
34 unsigned int devices = audio.getDeviceCount(); | |
35 std::cout << devices << " devices found\n"; | |
36 | |
37 // Scan through devices for various capabilities | |
38 RtAudio::DeviceInfo info; | |
39 for ( unsigned int i=0; i<devices; i++ ) { | |
40 | |
41 info = audio.getDeviceInfo( i ); | |
42 | |
43 if ( info.probed == true ) { | |
44 // Print, for example, the maximum number of output channels for each device | |
45 std::cout << "device: #" << i << " - " << info.name << "\n"; | |
46 std::cout << " output channels: " << info.outputChannels << "\n"; | |
47 std::cout << " input channels: " << info.inputChannels << "\n"; | |
48 std::cout << " duplex channels: " << info.duplexChannels << "\n"; | |
49 std::cout << " default input/output: " << info.isDefaultInput << " / " << info.isDefaultOutput << "\n"; | |
50 | |
51 std::cout << " sample rates:\n"; | |
52 for (std::vector<unsigned int>::iterator i = info.sampleRates.begin(); i != info.sampleRates.end(); i++) { | |
53 std::cout << " " << *i << "\n"; | |
54 } | |
55 std::cout << " data formats:\n"; | |
56 if (info.nativeFormats & RTAUDIO_SINT8) std::cout << " signed 8-bit\n"; | |
57 if (info.nativeFormats & RTAUDIO_SINT16) std::cout << " signed 16-bit\n"; | |
58 if (info.nativeFormats & RTAUDIO_SINT24) std::cout << " signed 24-bit\n"; | |
59 if (info.nativeFormats & RTAUDIO_SINT32) std::cout << " signed 32-bit\n"; | |
60 if (info.nativeFormats & RTAUDIO_FLOAT32) std::cout << " 32-bit float [-1,1]\n"; | |
61 if (info.nativeFormats & RTAUDIO_FLOAT64) std::cout << " 64-bit float [-1,1]\n"; | |
62 } | |
63 else | |
64 std::cout << "device: #" << i << " - not probed\n"; | |
65 } | |
66 | |
67 RtAudio::StreamParameters oparam; | |
68 oparam.deviceId = audio.getDefaultOutputDevice(); | |
69 oparam.nChannels = 1; | |
70 oparam.firstChannel = 0; | |
71 | |
72 RtAudio::StreamParameters iparam; | |
73 iparam.deviceId = audio.getDefaultInputDevice(); | |
74 iparam.nChannels = 1; | |
75 iparam.firstChannel = 0; | |
76 | |
77 | |
78 unsigned int sampleRate = 44100; | |
79 unsigned int bufferFrames = 256; // 256 sample frames | |
80 | |
81 RtAudio::StreamOptions options; | |
82 options.flags = 0; | |
83 options.numberOfBuffers = 2; | |
84 options.streamName = "test"; | |
85 | |
86 | |
87 try { | |
88 audio.openStream( &oparam, &iparam, RTAUDIO_FLOAT32, | |
89 sampleRate, &bufferFrames, &myCallback, (void*) 0, &options ); | |
90 audio.startStream(); | |
91 } | |
92 catch ( RtError& e ) { | |
93 std::cout << '\n' << e.getMessage() << '\n' << std::endl; | |
94 exit( EXIT_FAILURE ); | |
95 } | |
96 | |
97 char input; | |
98 std::cout << "\nPlaying ... press <enter> to quit.\n"; | |
99 std::cin.get( input ); | |
100 | |
101 try { | |
102 // Stop the stream | |
103 audio.stopStream(); | |
104 } | |
105 catch (RtError& e) { | |
106 e.printMessage(); | |
107 } | |
108 | |
109 if ( audio.isStreamOpen() ) | |
110 audio.closeStream(); | |
111 | |
112 return EXIT_SUCCESS; | |
113 } |