⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 org_tritonus_lowlevel_alsa_alsapcm.c

📁 java处理声音文件
💻 C
📖 第 1 页 / 共 2 页
字号:
 * 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(&params, 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, &params);	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 + -