📄 org_tritonus_lowlevel_alsa_alsapcm.c
字号:
* Method: getInfo * Signature: ([ILjava/lang/String;)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_getInfo(JNIEnv *env, jobject obj, jintArray anValues, jobjectArray astrValues){ jint* values = NULL; jstring strValue; int nLength; snd_pcm_info_t pcmInfo; snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn; memset(&pcmInfo, 0, sizeof(pcmInfo)); nReturn = snd_pcm_info(handle, &pcmInfo); if (nReturn < 0) { throwRuntimeException(env, "snd_pcm_info failed"); } nLength = (*env)->GetArrayLength(env, anValues); if (nLength < 4) { throwRuntimeException(env, "array does not have enough elements (4 required)"); } values = (*env)->GetIntArrayElements(env, anValues, NULL); if (values == NULL) { throwRuntimeException(env, "GetIntArrayElements failed"); } values[0] = pcmInfo.type; values[1] = pcmInfo.flags; values[2] = pcmInfo.playback; values[3] = pcmInfo.capture; (*env)->ReleaseIntArrayElements(env, anValues, values, 0); nLength = (*env)->GetArrayLength(env, astrValues); if (nLength < 2) { throwRuntimeException(env, "array does not have enough elements (2 required)"); } strValue = (*env)->NewStringUTF(env, pcmInfo.id); if (strValue == NULL) { throwRuntimeException(env, "NewStringUTF() failed"); } (*env)->SetObjectArrayElement(env, astrValues, 0, strValue); strValue = (*env)->NewStringUTF(env, pcmInfo.name); if (strValue == NULL) { throwRuntimeException(env, "NewStringUTF() failed"); } (*env)->SetObjectArrayElement(env, astrValues, 1, strValue); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: getTransferSize * Signature: (I)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_getTransferSize(JNIEnv *env, jobject obj, jint nChannel){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_transfer_size(handle, nChannel); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: goCapture * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_goCapture(JNIEnv *env, jobject obj){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_capture_go(handle); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: goChannel * Signature: (I)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_goChannel(JNIEnv *env, jobject obj, jint nChannel){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_channel_go(handle, nChannel); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: goPlayback * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_goPlayback(JNIEnv *env, jobject obj){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_playback_go(handle); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: goSync * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_goSync(JNIEnv *env, jobject obj){ // TODO: snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_close(handle); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: open * Signature: (III)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_open__III(JNIEnv *env, jobject obj, jint nCard, jint nDevice, jint nMode){ snd_pcm_t* handle; int nReturn = snd_pcm_open(&handle, nCard, nDevice, nMode); printf("mode: %d\n", (int) nMode); printf("handle: %p\n", handle); if (nReturn == 0) { setNativeHandle(env, obj, handle); } else { printf("org_tritonus_lowlevel_alsa_AlsaPcm.open(): returns %d\n", nReturn); } return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: open * Signature: (IIII)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_open__IIII(JNIEnv *env, jobject obj, jint nCard, jint nDevice, jint nSubdevice, jint nMode){ snd_pcm_t* handle; int nReturn = snd_pcm_open_subdevice(&handle, nCard, nDevice, nSubdevice, nMode); if (nReturn == 0) { setNativeHandle(env, obj, handle); } else { printf("org_tritonus_lowlevel_alsa_AlsaPcm.open(): returns %d\n", nReturn); } return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: prepareCapture * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_prepareCapture(JNIEnv *env, jobject obj){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_capture_prepare(handle); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: prepareChannel * Signature: (I)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_prepareChannel(JNIEnv *env, jobject obj, jint nChannel){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_channel_prepare(handle, nChannel); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: preparePlayback * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_preparePlayback(JNIEnv *env, jobject obj){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_playback_prepare(handle); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: read * Signature: ([BII)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_read(JNIEnv *env, jobject obj, jbyteArray abData, jint nOffset, jint nLength){ snd_pcm_t* handle = getNativeHandle(env, obj); int nBytesRead; jbyte buffer[nLength]; printf("handle: %p\n", handle); printf("buffer: %p\n", buffer); printf("length: %d\n", (int) nLength); printf("fd: %d\n", snd_pcm_file_descriptor(handle, SND_PCM_CHANNEL_CAPTURE)); errno = 0; nBytesRead = snd_pcm_read(handle, buffer, nLength); perror("abc"); if (nBytesRead > 0) { (*env)->SetByteArrayRegion(env, abData, nOffset, nBytesRead, buffer); } if (DEBUG) { printf("Java_org_tritonus_lowlevel_alsa_AlsaPcm_read: Length: %d\n", (int) nLength); printf("Java_org_tritonus_lowlevel_alsa_AlsaPcm_read: Read: %d\n", nBytesRead); } return nBytesRead;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: setChannelParams * Signature: (IIZIIIIIIZZIII)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_setChannelParams(JNIEnv *env, jobject obj, jint nChannel, jint nMode, jboolean bInterleave, jint nFormat, jint nRate, jint nVoices, jint nSpecial, jint nStartMode, jint nStopMode, jboolean bTime, jboolean bUstTime, jint nQueueOrFragmentSize, jint nMin, jint nMax){ snd_pcm_t* handle = getNativeHandle(env, obj); snd_pcm_channel_params_t params; int nReturn; memset(¶ms, 0, sizeof(params)); params.channel = nChannel; params.mode = nMode; params.format.interleave = bInterleave; params.format.format = nFormat; params.format.rate = nRate; params.format.voices = nVoices; params.format.special = nSpecial; // params.digital. ... = ...; params.start_mode = nStartMode; params.stop_mode = nStopMode; params.time = bTime; params.ust_time = bUstTime; if (nMode == SND_PCM_MODE_STREAM) { params.buf.stream.queue_size = nQueueOrFragmentSize; params.buf.stream.fill = nMin; params.buf.stream.max_fill = nMax; } else { params.buf.block.frag_size = nQueueOrFragmentSize; params.buf.block.frags_min = nMin; params.buf.block.frags_max = nMax; } nReturn = snd_pcm_channel_params(handle, ¶ms); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: setNonblockMode * Signature: (I)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_setNonblockMode(JNIEnv *env, jobject obj, jint nMode){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_nonblock_mode(handle, nMode); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: setPlaybackPause * Signature: (Z)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_setPlaybackPause(JNIEnv *env, jobject obj, jboolean bEnable){ snd_pcm_t* handle = getNativeHandle(env, obj); int nReturn = snd_pcm_playback_pause(handle, bEnable); return nReturn;}/* * Class: org_tritonus_lowlevel_alsa_AlsaPcm * Method: write * Signature: ([BII)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaPcm_write(JNIEnv *env, jobject obj, jbyteArray abData, jint nOffset, jint nLength){ snd_pcm_t* handle = getNativeHandle(env, obj); signed char* data = (*env)->GetByteArrayElements(env, abData, NULL); int nWritten = snd_pcm_write(handle, data + nOffset, nLength); (*env)->ReleaseByteArrayElements(env, abData, data, JNI_ABORT); if (DEBUG) { printf("Java_org_tritonus_lowlevel_alsa_AlsaPcm_write: Length: %d\n", (int) nLength); printf("Java_org_tritonus_lowlevel_alsa_AlsaPcm_write: Written: %d\n", nWritten); } return nWritten;}/*** org_tritonus_lowlevel_alsa_AlsaPcm.c ***/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -