annotate src/portaudio_20161030/bindings/cpp/source/portaudiocpp/Stream.cxx @ 140:59a8758c56b1

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