かなり簡単にできる。
まず、プロジェクトファイル(*.pro)に
QT += multimedia
を追加する。
基本的には、これで再生できる。
auto mp = new QMediaPlayer();
mp->setMedia(QUrl::fromLocalFile("hoge.mp3"));
mp->setVolume(100);
mp->play();
簡単www
再生が終わったら、アプリを終了するようにするには、stateChangedシグナルをとってStoppedStateで終了するようにすればいい。
connect(mp, &QMediaPlayer::stateChanged, [=](QMediaPlayer::State status)->void {
switch (status) {
case QMediaPlayer::StoppedState:
qDebug() << "StoppedState";
mp->deleteLater();
app->quit();
break;
case QMediaPlayer::PlayingState:
qDebug() << "PlayingState";
break;
case QMediaPlayer::PausedState:
qDebug() << "PausedState";
break;
}
});
一応、ソース全体を示しておく。
appmain.h
#ifndef APPMAIN_H
#define APPMAIN_H
#include <QObject>
#include <QCoreApplication>
class AppMain : public QObject
{
Q_OBJECT
public:
explicit AppMain(QObject *parent, QCoreApplication *coreApp);
signals:
public slots:
void run();
private:
QCoreApplication *app;
};
#endif // APPMAIN_H
appmain.cpp
#include "appmain.h"
#include <QMediaPlayer>
#include <QDebug>
AppMain::AppMain(QObject *parent, QCoreApplication *coreApp) : QObject(parent) ,app(coreApp)
{
}
void AppMain::run() {
auto mp = new QMediaPlayer();
connect(mp, &QMediaPlayer::stateChanged, [=](QMediaPlayer::State status)->void {
switch (status) {
case QMediaPlayer::StoppedState:
qDebug() << "StoppedState";
mp->deleteLater();
app->quit();
break;
case QMediaPlayer::PlayingState:
qDebug() << "PlayingState";
break;
case QMediaPlayer::PausedState:
qDebug() << "PausedState";
break;
}
});
connect(mp, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error),
[](QMediaPlayer::Error error){
qDebug() << "ERROR:" << error;
});
connect(mp, &QMediaPlayer::destroyed, [](QObject *)->void {
qDebug() << "destoryed";
});
mp->setMedia(QUrl::fromLocalFile("hoge.mp3"));
mp->setVolume(100);
mp->play();
}
main.cpp
#include <QCoreApplication>
#include <QTimer>
#include "appmain.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
AppMain appMain(nullptr, &a);
// QTimer::singleShot(0, &appMain, SLOT(run()));
QTimer::singleShot(0, &appMain, &AppMain::run);
return a.exec();
}
コメント