mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-20 02:52:00 -05:00
101 lines
2.1 KiB
C++
101 lines
2.1 KiB
C++
|
#include "portaudiocpp/BlockingStream.hxx"
|
||
|
|
||
|
#include "portaudio.h"
|
||
|
|
||
|
#include "portaudiocpp/StreamParameters.hxx"
|
||
|
#include "portaudiocpp/Exception.hxx"
|
||
|
|
||
|
namespace portaudio
|
||
|
{
|
||
|
|
||
|
// --------------------------------------------------------------------------------------
|
||
|
|
||
|
BlockingStream::BlockingStream()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
BlockingStream::BlockingStream(const StreamParameters ¶meters)
|
||
|
{
|
||
|
open(parameters);
|
||
|
}
|
||
|
|
||
|
BlockingStream::~BlockingStream()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
close();
|
||
|
}
|
||
|
catch (...)
|
||
|
{
|
||
|
// ignore all errors
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------------------
|
||
|
|
||
|
void BlockingStream::open(const StreamParameters ¶meters)
|
||
|
{
|
||
|
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
|
||
|
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), NULL, NULL);
|
||
|
|
||
|
if (err != paNoError)
|
||
|
{
|
||
|
throw PaException(err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------------------
|
||
|
|
||
|
void BlockingStream::read(void *buffer, unsigned long numFrames)
|
||
|
{
|
||
|
PaError err = Pa_ReadStream(stream_, buffer, numFrames);
|
||
|
|
||
|
if (err != paNoError)
|
||
|
{
|
||
|
throw PaException(err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void BlockingStream::write(const void *buffer, unsigned long numFrames)
|
||
|
{
|
||
|
PaError err = Pa_WriteStream(stream_, buffer, numFrames);
|
||
|
|
||
|
if (err != paNoError)
|
||
|
{
|
||
|
throw PaException(err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------------------
|
||
|
|
||
|
signed long BlockingStream::availableReadSize() const
|
||
|
{
|
||
|
signed long avail = Pa_GetStreamReadAvailable(stream_);
|
||
|
|
||
|
if (avail < 0)
|
||
|
{
|
||
|
throw PaException(avail);
|
||
|
}
|
||
|
|
||
|
return avail;
|
||
|
}
|
||
|
|
||
|
signed long BlockingStream::availableWriteSize() const
|
||
|
{
|
||
|
signed long avail = Pa_GetStreamWriteAvailable(stream_);
|
||
|
|
||
|
if (avail < 0)
|
||
|
{
|
||
|
throw PaException(avail);
|
||
|
}
|
||
|
|
||
|
return avail;
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------------------
|
||
|
|
||
|
} // portaudio
|
||
|
|
||
|
|
||
|
|