annotate src/portaudio/bindings/cpp/source/portaudiocpp/Stream.cxx @ 107:71c914cf6201

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