Mercurial > hg > sv-dependency-builds
annotate src/portaudio_20161030/bindings/cpp/source/portaudiocpp/BlockingStream.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/BlockingStream.hxx" |
cannam@140 | 2 |
cannam@140 | 3 #include "portaudio.h" |
cannam@140 | 4 |
cannam@140 | 5 #include "portaudiocpp/StreamParameters.hxx" |
cannam@140 | 6 #include "portaudiocpp/Exception.hxx" |
cannam@140 | 7 |
cannam@140 | 8 namespace portaudio |
cannam@140 | 9 { |
cannam@140 | 10 |
cannam@140 | 11 // -------------------------------------------------------------------------------------- |
cannam@140 | 12 |
cannam@140 | 13 BlockingStream::BlockingStream() |
cannam@140 | 14 { |
cannam@140 | 15 } |
cannam@140 | 16 |
cannam@140 | 17 BlockingStream::BlockingStream(const StreamParameters ¶meters) |
cannam@140 | 18 { |
cannam@140 | 19 open(parameters); |
cannam@140 | 20 } |
cannam@140 | 21 |
cannam@140 | 22 BlockingStream::~BlockingStream() |
cannam@140 | 23 { |
cannam@140 | 24 try |
cannam@140 | 25 { |
cannam@140 | 26 close(); |
cannam@140 | 27 } |
cannam@140 | 28 catch (...) |
cannam@140 | 29 { |
cannam@140 | 30 // ignore all errors |
cannam@140 | 31 } |
cannam@140 | 32 } |
cannam@140 | 33 |
cannam@140 | 34 // -------------------------------------------------------------------------------------- |
cannam@140 | 35 |
cannam@140 | 36 void BlockingStream::open(const StreamParameters ¶meters) |
cannam@140 | 37 { |
cannam@140 | 38 PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(), |
cannam@140 | 39 parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), NULL, NULL); |
cannam@140 | 40 |
cannam@140 | 41 if (err != paNoError) |
cannam@140 | 42 { |
cannam@140 | 43 throw PaException(err); |
cannam@140 | 44 } |
cannam@140 | 45 } |
cannam@140 | 46 |
cannam@140 | 47 // -------------------------------------------------------------------------------------- |
cannam@140 | 48 |
cannam@140 | 49 void BlockingStream::read(void *buffer, unsigned long numFrames) |
cannam@140 | 50 { |
cannam@140 | 51 PaError err = Pa_ReadStream(stream_, buffer, numFrames); |
cannam@140 | 52 |
cannam@140 | 53 if (err != paNoError) |
cannam@140 | 54 { |
cannam@140 | 55 throw PaException(err); |
cannam@140 | 56 } |
cannam@140 | 57 } |
cannam@140 | 58 |
cannam@140 | 59 void BlockingStream::write(const void *buffer, unsigned long numFrames) |
cannam@140 | 60 { |
cannam@140 | 61 PaError err = Pa_WriteStream(stream_, buffer, numFrames); |
cannam@140 | 62 |
cannam@140 | 63 if (err != paNoError) |
cannam@140 | 64 { |
cannam@140 | 65 throw PaException(err); |
cannam@140 | 66 } |
cannam@140 | 67 } |
cannam@140 | 68 |
cannam@140 | 69 // -------------------------------------------------------------------------------------- |
cannam@140 | 70 |
cannam@140 | 71 signed long BlockingStream::availableReadSize() const |
cannam@140 | 72 { |
cannam@140 | 73 signed long avail = Pa_GetStreamReadAvailable(stream_); |
cannam@140 | 74 |
cannam@140 | 75 if (avail < 0) |
cannam@140 | 76 { |
cannam@140 | 77 throw PaException(avail); |
cannam@140 | 78 } |
cannam@140 | 79 |
cannam@140 | 80 return avail; |
cannam@140 | 81 } |
cannam@140 | 82 |
cannam@140 | 83 signed long BlockingStream::availableWriteSize() const |
cannam@140 | 84 { |
cannam@140 | 85 signed long avail = Pa_GetStreamWriteAvailable(stream_); |
cannam@140 | 86 |
cannam@140 | 87 if (avail < 0) |
cannam@140 | 88 { |
cannam@140 | 89 throw PaException(avail); |
cannam@140 | 90 } |
cannam@140 | 91 |
cannam@140 | 92 return avail; |
cannam@140 | 93 } |
cannam@140 | 94 |
cannam@140 | 95 // -------------------------------------------------------------------------------------- |
cannam@140 | 96 |
cannam@140 | 97 } // portaudio |
cannam@140 | 98 |
cannam@140 | 99 |
cannam@140 | 100 |