QMediaPlayer / задержка перед воспроизведением

107
30 мая 2021, 23:50

Занялся написанием небольшой игрушки и вот добравшись до музыкально-звуковой составляющий столкнулся с проблемой.

    QMediaPlayer *bulletSound = new QMediaPlayer();
    bulletSound->setMedia(QUrl("qrc:/rsc/sounds/bullet.mp3"));
    if (bulletSound->state() == QMediaPlayer::PlayingState) {
        bulletSound->setPosition(0);
    } else if (bulletSound->state() == QMediaPlayer::StoppedState) {
        bulletSound->play();
    }

Этот звуковой файл должен воспроизводиться всякий раз, когда игрок делает выстрел. И он воспроизводится, но когда снаряд пролетит уже приличное расстояние. Имеет место быть какая-то задержка. Как свести ее к минимуму?

Answer 1

Делается через предзагрузку. Ваши файлы просто читаете в буферы, которые где-то размещаете в памяти, при вызове метода стрельбы соответственно вызываете

QBuffer tmp(&bullet_sound_array);
mediaPlayer.setMedia(QMediaContent(), &tmp);
mediaPlayer.play();

В этом примере надо следить, чтобы tmp буфер существовал до конца воспроизведения, поэтому лучше сразу после чтения перегонять QByteArray в QBuffer

Также можно попробовать разместить аудио файлы в .qrc файле, но это раздует .ехе до неимоверных размеров.

READ ALSO
Как вызвать 2 раза break; внутри switch?

Как вызвать 2 раза break; внутри switch?

Не могу красиво выйти из цикла используя break внутри switch, успевает сработать только один разпробовал еще return; но он выкидывает в такую далину...

104
При работе перепоняется vector: “vector subscript out of range”

При работе перепоняется vector: “vector subscript out of range”

Около месяца изучаю C++, несколько дней пытаюсь отладить кодОшибка, наверное, очевидная для бывалых, всё никак не находится

89
Вывод значения переменной из функции

Вывод значения переменной из функции

Хочу, чтобы выводилось значение переменной aЕсли введенное число больше 5 - вывести 5, иначе 4

80
GDB процесс дебага

GDB процесс дебага

В Microsoft Visual Studio есть встроенный дебаггер, который позволяет дизассемблировать выполняемый файл и ходить по строчкам ассемблера пошагово

96