PortAudio: BlockingStream.java Source File

PortAudio 2.0

- Main Page
- Related Pages
- Modules
- Data Structures
- Files

- File List
- Globals

BlockingStream.java
Go to the documentation of this file.
1 /*
2 * Portable Audio I/O Library
3 * Java Binding for PortAudio
4 *
5 * Based on the Open Source API proposed by Ross Bencina
6 * Copyright (c) 2008 Ross Bencina
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining
9 * a copy of this software and associated documentation files
10 * (the "Software"), to deal in the Software without restriction,
11 * including without limitation the rights to use, copy, modify, merge,
12 * publish, distribute, sublicense, and/or sell copies of the Software,
13 * and to permit persons to whom the Software is furnished to do so,
14 * subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be
17 * included in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
24 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 */
27
28 /*
29 * The text above constitutes the entire PortAudio license; however,
30 * the PortAudio community also makes the following non-binding requests:
31 *
32 * Any person wishing to distribute modifications to the Software is
33 * requested to send the modifications to the original developer so that
34 * they can be incorporated into the canonical version. It is also
35 * requested that these non-binding requests be included along with the
36 * license above.
37 */
38
44 package com.portaudio;
45
59 public class BlockingStream
60 {
61 // nativeStream is only accessed by the native code. It contains a pointer
62 // to a PaStream.
63 private long nativeStream;
64 private int inputFormat = -1;
65 private int outputFormat = -1;
66
67 protected BlockingStream()
68 {
69 }
70
74 public native int getReadAvailable();
75
79 public native int getWriteAvailable();
80
81 private native boolean readFloats( float[] buffer, int numFrames );
82
83 private native boolean writeFloats( float[] buffer, int numFrames );
84
93 public boolean read( float[] buffer, int numFrames )
94 {
95 if( inputFormat != PortAudio.FORMAT_FLOAT_32 )
96 {
97 throw new RuntimeException(
98 "Tried to read float samples from a non float stream." );
99 }
100 return readFloats( buffer, numFrames );
101 }
102
112 public boolean write( float[] buffer, int numFrames )
113 {
114 if( outputFormat != PortAudio.FORMAT_FLOAT_32 )
115 {
116 throw new RuntimeException(
117 "Tried to write float samples to a non float stream." );
118 }
119 return writeFloats( buffer, numFrames );
120 }
121
122 private native boolean readShorts( short[] buffer, int numFrames );
123
124 private native boolean writeShorts( short[] buffer, int numFrames );
125
134 public boolean read( short[] buffer, int numFrames )
135 {
136 if( inputFormat != PortAudio.FORMAT_INT_16 )
137 {
138 throw new RuntimeException(
139 "Tried to read short samples from a non short stream." );
140 }
141 return readShorts( buffer, numFrames );
142 }
143
152 public boolean write( short[] buffer, int numFrames )
153 {
154 if( outputFormat != PortAudio.FORMAT_INT_16 )
155 {
156 throw new RuntimeException(
157 "Tried to write short samples from a non short stream." );
158 }
159 return writeShorts( buffer, numFrames );
160 }
161
165 public native void start();
166
171 public native void stop();
172
176 public native void abort();
177
182 public native void close();
183
184 public native boolean isStopped();
185
186 public native boolean isActive();
187
188 public String toString()
189 {
190 return "BlockingStream: streamPtr = " + Long.toHexString( nativeStream )
191 + ", inFormat = " + inputFormat + ", outFormat = "
192 + outputFormat;
193 }
194
198 public native double getTime();
199
200 private native void getInfo( StreamInfo streamInfo );
201
202 public StreamInfo getInfo()
203 {
204 StreamInfo streamInfo = new StreamInfo();
205 getInfo( streamInfo );
206 return streamInfo;
207 }
208 }