Qt音頻播放器

說明:

代碼"實現"(其實是調用別人提供的API)音頻播放器就需要能夠播放音頻文件的API和音頻文件,Qt提供了相關API,你需要提供音頻文件可以播放了。

注意:

使用QMediaPlayer等類,需要多媒體模塊支持,即項目文件中添加QT += multimedia

程序邏輯:

獲取音頻數據->包裝處理->點擊播放

獲取音頻數據:

音頻數據是保存在QMediaPlayList對象中
播放內容列表:由QMediaPlayList對象提供QMediaContent的集合給QMediaPlayer對象
播放內容:由QMediaContent根據文件路徑得到
文件路徑:由QFileDialog選擇得到
QFileDialog對話框需要點擊打開按鈕

數據處理:

關聯QMediaPlayer對象和QMediaPlayList對象
QMediaPlayer對象播放QMediaPlayList對象中的歌曲

播放:

調用QMediaPlayer對象的play()方法即可播放,還可以調用函數播放上一首、下一首

其他功能:

播放、暫停、停止、顯示歌手...

代碼:

.pro

#-------------------------------------------------
#
# Project created by QtCreator 2016-04-19T00:54:47
#
#-------------------------------------------------

QT       += core gui multimedia

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = AudioPlayerDemo
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Widget w;
    w.show();

    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QFileDialog>
#include <QGridLayout>
#include <QStandardPaths>
#include <QTextEdit>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    QPushButton * open_file;
    QPushButton * play_pause;
    QPushButton * pre_file;
    QPushButton * next_file;

    QTextEdit * show_file;

    QMediaPlayer * player;
    QMediaPlaylist * play_list;
    QGridLayout * layout;
    void newComponent();
    void setComponent();
    void setConnect();

public slots:
    void onPlayPause();
    void onPlayNext();
    void onPlayPre();
    void onOpenAudioFile();
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"

void Widget::newComponent()
{
    open_file = new QPushButton(tr("打開音頻文件列表(&O)"));
    play_pause = new QPushButton(tr("播放|暫停(&P)"));
    pre_file = new QPushButton(tr("上一首(&R)"));
    next_file = new QPushButton(tr("下一首(&N)"));
    show_file = new QTextEdit;
    player = new QMediaPlayer;
    play_list = new QMediaPlaylist;
    layout = new QGridLayout;
}

void Widget::setComponent()
{
    layout->addWidget(open_file,0,0,1,1);
    layout->addWidget(play_pause,1,0,1,1);
    layout->addWidget(pre_file,1,1,1,1);
    layout->addWidget(next_file,1,2,1,1);
    layout->addWidget(show_file,2,0,1,3);
    this->setLayout(layout);
    this->setWindowTitle(tr("音頻播放器-Demo"));
}

void Widget::setConnect()
{
    connect(open_file,SIGNAL(clicked(bool)),this,SLOT(onOpenAudioFile()));
    connect(play_pause,SIGNAL(clicked(bool)),this,SLOT(onPlayPause()));
    connect(pre_file,SIGNAL(clicked(bool)),this,SLOT(onPlayPre()));
    connect(next_file,SIGNAL(clicked(bool)),this,SLOT(onPlayNext()));
}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    newComponent();
    setComponent();
    setConnect();
}

Widget::~Widget()
{

}
void Widget::onOpenAudioFile(void){
    QStringList list = QFileDialog::getOpenFileNames(
                this\
                ,"選擇要添加的音樂文件"\
                ,QStandardPaths::writableLocation(QStandardPaths::MusicLocation)\
                ,"Audio(*.mp3)");
    if(!list.isEmpty()){
        play_list->clear();
        foreach (QString file_name, list) {
            show_file->append(file_name);
            play_list->addMedia(QMediaContent(QUrl::fromLocalFile(file_name)));
        }
        play_list->setCurrentIndex(0);
        player->setPlaylist(play_list);
    }
}
void Widget::onPlayPause(void){
    if(player->state() == QMediaPlayer::PlayingState)
        this->player->pause();
    else{
        player->setVolume(50);
        player->play();
    }
}

void Widget::onPlayNext()
{
    player->playlist()->next();
}

void Widget::onPlayPre()
{
    player->playlist()->previous();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章