39 #include "com_portaudio_BlockingStream.h"
41 #include "jpa_tools.h"
55 JNIEXPORT jint JNICALL Java_com_portaudio_BlockingStream_getReadAvailable
56 (JNIEnv *env, jobject blockingStream)
58 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
59 if( stream == NULL )
return 0;
68 JNIEXPORT jint JNICALL Java_com_portaudio_BlockingStream_getWriteAvailable
69 (JNIEnv *env, jobject blockingStream)
71 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
72 if( stream == NULL )
return 0;
82 JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_writeFloats
83 (JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
87 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
90 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
91 "null stream buffer");
94 carr = (*env)->GetFloatArrayElements(env, buffer, NULL);
97 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
98 "invalid stream buffer");
102 (*env)->ReleaseFloatArrayElements(env, buffer, carr, 0);
103 if( err == paOutputUnderflowed )
109 jpa_CheckError( env, err );
119 JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_readFloats
120 (JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
124 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
127 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
128 "null stream buffer");
131 carr = (*env)->GetFloatArrayElements(env, buffer, NULL);
134 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
135 "invalid stream buffer");
139 (*env)->ReleaseFloatArrayElements(env, buffer, carr, 0);
140 if( err == paInputOverflowed )
146 jpa_CheckError( env, err );
156 JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_writeShorts
157 (JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
161 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
164 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
165 "null stream buffer");
168 carr = (*env)->GetShortArrayElements(env, buffer, NULL);
171 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
172 "invalid stream buffer");
176 (*env)->ReleaseShortArrayElements(env, buffer, carr, 0);
177 if( err == paOutputUnderflowed )
183 jpa_CheckError( env, err );
193 JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_readShorts
194 (JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
198 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
201 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
202 "null stream buffer");
205 carr = (*env)->GetShortArrayElements(env, buffer, NULL);
208 (*env)->ThrowNew( env, (*env)->FindClass(env,
"java/lang/RuntimeException"),
209 "invalid stream buffer");
213 (*env)->ReleaseShortArrayElements(env, buffer, carr, 0);
214 if( err == paInputOverflowed )
220 jpa_CheckError( env, err );
230 JNIEXPORT
void JNICALL Java_com_portaudio_BlockingStream_start
231 (JNIEnv *env, jobject blockingStream )
233 PaStream *stream = jpa_GetStreamPointer( env, blockingStream );
235 jpa_CheckError( env, err );
243 JNIEXPORT
void JNICALL Java_com_portaudio_BlockingStream_stop
244 (JNIEnv *env, jobject blockingStream )
246 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
248 jpa_CheckError( env, err );
255 JNIEXPORT
void JNICALL Java_com_portaudio_BlockingStream_abort
256 (JNIEnv *env, jobject blockingStream )
258 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
260 jpa_CheckError( env, err );
268 JNIEXPORT
void JNICALL Java_com_portaudio_BlockingStream_close
269 (JNIEnv *env, jobject blockingStream )
272 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
276 jpa_CheckError( env, err );
277 cls = (*env)->GetObjectClass(env, blockingStream);
278 jpa_SetLongField( env, cls, blockingStream,
"nativeStream", (jlong) 0 );
287 JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_isStopped
288 (JNIEnv *env, jobject blockingStream )
291 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
292 if( stream == NULL )
return 1;
294 return (jpa_CheckError( env, err ) > 0);
301 JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_isActive
302 (JNIEnv *env, jobject blockingStream )
305 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
306 if( stream == NULL )
return 0;
308 return (jpa_CheckError( env, err ) > 0);
317 JNIEXPORT jdouble JNICALL Java_com_portaudio_BlockingStream_getTime
318 (JNIEnv *env, jobject blockingStream )
320 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
321 if( stream == NULL )
return 0.0;
331 JNIEXPORT
void JNICALL Java_com_portaudio_BlockingStream_getInfo
332 (JNIEnv *env, jobject blockingStream, jobject streamInfo)
335 PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
337 if( streamInfo == NULL )
339 jpa_ThrowError( env,
"Invalid stream." );
344 jclass cls = (*env)->GetObjectClass(env, streamInfo);
346 jpa_SetIntField( env, cls, streamInfo,
"structVersion", info->
structVersion );
347 jpa_SetDoubleField( env, cls, streamInfo,
"inputLatency", info->
inputLatency );
348 jpa_SetDoubleField( env, cls, streamInfo,
"outputLatency", info->
outputLatency );
349 jpa_SetDoubleField( env, cls, streamInfo,
"sampleRate", info->
sampleRate );