остановить голос при воспроизведении новой песни в fmod - PullRequest
1 голос
/ 30 апреля 2019

Я использую функцию голоса 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)

...