我在android中使用FMOD库,我不知道如何获取输出progressbar或具有效果的快速播放/暂停/停止声音,例如: https://play.google.com/store/apps/details?id=com.baviux.voicechanger&hl=en
我尝试使用fomd文档,我知道如何获取输出,但是由于这个问题,我什么都没找到。
我是android&ndk的初学者。
这是我的代码,我无法控制播放暂停或停止并在java活动中获取输出进度栏:
System *system;
Sound *sound;
DSP *dsp;
Channel *channel;
float frequency;
bool isPlaying = true;
FMOD_RESULT result;
System_Create(&system);
if (save == 1) {
unsigned int outputhandle;
system->setOutput(FMOD_OUTPUTTYPE_WAVWRITER);
system->init(32,FMOD_INIT_NORMAL,(void *) "/sdcard/sound.mp3");
} else{
system->init(32,NULL);
}
const char *path_cstr = env->GetStringUTFChars(path_jstr,NULL);
try {
system->createSound(path_cstr,FMOD_DEFAULT,NULL,&sound);
switch (type) {
case TYPE_NORMAL:
LOGI("%s",path_cstr)
system->playSound(sound,false,&channel);
LOGI("%s","fix normal");
break;
case TYPE_LOLITA:
system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT,&dsp);
dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH,8.0);
system->playSound(sound,&channel);
channel->addDSP(0,dsp);
break;
case TYPE_UNCLE:
system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT,&dsp);
dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH,0.8);
system->playSound(sound,dsp);
break;
case TYPE_THRILLER:
system->createDSPByType(FMOD_DSP_TYPE_TREMOLO,&dsp);
dsp->setParameterFloat(FMOD_DSP_TREMOLO_SKEW,5);
system->playSound(sound,dsp);
break;
case TYPE_FUNNY:
system->createDSPByType(FMOD_DSP_TYPE_NORMALIZE,&dsp);
system->playSound(sound,dsp);
channel->getFrequency(&frequency);
frequency = frequency * 2;
channel->setfrequency(frequency);
break;
case TYPE_ETHEREAL:
system->createDSPByType(FMOD_DSP_TYPE_ECHO,&dsp);
dsp->setParameterFloat(FMOD_DSP_ECHO_DELAY,300);
dsp->setParameterFloat(FMOD_DSP_ECHO_FEEDBACK,20);
system->playSound(sound,dsp);
break;
case TYPE_Sajjad:
system->createDSPByType(FMOD_DSP_TYPE_CHORUS,&dsp);
dsp->setParameterFloat(FMOD_DSP_CHORUS_DEpth,90.0f);
system->playSound(sound,&channel);
channel->addDSP(0,dsp);
channel->getFrequency(&frequency);
// frequency = frequency * 2;
channel->setfrequency(frequency);
break;
}
} catch (...) {
LOGE("%s","catch exception...")
goto end;
}
system->update();
while (isPlaying) {
channel->isPlaying(&isPlaying);
usleep(1000 * 1000);
}
goto end;
end:
env->ReleaseStringUTFChars(path_jstr,path_cstr);
sound->release();
system->close();
system->release();
我是初学者,请给我一些代码。