Mercurial > hg > sv-dependency-builds
comparison src/portaudio/bindings/cpp/source/portaudiocpp/Stream.cxx @ 4:e13257ea84a4
Add bzip2, zlib, liblo, portaudio sources
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 13:59:52 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:6c505a35919a | 4:e13257ea84a4 |
---|---|
1 #include "portaudiocpp/Stream.hxx" | |
2 | |
3 #include <cstddef> | |
4 | |
5 #include "portaudiocpp/Exception.hxx" | |
6 #include "portaudiocpp/System.hxx" | |
7 | |
8 namespace portaudio | |
9 { | |
10 | |
11 // ----------------------------------------------------------------------------------- | |
12 | |
13 Stream::Stream() : stream_(NULL) | |
14 { | |
15 } | |
16 | |
17 Stream::~Stream() | |
18 { | |
19 // (can't call close here, | |
20 // the derived class should atleast call | |
21 // close() in it's deconstructor) | |
22 } | |
23 | |
24 // ----------------------------------------------------------------------------------- | |
25 | |
26 ////// | |
27 /// Closes the Stream if it's open, else does nothing. | |
28 ////// | |
29 void Stream::close() | |
30 { | |
31 if (isOpen() && System::exists()) | |
32 { | |
33 PaError err = Pa_CloseStream(stream_); | |
34 stream_ = NULL; | |
35 | |
36 if (err != paNoError) | |
37 throw PaException(err); | |
38 } | |
39 } | |
40 | |
41 ////// | |
42 /// Returns true if the Stream is open. | |
43 ////// | |
44 bool Stream::isOpen() const | |
45 { | |
46 return (stream_ != NULL); | |
47 } | |
48 | |
49 // ----------------------------------------------------------------------------------- | |
50 | |
51 void Stream::setStreamFinishedCallback(PaStreamFinishedCallback *callback) | |
52 { | |
53 PaError err = Pa_SetStreamFinishedCallback(stream_, callback); | |
54 | |
55 if (err != paNoError) | |
56 throw PaException(err); | |
57 } | |
58 | |
59 // ----------------------------------------------------------------------------------- | |
60 | |
61 void Stream::start() | |
62 { | |
63 PaError err = Pa_StartStream(stream_); | |
64 | |
65 if (err != paNoError) | |
66 throw PaException(err); | |
67 } | |
68 | |
69 void Stream::stop() | |
70 { | |
71 PaError err = Pa_StopStream(stream_); | |
72 | |
73 if (err != paNoError) | |
74 throw PaException(err); | |
75 } | |
76 | |
77 void Stream::abort() | |
78 { | |
79 PaError err = Pa_AbortStream(stream_); | |
80 | |
81 if (err != paNoError) | |
82 throw PaException(err); | |
83 } | |
84 | |
85 bool Stream::isStopped() const | |
86 { | |
87 PaError ret = Pa_IsStreamStopped(stream_); | |
88 | |
89 if (ret < 0) | |
90 throw PaException(ret); | |
91 | |
92 return (ret == 1); | |
93 } | |
94 | |
95 bool Stream::isActive() const | |
96 { | |
97 PaError ret = Pa_IsStreamActive(stream_); | |
98 | |
99 if (ret < 0) | |
100 throw PaException(ret); | |
101 | |
102 return (ret == 1); | |
103 } | |
104 | |
105 // ----------------------------------------------------------------------------------- | |
106 | |
107 ////// | |
108 /// Returns the best known input latency for the Stream. This value may differ from the | |
109 /// suggested input latency set in the StreamParameters. Includes all sources of | |
110 /// latency known to PortAudio such as internal buffering, and Host API reported latency. | |
111 /// Doesn't include any estimates of unknown latency. | |
112 ////// | |
113 PaTime Stream::inputLatency() const | |
114 { | |
115 const PaStreamInfo *info = Pa_GetStreamInfo(stream_); | |
116 if (info == NULL) | |
117 { | |
118 throw PaException(paInternalError); | |
119 return PaTime(0.0); | |
120 } | |
121 | |
122 return info->inputLatency; | |
123 } | |
124 | |
125 ////// | |
126 /// Returns the best known output latency for the Stream. This value may differ from the | |
127 /// suggested output latency set in the StreamParameters. Includes all sources of | |
128 /// latency known to PortAudio such as internal buffering, and Host API reported latency. | |
129 /// Doesn't include any estimates of unknown latency. | |
130 ////// | |
131 PaTime Stream::outputLatency() const | |
132 { | |
133 const PaStreamInfo *info = Pa_GetStreamInfo(stream_); | |
134 if (info == NULL) | |
135 { | |
136 throw PaException(paInternalError); | |
137 return PaTime(0.0); | |
138 } | |
139 | |
140 return info->outputLatency; | |
141 } | |
142 | |
143 ////// | |
144 /// Returns the sample rate of the Stream. Usually this will be the | |
145 /// best known estimate of the used sample rate. For instance when opening a | |
146 /// Stream setting 44100.0 Hz in the StreamParameters, the actual sample | |
147 /// rate might be something like 44103.2 Hz (due to imperfections in the | |
148 /// sound card hardware). | |
149 ////// | |
150 double Stream::sampleRate() const | |
151 { | |
152 const PaStreamInfo *info = Pa_GetStreamInfo(stream_); | |
153 if (info == NULL) | |
154 { | |
155 throw PaException(paInternalError); | |
156 return 0.0; | |
157 } | |
158 | |
159 return info->sampleRate; | |
160 } | |
161 | |
162 // ----------------------------------------------------------------------------------- | |
163 | |
164 PaTime Stream::time() const | |
165 { | |
166 return Pa_GetStreamTime(stream_); | |
167 } | |
168 | |
169 // ----------------------------------------------------------------------------------- | |
170 | |
171 ////// | |
172 /// Accessor (const) for PortAudio PaStream pointer, useful for interfacing with | |
173 /// PortAudio add-ons such as PortMixer for instance. Normally accessing this | |
174 /// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's | |
175 /// functionality. | |
176 ////// | |
177 const PaStream *Stream::paStream() const | |
178 { | |
179 return stream_; | |
180 } | |
181 | |
182 ////// | |
183 /// Accessor (non-const) for PortAudio PaStream pointer, useful for interfacing with | |
184 /// PortAudio add-ons such as PortMixer for instance. Normally accessing this | |
185 /// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's | |
186 /// functionality. | |
187 ////// | |
188 PaStream *Stream::paStream() | |
189 { | |
190 return stream_; | |
191 } | |
192 | |
193 // ----------------------------------------------------------------------------------- | |
194 | |
195 } // namespace portaudio |