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

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

12 голосов
/ 17 декабря 2010

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

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

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

Ответы [ 6 ]

5 голосов
/ 18 декабря 2010

попробуй с фононом. Это гораздо мощнее, чем 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();
}
4 голосов
/ 10 апреля 2016

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

#include <QtMultimedia/QMediaPlayer>

QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QUrl::fromLocalFile("/path"));
player->setVolume(50);
player->play();
4 голосов
/ 05 января 2013

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

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

4 голосов
/ 18 декабря 2010

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

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

Хорошо, у меня есть некоторый прогресс, я могу воспроизводить файлы 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``.

0 голосов
/ 10 мая 2019

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

qtmultimedia5-dev

и включив в файл ".pro"

QT += multimedia
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...