如何在 Qt5 中播放声音(Qt4 迁移)?

Posted

技术标签:

【中文标题】如何在 Qt5 中播放声音(Qt4 迁移)?【英文标题】:How to play sound in Qt5 (Qt4 migration)? 【发布时间】:2012-12-27 02:34:30 【问题描述】:

在Qt4中我曾经使用过

QT += multimedia phonon
//...
#include <Phonon>
//...
        Phonon::MediaObject *mediaObject = Phonon::createPlayer(Phonon::NoCategory, Phonon::MediaSource(QUrl("./assets/audio/window_appear.wav")));
        //   "\"" + Qdir().absolutePath() + "/audio/click.wav" + "\""
        mediaObject->play();

一切正常。但是现在Phonon is not supported in Qt 5. 所以我想知道 - 我如何在 Qt5 中播放诸如声音之类的媒体文件?

使用 WebKit? (这是完全有可能的,但从很多角度来看看起来有点糟糕)

【问题讨论】:

qt-project.org/doc/qt-5.0/qtmultimedia/multimediaoverview.html 【参考方案1】:

Qt 开发人员在 Qt4 的较新版本中已经开始减少对 Phonon 集成的工作,转而专注于 Qt Multimedia 和 Qt Mobility 模块。尽管他们仍然支持 Phonon。

如您所说,从 Qt5 开始,不再支持 Phonon。所以请查看Qt Multimedia,尤其是QAudioOutput。

如“详细说明”下的their documentation 中所列,播放音频文件如下所示:

QFile inputFile;     // class member.
QAudioOutput* audio; // class member.
inputFile.setFileName("/tmp/test.raw");
inputFile.open(QIODevice::ReadOnly);

QAudioFormat format;
// Set up the format, eg.
format.setFrequency(8000);
format.setChannels(1);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);

QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format)) 
    qWarning()<<"raw audio format not supported by backend, cannot play audio.";
    return;


audio = new QAudioOutput(format, this);

connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));
 audio->start(&inputFile);

【讨论】:

以上是关于如何在 Qt5 中播放声音(Qt4 迁移)?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 Qt QMessageBox 播放的声音?

在 JavaScript \ jQuery 上播放游戏声音

如何制作和播放程序生成的啁啾声

如何在 Java 中播放除哔哔声以外的声音?

如何在 javascript 中快速播放声音文件的多个副本

ALSA:如何判断声音何时播放完毕