Как играть звук с Qt

Как я могу воспроизводить звук с помощью Qt? Я пробовал это:

QSound::play("sounds/croack.wav");

QSound не работает на моем ubuntu (кажется, что он требует NAS, хотя после его установки он все равно не работает). Есть ли просто однострочное решение Qt или мне нужно выбросить SDL или что-то еще?

Ответ 1

Хорошо, у меня есть некоторый прогресс, я могу играть в ogg файлы, но не wav (не знаю почему).

#include <QtGui>
#include <phonon/phonon>

int main(int argc, char* argv[]) {
    QApplication app( argc, argv );
    app.setApplicationName("bla");
    Phonon::MediaObject *mediaObject = Phonon::createPlayer(Phonon::NoCategory, Phonon::MediaSource("sounds/4.wav"));
    mediaObject->play();
    return app.exec();
}

Скомпилирован с g++ ``pkg-config QtGui phonon --cflags --libs``.

Ответ 2

Попробуйте с фононом. Это гораздо мощнее, чем QSound. Вот минимальный пример воспроизведения видеофайла. Если вы опускаете VideoWidget, он должен просто воспроизводить аудио.

#include <QApplication>
#include <QUrl>

#include <phonon/audiooutput.h>
#include <phonon/mediaobject.h>
#include <phonon/mediasource.h>
#include <phonon/videowidget.h>

using namespace Phonon;

int main( int argc, char** argv ) {
    QApplication app( argc, argv );
    app.setApplicationName( QLatin1String("testphonon") );
    const QUrl url = QUrl( QLatin1String("file:///somepath/somefile") );
    MediaSource src( url );
    MediaObject obj;
    obj.setCurrentSource( src );
    VideoWidget video;
    video.show();
    AudioOutput audio( VideoCategory );
    Phonon::createPath( &obj, &video );
    Phonon::createPath( &obj, &audio );
    obj.play();
    return app.exec();
}

Ответ 3

У вас есть несколько вариантов:

  • QSound (который нарушен без ремонта - не используйте его)
  • Phonon (будет делать то, что вы хотите, но я обнаружил, что это "слишком много", особенно если вы просто хотите воспроизвести несколько звуков уведомлений)
  • Другие библиотеки, такие как SDL.

Ответ 4

В QT5 Phonon был удален из официальной сборки. QSound работает по большей части, но обратите внимание, что QSound не поддерживает воспроизведение волновых файлов со всеми частотами выборки (поскольку я обнаружил трудный путь). QT5 QSound не воспроизводит все волновые файлы.

Если вы используете QSound, вы можете просто играть на волне, как и вы; но убедитесь, что вы воспроизводите файл с диска; а не ресурс QT. Поскольку ресурсы еще не поддерживаются. Вы можете скопировать волновой файл с ресурса на жесткий диск "на лету", а затем воспроизвести его; что я делаю в своем приложении.

Ответ 5

Вы можете использовать QMediaPlayer для обоих форматов файлов .mp3 и .wav

#include <QtMultimedia/QMediaPlayer>

QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QUrl::fromLocalFile("/path"));
player->setVolume(50);
player->play();

Ответ 6

Я тоже получил эту проблему, я решил установить этот пакет

qtmultimedia5-dev

и в том числе в файле ".pro"

QT += multimedia