Почему плеер не может воспроизводить звук, предоставленный QBuffer?

Я пытаюсь воспроизвести пару аудиофайлов, хранящихся в объекте, один за другим. Я использовал объект, чтобы иметь возможность воспроизводить звук, используя. Звук, сохраненный в объекте в первый раз, воспроизводится успешно, но когда воспроизведение заканчивается и содержимое другого аудиофайла сохраняется в объекте во второй раз, проигрыватель не может воспроизводить звук должным образом.

      int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QByteArray audio;

    QBuffer buffer;
    buffer.setBuffer(&audio);

    QAudioOutput output;
    QMediaPlayer player;
    player.setAudioOutput(&output);
    player.setSourceDevice(&buffer);

    QFile file(":/audio/one.m4a");
    qDebug() << (file.open(QFile::ReadOnly) ? "opened successfully." : "Failed to open.");

    audio = file.readAll();
    file.close();

    buffer.open(QBuffer::ReadOnly);
    player.play(); // plays one.m4a successfully.

    QObject::connect(&player, &QMediaPlayer::playbackStateChanged, [&](QMediaPlayer::PlaybackState state)
    {
        if(state == QMediaPlayer::StoppedState) {
            file.setFileName(":/audio/two.m4a");
            qDebug() << (file.open(QFile::ReadOnly) ? "opened successfully." : "Failed to open.");
            audio = file.readAll();
            file.close();

            player.play(); // fails to play two.m4a
        }
    });
    return app.exec();
}

Я просто слышу звуковой эффект, похожий на звуковой сигнал, когда плеер воспроизводит второй звук.

Я создал другой объект, представляющий то же самоеобъект в качестве буфера. Все остальное аналогично. Я только что сменил исходное устройство плеера, и на этот раз он может успешно воспроизводить аудиофайлы. Вот почему я думаю, что проблема исходит отобъект.

          QBuffer one;
    QObject::connect(&player, &QMediaPlayer::playbackStateChanged, [&](QMediaPlayer::PlaybackState state)
    {
        if(state == QMediaPlayer::StoppedState) {
            one.setBuffer(&audio);

            file.setFileName(":/audio/two.m4a");
            qDebug() << (file.open(QFile::ReadOnly) ? "opened successfully." : "Failed to open.");
            audio = file.readAll();
            file.close();

            one.open(QBuffer::ReadOnly);
            player.setSourceDevice(&one);
            player.play(); // plays two.m4a successfully.
        }
    });
    return app.exec();
}

0 ответов

Другие вопросы по тегам