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