天嵌 ARM开发社区

 找回密码
 注册
查看: 3313|回复: 17

播放器tqmp3无法实现歌曲跳转

[复制链接]
白歌 发表于 2013-3-18 16:38:04 | 显示全部楼层 |阅读模式
QFile f(mp3);

                        n++;
                        if (f.exists())
                        {
                                QString common =
                                                "mplayer -slave -quiet -ac mad -slave -quiet "
                                                                + mp3;

                                mplayerProcess->start(common);
                                //                                cout<<"common->"<<common.toUtf8().data()<<endl;

                                sendCmd("get_time_length\n");
                                mp3 =
                                                m_pMp3Table->item(
                                                                m_pMp3Table->currentRow()+n,
                                                                1)->text().toUtf8().data();
                                QMessageBox::information(this,"name",mp3,QMessageBox::Close,NULL);

                        }

这样写为什么不行,QMessageBox都显示下一首了。。
TQ-lkp 发表于 2013-3-18 17:04:00 | 显示全部楼层
n++放到后面
 楼主| 白歌 发表于 2013-3-18 17:06:16 | 显示全部楼层
TQ-lkp 发表于 2013-3-18 17:04
n++放到后面

一样的,试过了。。
 楼主| 白歌 发表于 2013-3-18 17:40:45 | 显示全部楼层
TQ-lkp 发表于 2013-3-18 17:04
n++放到后面

                                                QFile f(mp3);

                        if (f.exists())
                        {
                                QString common =
                                                "mplayer -slave -quiet -ac mad -slave -quiet "
                                                                + mp3;

                                mplayerProcess->start(common);
                                //                                cout<<"common->"<<common.toUtf8().data()<<endl;

                                sendCmd("get_time_length\n");
                                mp3 =
                                                m_pMp3Table->item(
                                                                m_pMp3Table->currentRow()+n,
                                                                1)->text().toUtf8().data();
                                n++;
                                QMessageBox::information(this,"name",mp3,QMessageBox::Close,NULL);

                        }

歌曲还是不会跳转,好纳闷,这个应该是可以播放下一首了的
"mplayer -slave -quiet -ac mad -slave -quiet "
                                                                + mp3;

 楼主| 白歌 发表于 2013-3-19 09:03:09 | 显示全部楼层
TQ-lkp 发表于 2013-3-18 17:04
n++放到后面

按理说,QMessageBox::information(this,"name",mp3,QMessageBox::Close,NULL);每次运行都会弹出窗口的,可是实际上是只弹出过一次的,歌曲只是不停的在播放当前首
TQ-lkp 发表于 2013-3-21 18:17:41 | 显示全部楼层
播放是根据当前table的所在行的,你要根据播放的时间结束后当table的当前行加1并,重新调用 play函数
 楼主| 白歌 发表于 2013-3-22 11:15:07 | 显示全部楼层
