Я использую функцию голоса fmod в Android.
Песня отлично воспроизводится с разными голосами, но когда я собираюсь изменить голос во время воспроизведения песни и пытаюсь играть с другим голосом, предыдущий голос не останавливается.
Я тестировал этот код в mi note 3s & note 4
, это мой код,
bool playing = true;
bool play = false;
JNIEXPORT void JNICALL
Java_com_teefourteen_glideplayer_utils_Utils_fix(JNIEnv *env,
jclass jcls, jstring path_jstr, jint type) {
DSP *dsp;
Sound *sound;
System *systemm;//fatel exception
Channel *channel;
float frequency = 0;
if(play){
play = false;
channel->stop();
systemm->close();
systemm->release();
}
//Audio address
const char* path_cstr = env->GetStringUTFChars(path_jstr, NULL);
System_Create(&systemm);
systemm->init(32, FMOD_INIT_NORMAL, NULL);
try {
//Create sound
systemm->createSound(path_cstr, FMOD_DEFAULT, NULL, &sound);
switch (type) {
case MODE_NORMAL:
//Native play
systemm->playSound(sound, 0, false, &channel);
play = true;
systemm->update();
break;
case MODE_LUOLI:
systemm->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp);
dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 1.8);
systemm->playSound(sound, 0, false, &channel);
channel->addDSP(0, dsp);
play = true;
system->update();
break;
} catch (...) {
play = false;
channel->stop();
systemm->close();
systemm->release();
}
, он работает отлично, но при попытке изменить песню / голос, он делаетне работает.
иногда выдает фатальную ошибку при изменении голоса или смены песни.
A / libc: фатальный сигнал 11 (SIGSEGV), код 1, адрес ошибки 0x0 в tid 19449 (pool-7-нитка-1)