Chris@55: #include "portaudiocpp/BlockingStream.hxx" Chris@55: Chris@55: #include "portaudio.h" Chris@55: Chris@55: #include "portaudiocpp/StreamParameters.hxx" Chris@55: #include "portaudiocpp/Exception.hxx" Chris@55: Chris@55: namespace portaudio Chris@55: { Chris@55: Chris@55: // -------------------------------------------------------------------------------------- Chris@55: Chris@55: BlockingStream::BlockingStream() Chris@55: { Chris@55: } Chris@55: Chris@55: BlockingStream::BlockingStream(const StreamParameters ¶meters) Chris@55: { Chris@55: open(parameters); Chris@55: } Chris@55: Chris@55: BlockingStream::~BlockingStream() Chris@55: { Chris@55: try Chris@55: { Chris@55: close(); Chris@55: } Chris@55: catch (...) Chris@55: { Chris@55: // ignore all errors Chris@55: } Chris@55: } Chris@55: Chris@55: // -------------------------------------------------------------------------------------- Chris@55: Chris@55: void BlockingStream::open(const StreamParameters ¶meters) Chris@55: { Chris@55: PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(), Chris@55: parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), NULL, NULL); Chris@55: Chris@55: if (err != paNoError) Chris@55: { Chris@55: throw PaException(err); Chris@55: } Chris@55: } Chris@55: Chris@55: // -------------------------------------------------------------------------------------- Chris@55: Chris@55: void BlockingStream::read(void *buffer, unsigned long numFrames) Chris@55: { Chris@55: PaError err = Pa_ReadStream(stream_, buffer, numFrames); Chris@55: Chris@55: if (err != paNoError) Chris@55: { Chris@55: throw PaException(err); Chris@55: } Chris@55: } Chris@55: Chris@55: void BlockingStream::write(const void *buffer, unsigned long numFrames) Chris@55: { Chris@55: PaError err = Pa_WriteStream(stream_, buffer, numFrames); Chris@55: Chris@55: if (err != paNoError) Chris@55: { Chris@55: throw PaException(err); Chris@55: } Chris@55: } Chris@55: Chris@55: // -------------------------------------------------------------------------------------- Chris@55: Chris@55: signed long BlockingStream::availableReadSize() const Chris@55: { Chris@55: signed long avail = Pa_GetStreamReadAvailable(stream_); Chris@55: Chris@55: if (avail < 0) Chris@55: { Chris@55: throw PaException(avail); Chris@55: } Chris@55: Chris@55: return avail; Chris@55: } Chris@55: Chris@55: signed long BlockingStream::availableWriteSize() const Chris@55: { Chris@55: signed long avail = Pa_GetStreamWriteAvailable(stream_); Chris@55: Chris@55: if (avail < 0) Chris@55: { Chris@55: throw PaException(avail); Chris@55: } Chris@55: Chris@55: return avail; Chris@55: } Chris@55: Chris@55: // -------------------------------------------------------------------------------------- Chris@55: Chris@55: } // portaudio Chris@55: Chris@55: Chris@55: