summaryrefslogtreecommitdiff
path: root/portaudio/bindings/java/c/src/com_portaudio_PortAudio.c
diff options
context:
space:
mode:
Diffstat (limited to 'portaudio/bindings/java/c/src/com_portaudio_PortAudio.c')
-rw-r--r--portaudio/bindings/java/c/src/com_portaudio_PortAudio.c279
1 files changed, 279 insertions, 0 deletions
diff --git a/portaudio/bindings/java/c/src/com_portaudio_PortAudio.c b/portaudio/bindings/java/c/src/com_portaudio_PortAudio.c
new file mode 100644
index 0000000..77c42eb
--- /dev/null
+++ b/portaudio/bindings/java/c/src/com_portaudio_PortAudio.c
@@ -0,0 +1,279 @@
+/*
+ * Portable Audio I/O Library
+ * Java Binding for PortAudio
+ *
+ * Based on the Open Source API proposed by Ross Bencina
+ * Copyright (c) 2008 Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however,
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
+ * license above.
+ */
+
+#include "com_portaudio_PortAudio.h"
+#include "portaudio.h"
+#include "jpa_tools.h"
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getVersion
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getVersion
+ (JNIEnv *env, jclass clazz)
+{
+ return Pa_GetVersion();
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getVersionText
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_portaudio_PortAudio_getVersionText
+ (JNIEnv *env, jclass clazz)
+{
+ return (*env)->NewStringUTF(env, Pa_GetVersionText() );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: initialize
+ * Signature: ()I
+ */
+JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_initialize
+ (JNIEnv *env, jclass clazz)
+{
+ PaError err = Pa_Initialize();
+ jpa_CheckError( env, err );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: terminate
+ * Signature: ()I
+ */
+JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_terminate
+ (JNIEnv *env, jclass clazz)
+{
+ PaError err = Pa_Terminate();
+ jpa_CheckError( env, err );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getDeviceCount
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDeviceCount
+ (JNIEnv *env, jclass clazz)
+{
+ jint count = Pa_GetDeviceCount();
+ return jpa_CheckError( env, count );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getDeviceInfo
+ * Signature: (ILcom/portaudio/DeviceInfo;)I
+ */
+JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_getDeviceInfo
+ (JNIEnv *env, jclass clazz, jint index, jobject deviceInfo)
+{
+ const PaDeviceInfo *info;
+ /* Get a reference to obj's class */
+ jclass cls = (*env)->GetObjectClass(env, deviceInfo);
+
+ info = Pa_GetDeviceInfo( index );
+ if( info == NULL )
+ {
+ jpa_ThrowError( env, "Pa_GetDeviceInfo returned NULL." );
+ }
+ else
+ {
+ jpa_SetStringField( env, cls, deviceInfo, "name", info->name );
+ jpa_SetIntField( env, cls, deviceInfo, "maxInputChannels", info->maxInputChannels );
+ jpa_SetIntField( env, cls, deviceInfo, "maxOutputChannels", info->maxOutputChannels );
+ jpa_SetIntField( env, cls, deviceInfo, "hostApi", info->hostApi );
+ jpa_SetDoubleField( env, cls, deviceInfo, "defaultSampleRate", info->defaultSampleRate );
+ jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowInputLatency", info->defaultLowInputLatency );
+ jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowInputLatency", info->defaultHighInputLatency );
+ jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowOutputLatency", info->defaultLowOutputLatency );
+ jpa_SetDoubleField( env, cls, deviceInfo, "defaultHighOutputLatency", info->defaultHighOutputLatency );
+ }
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: geHostApiCount
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getHostApiCount
+ (JNIEnv *env, jclass clazz)
+{
+ jint count = Pa_GetHostApiCount();
+ return jpa_CheckError( env, count );
+}
+
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: hostApiTypeIdToHostApiIndex
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_hostApiTypeIdToHostApiIndex
+ (JNIEnv *env, jclass clazz, jint hostApiType)
+{
+ return Pa_HostApiTypeIdToHostApiIndex( (PaHostApiTypeId) hostApiType );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: hostApiDeviceIndexToDeviceIndex
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_hostApiDeviceIndexToDeviceIndex
+ (JNIEnv *env, jclass clazz, jint hostApiIndex, jint apiDeviceIndex)
+{
+ return Pa_HostApiDeviceIndexToDeviceIndex( hostApiIndex, apiDeviceIndex );
+}
+
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getHostApiInfo
+ * Signature: (ILcom/portaudio/HostApiInfo;)I
+ */
+JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_getHostApiInfo
+ (JNIEnv *env, jclass clazz, jint index, jobject hostApiInfo)
+{
+ const PaHostApiInfo *info;
+ /* Get a reference to obj's class */
+ jclass cls = (*env)->GetObjectClass(env, hostApiInfo);
+
+ info = Pa_GetHostApiInfo( index );
+ if( info == NULL )
+ {
+ jpa_ThrowError( env, "Pa_GetHostApiInfo returned NULL." );
+ }
+ else
+ {
+ jpa_SetIntField( env, cls, hostApiInfo, "version", info->structVersion );
+ jpa_SetIntField( env, cls, hostApiInfo, "type", info->type );
+ jpa_SetStringField( env, cls, hostApiInfo, "name", info->name );
+ jpa_SetIntField( env, cls, hostApiInfo, "deviceCount", info->deviceCount );
+ jpa_SetIntField( env, cls, hostApiInfo, "defaultInputDevice", info->defaultInputDevice );
+ jpa_SetIntField( env, cls, hostApiInfo, "defaultOutputDevice", info->defaultOutputDevice );
+ }
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getDefaultInputDevice
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultInputDevice
+ (JNIEnv *env, jclass clazz)
+{
+ jint deviceId = Pa_GetDefaultInputDevice();
+ return jpa_CheckError( env, deviceId );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getDefaultOutputDevice
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultOutputDevice
+ (JNIEnv *env, jclass clazz)
+{
+ jint deviceId = Pa_GetDefaultOutputDevice();
+ return jpa_CheckError( env, deviceId );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: getDefaultHostApi
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultHostApi
+ (JNIEnv *env, jclass clazz)
+{
+ jint deviceId = Pa_GetDefaultHostApi();
+ return jpa_CheckError( env, deviceId );
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: isFormatSupported
+ * Signature: (Lcom/portaudio/StreamParameters;Lcom/portaudio/StreamParameters;I)I
+ */
+JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_isFormatSupported
+ (JNIEnv *env, jclass clazz, jobject inParams, jobject outParams, jint sampleRate )
+{
+ PaStreamParameters myInParams, *paInParams;
+ PaStreamParameters myOutParams, *paOutParams;
+
+ paInParams = jpa_FillStreamParameters( env, inParams, &myInParams );
+ paOutParams = jpa_FillStreamParameters( env, outParams, &myOutParams );
+
+ return Pa_IsFormatSupported( paInParams, paOutParams, sampleRate );
+
+}
+
+/*
+ * Class: com_portaudio_PortAudio
+ * Method: openStream
+ * Signature: (Lcom/portaudio/BlockingStream;Lcom/portaudio/StreamParameters;Lcom/portaudio/StreamParameters;III)I
+ */
+JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_openStream
+ (JNIEnv *env, jclass clazz, jobject blockingStream, jobject inParams, jobject outParams, jint sampleRate, jint framesPerBuffer, jint flags )
+{
+ int err;
+ PaStreamParameters myInParams, *paInParams;
+ PaStreamParameters myOutParams, *paOutParams;
+ PaStream *stream;
+
+ paInParams = jpa_FillStreamParameters( env, inParams, &myInParams );
+ paOutParams = jpa_FillStreamParameters( env, outParams, &myOutParams );
+ err = Pa_OpenStream( &stream, paInParams, paOutParams, sampleRate, framesPerBuffer, flags, NULL, NULL );
+ if( jpa_CheckError( env, err ) == 0 )
+ {
+ jclass cls = (*env)->GetObjectClass(env, blockingStream);
+ jpa_SetLongField( env, cls, blockingStream, "nativeStream", (jlong) stream );
+ if( paInParams != NULL )
+ {
+ jpa_SetIntField( env, cls, blockingStream, "inputFormat", paInParams->sampleFormat );
+ }
+ if( paOutParams != NULL )
+ {
+ jpa_SetIntField( env, cls, blockingStream, "outputFormat", paOutParams->sampleFormat );
+ }
+ }
+}