Skip to content

Commit

Permalink
Merge pull request #12 from pzhlkj6612/master
Browse files Browse the repository at this point in the history
关于播放条、播放控制按钮在拖动后、音乐播放结束后的修复
  • Loading branch information
BensonLaur committed Apr 24, 2019
2 parents 81d5104 + 1c90cbc commit 2d828f7
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 9 deletions.
42 changes: 37 additions & 5 deletions BottomWidgets/BottomWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ void BottomWidget::initConnection()
connect(musicPlayer, SIGNAL(durationChanged(qint64)),this,SLOT(durationChanged(qint64)));
connect(musicPlayer, SIGNAL(errorOccur(int,QString)),this,SLOT(onErrorOccurs(int,QString)));

connect(musicPlayer, SIGNAL(audioFinish(bool)),this,SLOT(onAudioFinished(bool)));
connect(musicPlayer, SIGNAL(audioPlay()),this,SLOT(onAudioPlay()));
connect(musicPlayer, SIGNAL(audioPause()),this,SLOT(onAudioPause()));

sliderSound->setValue(SettingManager::GetInstance().data().volume);
nVolumeBeforeMute = sliderSound->value();
bSliderSoundPress = false;
Expand All @@ -149,24 +153,30 @@ void BottomWidget::initConnection()

void BottomWidget::reloadMusic(QString musicPath)
{
qDebug()<<"void BottomWidget::reloadMusic(QString="<<musicPath<<")+musicPlayer->state()="<<musicPlayer->state();

if(musicPlayer->state() != MusicPlayer::StoppedState )
musicPlayer->stop();

musicPlayer->setMusicPath(musicPath);

if(musicPlayer->state() == MusicPlayer::PlayingState)
setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_pause.png\");}");
else
setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_play.png\");}");
// 不要在这里设置播放控制按钮的状态,而是用MusicPlayer的信号
// if(musicPlayer->state() == MusicPlayer::PlayingState)
// setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_pause.png\");}");
// else
// setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_play.png\");}");
}

void BottomWidget::play()
{
qDebug()<<"void BottomWidget::play() musicPlayer->getMusicPath()="<<musicPlayer->getMusicPath();

if(musicPlayer->getMusicPath().size() != 0)
{
musicPlayer->play();

setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_pause.png\");}");
// 不要在这里设置播放控制按钮的状态,而是用MusicPlayer的信号
// setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_pause.png\");}");
}
}

Expand Down Expand Up @@ -242,6 +252,7 @@ void BottomWidget::exitMakingMode()

}

//btnPlayAndPause->clicked(bool) emitted
void BottomWidget::onPlayOrPause()
{
if(musicPlayer->state() == MusicPlayer::PlayingState)
Expand All @@ -266,6 +277,8 @@ void BottomWidget::durationChanged(qint64 duration)

void BottomWidget::positionChanged(int position)
{
qDebug()<<"void BottomWidget::positionChanged(int position="<<position<<")";

if(!AdjustingPos)
{
int pecentOfThousand = musicPlayer->duration() == 0? 0: int(1.0 * position / musicPlayer->duration() * 1000);
Expand Down Expand Up @@ -395,4 +408,23 @@ void BottomWidget::onErrorOccurs(int code, QString strErr)
tr("播放音频时发生错误,请尝试使用别的音频文件")+ "\n\n" + tr("出错细节:")+ strErr);
}

void BottomWidget::onAudioFinished(bool isEndWithForce)
{
setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_play.png\");}");
}

void BottomWidget::onAudioPlay()
{
qDebug()<<"void BottomWidget::onAudioPlay()";

setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_pause.png\");}");
}

void BottomWidget::onAudioPause()
{
qDebug()<<"void BottomWidget::onAudioPause()";

setStyleSheet("QPushButton#btnPlayAndPause{border-image:url(\":/resource/image/btn_play.png\");}");
}


5 changes: 5 additions & 0 deletions BottomWidgets/BottomWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ private slots:

void onErrorOccurs(int code,QString strErr);

//
void onAudioFinished(bool isEndWithForce);
void onAudioPlay();
void onAudioPause();

private:
bool bInMakingMode; //标记是否在制作模式中

Expand Down
23 changes: 19 additions & 4 deletions Entities/MusicPlayer/musicPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,10 @@ void PlayThread::generateAudioDataLoop()
AVRational aVRational = {1, 1000};
int64_t res = av_rescale_q(millisecondToSeek ,aVRational,pFormatCtx->streams[audioStream]->time_base);

SDL_PauseAudio(1);
// 不要直接调SDL_PauseAudio(),避免相应的信号发不出去
// SDL_PauseAudio(1);
pauseDevice();

//block here
if (av_seek_frame(m_MS.fct, audioStream, res, AVSEEK_FLAG_ANY) < 0)
{
Expand All @@ -618,7 +621,9 @@ void PlayThread::generateAudioDataLoop()
packet_queue_flush(&m_MS.audioq); //清除队列
}
}
SDL_PauseAudio(0);
// 不要直接调SDL_PauseAudio(),避免相应的信号发不出去
// SDL_PauseAudio(0);
playDevice();

AGStatus = AGS_PLAYING;
}
Expand Down Expand Up @@ -774,8 +779,8 @@ MusicPlayer::MusicPlayer(QObject* parent):QObject(parent),m_volume(128)
Qt::BlockingQueuedConnection);


m_interval = 50;
m_positionUpdateTimer.setInterval(m_interval);
// m_interval = 50;
// m_positionUpdateTimer.setInterval(m_interval);
connect(&m_positionUpdateTimer,SIGNAL(timeout()),this, SLOT(sendPosChangedSignal() ));

m_position = 0;
Expand Down Expand Up @@ -891,6 +896,11 @@ void MusicPlayer::stop()
//跳到时间点播放(单位 毫秒)
void MusicPlayer::seek(quint64 pos)
{
if(m_positionUpdateTimer.isActive())
{
m_positionUpdateTimer.stop();
}

//先获得总长
quint64 total = duration();
if(pos > total)
Expand All @@ -899,6 +909,11 @@ void MusicPlayer::seek(quint64 pos)
}

playThread->seekToPos(pos);

if(!m_positionUpdateTimer.isActive())
{
m_positionUpdateTimer.start();
}
}

//往后跳(单位 毫秒)
Expand Down

0 comments on commit 2d828f7

Please sign in to comment.