Mix_SetPanning не вызывается должным образом в функции обратного вызова Mix_ChannelFinished - PullRequest
0 голосов
/ 18 сентября 2018

Я использую SDL_Mixer для своего текущего проекта и пытаюсь синхронизировать звуки с помощью функции Mix_ChannelFinished.Кажется, он позволяет мне вызывать Mix_PlayChannel, но он не позволяет мне вызывать Mix_SetPanning в функции.Это приводит к тому, что аудио в очереди становится намного громче.Если я вызываю его вне функции, это помогает, но в начале звука в очереди есть заметный разрыв громкости.

Вот функция, которую я вызываю по окончании звука:

void playQueueSound(int channel)
{
    printf("\n playing %d", channels[channel].soundIndex);
    if (channels[channel].soundIndex > (-1))
    {
        //printf("\n playing %d", channels[channel].soundIndex);
        AudioSource::getSource(channels[channel].objId)->removeSound(channel);
        channels[channel].soundIndex = (-1);
        if (channels[channel].queueIndex > (-1))
        {   
            if (Mix_PlayChannel(channel, soundEffects[channels[channel].queueIndex].chunk, channels[channel].queueLoopMode)<0)
            {
                printf("\n cant play %s", Mix_GetError());
            }
            setObjPanning(AudioSource::getSource(channels[channel].objId), channel);
            channels[channel].soundIndex = channels[channel].queueIndex;
        }
        else
        {
            channels[channel].objId = -1;
        }
        channels[channel].queueIndex = -1;
        channels[channel].queueLoopMode = 0;
    }
}
...