オーディオブック用のプレーヤーを作成します。mp3 ファイルのあるフォルダーを開くと、それらのリスト全体がプレイリストとリスト ビューに追加されます。そして、本全体の期間を示すと思われるラベルがあります。しかし、player->duration は現在のトラックのデュレーションのみを返し、ループを通過してプレイリスト->next() をすべてのステップで実行すると、player->duration は 0 を返します。Phonon とファイルのメタデータについては知っていますが、使用せずにこれを行います。
1001 次
1 に答える
0
使用できる作業プロジェクトのソースコードを添付しています。プレーヤーがファイルを変更すると、デュレーションが変更されて出力されます。ファイル内でループするには、デコーダーがメディア ファイルの読み取りを完了するまで待つ必要があります。以下のコードとコメントを参照してください。
これは mainwindow.cpp です
#include "mainwindow.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
bool done =false;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
player = new QMediaPlayer(this);
playlist = new QMediaPlaylist(player);
playlist->setPlaybackMode(QMediaPlaylist::Sequential);
player->setPlaylist(playlist);
connect(player, &QMediaPlayer::durationChanged, this, &MainWindow::on_durationchanged);
//connect(player,&QMediaPlayer::)
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
playlist->addMedia(QUrl::fromLocalFile("Ar_today.mp3"));
playlist->addMedia(QUrl::fromLocalFile("Ar_sunday.mp3"));
playlist->setCurrentIndex(0); //set the first file
while (done == false) //wait till the duration is read
{
QApplication::processEvents();
}
done = false; playlist->setCurrentIndex(1); //change to the second file
while (done == false) //wait till the duration is read
{
QApplication::processEvents();
} //this way you can loop through files
player->setVolume(80);
player->play();
qDebug() << player->errorString();
}
void MainWindow::on_pushButton_2_clicked()
{
player->stop();
}
void MainWindow::on_durationchanged(qint64 duration)
{
done = true;
qDebug() << "duration = " << player->duration();
}
メインウィンドウ.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QDebug>
extern bool done;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_durationchanged(qint64 duration);
private:
Ui::MainWindow *ui;
QMediaPlayer* player;
QMediaPlaylist* playlist;
};
#endif // MAINWINDOW_H
フォームに 2 つのボタンを作成します。1 つは再生用の pushbutton と呼ばれ、もう 1 つは停止用の pushButton_2 です。
于 2019-04-27T21:47:12.627 に答える