AudioTrack实例代码 C++代码
来源:互联网 发布:linux rpm 路径 编辑:程序博客网 时间:2024/05/22 02:03
char path[] = "/sdcard/testmusic.pcm";
AudioTrack *lpTrack = NULL;
static void audioCallback(int event, void* user, void *info)
{
FILE *fp = (FILE*)user;
if (event == AudioTrack::EVENT_MORE_DATA)
{
// set size to 0 to signal we're not using the callback to write more data
AudioTrack::Buffer* pBuff = (AudioTrack::Buffer*)info;
pBuff->size = 0;
if (feof(fp) == 0)
{
pBuff->size = fread(pBuff->raw, 1, 2048, fp);
}
lpTrack->flush();
}
else if ( event ==AudioTrack::EVENT_LOOP_END )
{
//fclose( fp );
//free(lpTrack);
}
else if (event == AudioTrack::EVENT_MARKER)
{
// audiotrack_callback_cookie *callbackInfo = (audiotrack_callback_cookie *)user;
// JNIEnv *env = AndroidRuntime::getJNIEnv();
// if (user && env) {
// env->CallStaticVoidMethod(
// callbackInfo->audioTrack_class,
// javaAudioTrackFields.postNativeEventInJava,
// callbackInfo->audioTrack_ref, event, 0,0, NULL);
// if (env->ExceptionCheck()) {
// env->ExceptionDescribe();
// env->ExceptionClear();
// }
// }
}
else if (event == AudioTrack::EVENT_NEW_POS)
{
// audiotrack_callback_cookie *callbackInfo = (audiotrack_callback_cookie *)user;
// JNIEnv *env = AndroidRuntime::getJNIEnv();
// if (user && env) {
// env->CallStaticVoidMethod(
// callbackInfo->audioTrack_class,
// javaAudioTrackFields.postNativeEventInJava,
// callbackInfo->audioTrack_ref, event, 0,0, NULL);
// if (env->ExceptionCheck()) {
// env->ExceptionDescribe();
// env->ExceptionClear();
// }
// }
}
}
void Java_com_jqbar_SkiaView_AudioTest(JNIEnv *env, jobject thizz)
{
char buf[4096] = "";
int offset = 0;
int num_read = 0;
FILE *fp = NULL;
fp = fopen(path, "r");;
// fseek(fp, 0, SEEK_END);
// int fileSize = ftell(fp);
// rewind(fp);
lpTrack = new AudioTrack(
AudioSystem::MUSIC,// stream type
44100,
AudioSystem::PCM_16_BIT,// word length, PCM
AudioSystem::CHANNEL_OUT_STEREO,
0, 0, audioCallback, fp, 0 );
lpTrack->initCheck();
lpTrack->setVolume(1.0, 1.0);
lpTrack->start();
}
AudioTrack *lpTrack = NULL;
static void audioCallback(int event, void* user, void *info)
{
FILE *fp = (FILE*)user;
if (event == AudioTrack::EVENT_MORE_DATA)
{
// set size to 0 to signal we're not using the callback to write more data
AudioTrack::Buffer* pBuff = (AudioTrack::Buffer*)info;
pBuff->size = 0;
if (feof(fp) == 0)
{
pBuff->size = fread(pBuff->raw, 1, 2048, fp);
}
lpTrack->flush();
}
else if ( event ==AudioTrack::EVENT_LOOP_END )
{
//fclose( fp );
//free(lpTrack);
}
else if (event == AudioTrack::EVENT_MARKER)
{
// audiotrack_callback_cookie *callbackInfo = (audiotrack_callback_cookie *)user;
// JNIEnv *env = AndroidRuntime::getJNIEnv();
// if (user && env) {
// env->CallStaticVoidMethod(
// callbackInfo->audioTrack_class,
// javaAudioTrackFields.postNativeEventInJava,
// callbackInfo->audioTrack_ref, event, 0,0, NULL);
// if (env->ExceptionCheck()) {
// env->ExceptionDescribe();
// env->ExceptionClear();
// }
// }
}
else if (event == AudioTrack::EVENT_NEW_POS)
{
// audiotrack_callback_cookie *callbackInfo = (audiotrack_callback_cookie *)user;
// JNIEnv *env = AndroidRuntime::getJNIEnv();
// if (user && env) {
// env->CallStaticVoidMethod(
// callbackInfo->audioTrack_class,
// javaAudioTrackFields.postNativeEventInJava,
// callbackInfo->audioTrack_ref, event, 0,0, NULL);
// if (env->ExceptionCheck()) {
// env->ExceptionDescribe();
// env->ExceptionClear();
// }
// }
}
}
void Java_com_jqbar_SkiaView_AudioTest(JNIEnv *env, jobject thizz)
{
char buf[4096] = "";
int offset = 0;
int num_read = 0;
FILE *fp = NULL;
fp = fopen(path, "r");;
// fseek(fp, 0, SEEK_END);
// int fileSize = ftell(fp);
// rewind(fp);
lpTrack = new AudioTrack(
AudioSystem::MUSIC,// stream type
44100,
AudioSystem::PCM_16_BIT,// word length, PCM
AudioSystem::CHANNEL_OUT_STEREO,
0, 0, audioCallback, fp, 0 );
lpTrack->initCheck();
lpTrack->setVolume(1.0, 1.0);
lpTrack->start();
}
- AudioTrack实例代码 C++代码
- AudioTrack实例代码 C++代码
- 队列代码C实例
- C语言实例代码
- C语言代码实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- C/C++代码检视实例
- listView -----------> scroll to specifyed
- 如何让你Swing程序不卡死?
- XNA那些事(八)-WINDOWS PHONE游戏中的摄像机全总结
- 显示游标
- Part2:NCR RKT( 基于NDC)完整解决方案--NCR RKT流程
- AudioTrack实例代码 C++代码
- sizeof数据对齐问题
- 关于定时任务的一点思考(二)
- SVN入门及配置使用
- 在win下使用mkisofs
- SQL2000 统计每周,每月,每季,每年的数据
- js对象集锦.....(几个重要的但大家需要百度的)------------window对象
- 预装win7的限量版
- 数据库设计原则