TQ-lkp 发表于 2013-3-21 18:17
播放是根据当前table的所在行的,你要根据播放的时间结束后当table的当前行加1并,重新调用 play函数

        //播放结束
        if (m_pProgessSlider->value() == m_pProgessSlider->maximum())
        {
                m_pPlayAction->setEnabled(true);
                m_pProgessSlider->setValue(0);
                m_pLcd->display("00:00");

                n++;
                //system("killall mplayer");
                //mplayerProcess->kill();
                //stop();
                //start();
                play();
        }

                QString
                                mp3 =
                                                m_pMp3Table->item(
                                                                m_pMp3Table->currentRow()+n,
                                                                1)->text().toUtf8().data();

                if (mp3.length() > 0)
                {
                        QFile f(mp3);
                        if (f.exists())
                        {
                             QString common =
                                                "mplayer -slave -quiet -ac mad -slave -quiet "
                                                                + mp3;

                                mplayerProcess->start(common);
                                cout<<"common->"<<common.toUtf8().data()<<endl;

                                sendCmd("get_time_length\n");

                        }



[root@EmbedSky /opt]# ./Mp3Player
common->mplayer -slave -quiet -ac mad -slave -quiet /mnt/sd/aa/a1.mp3
QProcess::start: Process is already running
common->mplayer -slave -quiet -ac mad -slave -quiet /mnt/sd/aa/b2.mp3
QProcess::start: Process is already running
common->mplayer -slave -quiet -ac mad -slave -quiet /mnt/sd/aa/b3.mp3

打印的信息变了,可是播放的歌曲没变,是什么原因啊?
TQ-lkp 发表于 2013-3-22 11:24:31 | 显示全部楼层
本帖最后由 TQ-lkp 于 2013-3-22 11:26 编辑

void TQMp3Player::play()
{
        if (m_bPause)
        {
                sendCmd("pause\n");
                m_Timer.start(1000);
                m_bPause = false;
                m_pPauseAction->setEnabled(true);
                m_pPlayAction->setEnabled(false);
                return;
        }
        m_pProgessSlider->setValue(0);
        m_pLcd->display("00:00");
        if (m_iRowCount > 0 && m_pMp3Table->currentRow() < m_iRowCount)
        {
                //                m_pMp3Table->cellWidget(m_pMp3Table->currentRow(), 4)->text();
                QString mp3 = m_pMp3Table->item(m_pMp3Table->currentRow(), 1)->text();

亲,我觉得我说的都够详细了,播放的时候取的是当前所在行的数据,你要播放下一行,要控制当选行加1啊,亲!
要么你不要调用play()函数,在结束后按你上面的流程走。
 楼主| 白歌 发表于 2013-3-22 11:29:04 | 显示全部楼层
TQ-lkp 发表于 2013-3-22 11:24
void TQMp3Player::play()
{
        if (m_bPause)

亲,mp3 =
                                                m_pMp3Table->item(
                                                                m_pMp3Table->currentRow()+n,
                                                                1)->text().toUtf8().data();

这里面的变量n累加的不行的?那应该是怎样加一啊?
 楼主| 白歌 发表于 2013-3-22 11:38:05 | 显示全部楼层
TQ-lkp 发表于 2013-3-22 11:24
void TQMp3Player::play()
{
        if (m_bPause)

亲,如果我这样写有错的话。。直接贴个可以实现的语句出来呗。。我的逻辑理解不了了。。
 楼主| 白歌 发表于 2013-3-22 11:44:05 | 显示全部楼层
TQ-lkp 发表于 2013-3-22 11:24
void TQMp3Player::play()
{
        if (m_bPause)

不调用play(),播放的也是当前首。。
mp3 =
                                                m_pMp3Table->item(
                                                                (m_pMp3Table->currentRow())+n,
                                                                1)->text().toUtf8().data()
TQ-lkp 发表于 2013-3-22 11:45:05 | 显示全部楼层
//播放结束
        if (m_pProgessSlider->value() == m_pProgessSlider->maximum())
        {
                m_pPlayAction->setEnabled(true);
                m_pProgessSlider->setValue(0);
                m_pLcd->display("00:00");

                n++;
                //system("killall mplayer");
                //mplayerProcess->kill();
                //stop();
                //start();
               // play();//此处屏掉,

                QString     mp3 =
                                                m_pMp3Table->item(
                                                                m_pMp3Table->currentRow()+n,
                                                                1)->text().toUtf8().data();

                if (mp3.length() > 0)
                {
                        QFile f(mp3);
                        if (f.exists())
                        {
                             QString common =
                                                "mplayer -slave -quiet -ac mad -slave -quiet "
                                                                + mp3;

                                mplayerProcess->start(common);
                                cout<<"common->"<<common.toUtf8().data()<<endl;

                                sendCmd("get_time_length\n");

                        }
        }

               
 楼主| 白歌 发表于 2013-3-22 11:47:11 | 显示全部楼层
TQ-lkp 发表于 2013-3-22 11:45
//播放结束
        if (m_pProgessSlider->value() == m_pProgessSlider->maximum())
        {

试过了,刚才,播放的还是没变。。
 楼主| 白歌 发表于 2013-3-22 12:23:19 | 显示全部楼层
TQ-lkp 发表于 2013-3-22 11:45
//播放结束
        if (m_pProgessSlider->value() == m_pProgessSlider->maximum())
        {

//播放结束
        if (m_pProgessSlider->value() == m_pProgessSlider->maximum())
        {
                m_pPlayAction->setEnabled(true);
                m_pProgessSlider->setValue(0);
                m_pLcd->display("00:00");

                n++;
                QString
                                mp3 =
                                                m_pMp3Table->item(
                                                                (m_pMp3Table->currentRow())+n,
                                                                1)->text().toUtf8().data();

                if (mp3.length() > 0)
                {
                        QFile f(mp3);
                        if (f.exists())
                        {
                             QString common =
                                                "mplayer -slave -quiet -ac mad -slave -quiet "
                                                                + mp3;

                                mplayerProcess->start(common);
                                cout<<"common->"<<common.toUtf8().data()<<endl;

                                sendCmd("get_time_length\n");

                        }
                        else
                        {
                                QMessageBox dg;
                                dg.setWindowTitle(trUtf8("信息"));
                                dg.addButton(new QPushButton(trUtf8("确认")),
                                                QMessageBox::YesRole);
                                dg.setText(trUtf8("文件不存在!"));
                                dg.exec();
                        }
                }
        }
}

代码真这样测试过了,播放的还是没变。。。
TQ-lkp 发表于 2013-3-22 15:44:15 | 显示全部楼层
这个东西很简单,当前的播放完成后取当前行下一行的数据,然后播放就行了,多加些打印吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-19 12:33 , Processed in 1.031256 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表