annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/Stream.cxx @ 124:e3d5853d5918

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