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