《三》MP3添加歌曲、播放、上一曲等操作的实现

在上一期中我们实现了搜索歌曲,那么这一期我们来实现播放他。

添加歌曲:

既然要添加歌曲,实质上就是添加文件,我们要找到他的路径,文件名称,在判断文件是否存在等操作,最后在添加加进去。

void MainWindow::on_pushButton_Add_clicked()
{
    //获取当前目录路径-主文件目录
    QString strCurrenrPath=QDir::homePath();
    QString strDilTittle="请选择MP3文件";
    //文件过滤器
    QString strFilters="所有文件(*.*);;音频文件(*.mp3);;mp3文件(*.mp3)";

    QStringList strMp3list=QFileDialog::getOpenFileNames(this,strDilTittle,strCurrenrPath,strFilters);
    if(strMp3list.count()<1){
        return;
    }
    for (int i=0;i<strMp3list.count();i++) {
        //获取到音乐列表里面的MP3文件
        QString strFiles=strMp3list.at(i);
        //将MP3文件添加到多媒体播放列表里面
        P_Playerlist->addMedia(QUrl::fromLocalFile(strFiles));
        QFileInfo qFileInfo(strFiles);//获取文件信息
        //将歌曲添加到plaintextedit里面
        ui->plainTextEdit_MusicList->appendPlainText(qFileInfo.fileName());
    }
    //添加完毕-立即播放
    if(P_PlayerObject->state()!=QMediaPlayer::PlayingState){
        P_Playerlist->setCurrentIndex(0);
    }
    P_PlayerObject->play();
    ipos=1;
}

最后几句:添加完毕之后立即播放,可加可不加。

本段代码就是通过函数获取文件路径,文件名称,再通过文件过滤器找到对应格式的文件,再根据这些内容获取到MP3歌曲列表,再通过for循环,逐个添加到歌曲列表当中。

ipos=1;表示播放状态,我们通过刚开始定义的这个状态来判断歌曲是否在播放。

播放:

//播放歌曲
void MainWindow::on_pushButton_play_clicked()
{
    //如果停止状态,或暂停状态--直接播放
    if(ipos==0){
        P_PlayerObject->play();
        ipos=1;
    }else if(P_Playerlist->currentIndex()<0){
        P_Playerlist->setCurrentIndex(0);
    }
    P_PlayerObject->play();
}

暂停:

void MainWindow::on_pushButton_pause_clicked()
{
    //如果是播放--改为暂停
    if(ipos==1){
        P_PlayerObject->pause();
        ipos=0;
    }
}

停止:

void MainWindow::on_pushButton_stop_clicked()
{
    P_PlayerObject->stop();
    ipos=0;
}

注意:及时修改ipos的值,以防遗漏导致按钮失效

上一曲,下一曲:

//上一曲
void MainWindow::on_pushButton_pre_clicked()
{
    int m_index=P_Playerlist->currentIndex();
    int m_indexSum=P_Playerlist->mediaCount();
    if(m_index>0){
        m_index-=1;
        P_Playerlist->setCurrentIndex(m_index);
        P_PlayerObject->play();
    }else{
        m_index=m_indexSum-1;
        P_Playerlist->setCurrentIndex(m_index);
        P_PlayerObject->play();
    }
}

首先获取当前歌曲列表的位置,再进行判断,如果位置等于零,就说明在第一个歌曲位置,那么继续上一曲的话,就该到了最后一曲的位置,根据歌曲的位置即使改变m_index的值。

下一曲的话刚好相反,如果歌曲位置是最后一个的话,继续下一曲就应该是第一个歌曲:

void MainWindow::on_pushButton_next_clicked()
{
    int m_index=P_Playerlist->currentIndex();
    int m_indexSum=P_Playerlist->mediaCount();
    if(m_index==m_indexSum){
        m_index=0;
        P_Playerlist->setCurrentIndex(m_index);
        P_PlayerObject->play();
    }else{
        m_index+=1;
        P_Playerlist->setCurrentIndex(m_index);
        P_PlayerObject->play();
    }
}

接着就该到了音量图标的变化,静音的时候 是一个图标,非静音的时候又是一个。

音量图标变化:

//实现静音状态图标变化
void MainWindow::on_pushButton_Mute_clicked()
{
    bool isMutexState=P_PlayerObject->isMuted();
    P_PlayerObject->setMuted(!isMutexState);
    if(isMutexState){
        ui->pushButton_Mute->setIcon(QIcon(":/new/Images/sound.png"));
    }else{
        ui->pushButton_Mute->setIcon(QIcon(":/new/Images/mute.png"));
    }
}

很简单,就是判断静音还是非静音,修改相应图标就好了。

进度条变化:

我们选中进度条->转到槽,找到这个valueChanged(int) 就可以了,两个进度条操作是一样的。

//音量控制
void MainWindow::on_horizontalSlider_Volume_valueChanged(int value)
{
    P_PlayerObject->setVolume(value);
}
//播放歌曲进度
void MainWindow::on_horizontalSlider_Play_valueChanged(int value)
{
    P_PlayerObject->setPosition(value);
}

直接调用系统接口就能实现。

感谢阅读!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值