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