📄 playmp3dlg.cpp
字号:
void CPLAYMP3Dlg::Btn_Add()
{
//int nResponse = openfile_dlg.DoModal();
int nResponse = openfile_dlg.DoModal();
if (nResponse == IDOK)
{
//没有名称,不显示。
if (openfile_dlg.array_str.GetSize() > 0)
{
newPos = 0;
//4.10后添的。
AddToListBox();
//可以去掉虚线框
if (m_ListMp3.GetCount() > 0 )
{
m_ListMp3.ShowWindow(SW_SHOW);
}
else
m_ListMp3.ShowWindow(SW_HIDE);
}
}
if(nResponse == IDCANCEL)
{
b_mp3info = FALSE;
newPos = 0;
Invalidate();
}
}
void CPLAYMP3Dlg::Btn_Sub()
{
// b_sub = true;
// InvalidateRect(CRect(103,53,294,96));
newPos = 0;
mp3Stop();
mp3DestroyGraph();
int xxxx,yyyy;
if (m_ListMp3.GetCurSel() < 0)//
{
xxxx = m_ListMp3.GetCount();
yyyy = openfile_dlg.array_str.GetSize();
CString pppp;
// m_ListMp3.GetText(0,pppp);
pppp = openfile_dlg.array_str.GetAt(0);
m_ListMp3.DeleteString(0);
if (yyyy == 0)
{
return;
}
for(int i = 0;i<openfile_dlg.array_str.GetSize();i++)
{
if (pppp == openfile_dlg.array_str.GetAt(i))
{
openfile_dlg.array_str.RemoveAt(i);
}
}
// openfile_dlg.array_str.RemoveAt(0);
}
else
{
xxxx = m_ListMp3.GetCount();
yyyy = openfile_dlg.array_str.GetSize();
int xx = m_ListMp3.GetCurSel();
CString str111111;
// m_ListMp3.GetText(xx,str111111);
str111111 =openfile_dlg.array_str.GetAt(xx);
m_ListMp3.DeleteString(m_ListMp3.GetCurSel());
yyyy = openfile_dlg.array_str.GetSize();
for(int i = 0;i<openfile_dlg.array_str.GetSize();i++)
{
// m_ListMp3.GetText( xx,str111111);
str111111 = openfile_dlg.array_str.GetAt(xx);
if (str111111 == openfile_dlg.array_str.GetAt(i))
{
openfile_dlg.array_str.RemoveAt(i);
}
}
// openfile_dlg.array_str.RemoveAt(m_ListMp3.GetCurSel());
}
}
void CPLAYMP3Dlg::Btn_Play()
{
// int m = m_ListMp3.GetCount();
m_Playing.ShowWindow(true);
m_Nameing.ShowWindow(true);
m_PlayTime.ShowWindow(true);
m_NewLrc.ShowWindow(true);
if (m_ListMp3.GetCount() == 0)
{
return;
}
//最开始没有点中列表时,默认播放第一首。
if (m_ListMp3.GetCurSel() < 0 && m_ListMp3.GetCount() > 0)
{
CopyBMP(IDB_PLAYMP3_W,4);
CString name_ ;
m_ListMp3.SetCurSel(0);//设定蓝条。
// m_ListMp3.GetText(0,name_);
name_ = openfile_dlg.array_str.GetAt(0);
mSourceFile = name_;
// mSourceFile.Format(strPath + L"mp3\\%s",name_);
GetMp3INFO(mSourceFile);
b_mp3info = true;
str_lrc = L"";
CString strMP3NAME,strLRCNAME;
strMP3NAME = mSourceFile.Left(mSourceFile.GetLength() - 4);
strLRCNAME = strMP3NAME + ".lrc";
lrc.Free();
if ((lrc.Open(strLRCNAME)))
{
b_yesLrc = true;
}
else
{
str_lrc = L"";
//m_lrc.SetWindowText(str_lrc);
m_NewLrc.SetWindowText(str_lrc);
// m_lrc.ShowWindow(SW_HIDE);
}
InvalidateRect(CRect(103,53,293,110),false);
mp3CreateGraph();
b_play_or_pause = true;
}
if (b_play_or_pause)//开始和暂停切换
{
b_beginPlay = true;//开始播放,此时可以按快进,快退,和停止
CopyBMP(IDB_SPAUSE_B,4);
mp3PLAY();
}
if (!b_play_or_pause)
{
CopyBMP(IDB_PLAYMP3_W,4);
mp3Pause();
}
b_play_or_pause = !b_play_or_pause;
}
void CPLAYMP3Dlg::Btn_Stop()
{
CopyBMP(IDB_PLAYMP3_W,4);
newPos = 0;//要按两下才可以再播放。以后再改。
mp3Stop();
}
void CPLAYMP3Dlg::Btn_Left()
{
if (m_ListMp3.GetCount() == 1)
{
return;
}
if (m_ListMp3.GetCount() <= 0 )//没有歌曲时。
{
return;
}
//左移
int x = m_ListMp3.GetCurSel() - 1;
CopyBMP(IDB_SPAUSE_B,4);
if (!b_btn_round)//随 机
{
int l_max = m_ListMp3.GetCount();
srand( WCE_FCTN(time) (NULL) );
x = rand()%(l_max );
}
else//循环
if (x == -1)
x = m_ListMp3.GetCount() - 1;
CString name_ ;
m_ListMp3.SetCurSel(x);
// m_ListMp3.GetText(x,name_);
name_ = openfile_dlg.array_str.GetAt(x);
// mSourceFile.Format(strPath + L"mp3\\%s",name_);
mSourceFile = name_;
GetMp3INFO(mSourceFile);
b_mp3info = true;
str_lrc = L"";
CString strMP3NAME,strLRCNAME;
strMP3NAME = mSourceFile.Left(mSourceFile.GetLength() - 4);
strLRCNAME = strMP3NAME + ".lrc";
lrc.Free();
if ((lrc.Open(strLRCNAME)))
{
b_yesLrc = true;
}
else
{
str_lrc = L"";
// m_lrc.ShowWindow(SW_HIDE);
}
InvalidateRect(CRect(103,53,293,110),false);
mp3CreateGraph();
mp3PLAY();
b_play_or_pause = true;
}
void CPLAYMP3Dlg::Btn_Right()
{
if (m_ListMp3.GetCount() == 1)//一个歌时不可以左右。
{
return;
}
if (m_ListMp3.GetCount() <= 0 )//没有歌曲时。
{
return;
}
int x = m_ListMp3.GetCurSel() + 1;
CopyBMP(IDB_SPAUSE_B,4);
if (!b_btn_round)//随 机
{
int l_max = m_ListMp3.GetCount();
srand( WCE_FCTN(time) (NULL) );
x = rand()%(l_max );
}
else//循环
{
if (x == m_ListMp3.GetCount() )
{
x = 0;
}
}
// m_ListMp3.SetCurSel(x);
CString name_ ;
m_ListMp3.SetCurSel(x);
// m_ListMp3.GetText(x,name_);
name_ = openfile_dlg.array_str.GetAt(x);
// mSourceFile.Format(strPath + L"mp3\\%s",name_);
mSourceFile = name_;
GetMp3INFO(mSourceFile);
b_mp3info = true;
str_lrc = L"";
CString strMP3NAME,strLRCNAME;
strMP3NAME = mSourceFile.Left(mSourceFile.GetLength() - 4);
strLRCNAME = strMP3NAME + ".lrc";
lrc.Free();
if ((lrc.Open(strLRCNAME)))
{
b_yesLrc = true;
}
else
{
str_lrc = L"";
// m_lrc.ShowWindow(SW_HIDE);
}
InvalidateRect(CRect(103,53,293,110),false);
mp3CreateGraph();
mp3PLAY();
b_play_or_pause = true;
}
void CPLAYMP3Dlg::Btn_Round()
{
// CString ss;
// ss.Format(L"%d",m_ListMp3.GetCount());
// AfxMessageBox(ss);
//
if (m_ListMp3.GetCount() == 1)
{
return;
}
if (m_ListMp3.GetCount() <= 0 )//没有歌曲时。
{
return;
}
b_btn_round = !b_btn_round;
if (!b_btn_round)
{
CopyBMP (IDB_RANDOM_W,8);
}
else
{
CopyBMP(IDB_ROUND_W,8);
}
}
void CPLAYMP3Dlg::Btn_Close()
{
RegCloseKey(g_hkVolume);
if (mFilterGraph)
{
delete mFilterGraph;
mFilterGraph = NULL;
// Stop the timer
if (mSliderTimer)
{
KillTimer(mSliderTimer);
mSliderTimer = 0;
CDialog::OnOK();
}
CDialog::OnOK();
}
CDialog::OnOK();
}
void CPLAYMP3Dlg::Btn_Cancel()
{
m_Playing.ShowWindow(false);
m_Nameing.ShowWindow(false);
m_PlayTime.ShowWindow(false);
m_NewLrc.ShowWindow(false);
RegCloseKey(g_hkVolume);
this->ShowWindow(SW_HIDE);
}
void CPLAYMP3Dlg::Btn_NoVolume()
{
DWORD sVolume,dwVolume,dw = 0;
DWORD sv = 0;
if (!b_volume)
{
CopyBMP(IDB_volume,11);
switch ( out )
{
case 0:
sVolume = 0;
break;
case 1:
sVolume=((DWORD)0xffff/9*1-1);
break;
case 2:
sVolume=((DWORD)0xffff/9*2-1);
break;
case 3:
sVolume=((DWORD)0xffff/9*3-1);
break;
case 4:
sVolume=((DWORD)0xffff/9*4-1);
break;
case 5:
sVolume=((DWORD)0xffff/9*5-1);
break;
case 6:
sVolume=((DWORD)0xffff/9*6-1);
break;
case 7:
sVolume=((DWORD)0xffff/9*7-1);
break;
case 8:
sVolume=((DWORD)0xffff/9*8-1);
break;
case 9:
sVolume=0xffff;
break;
}
dwVolume=(sVolume<<16)|(sVolume);
waveOutSetVolume(0,dwVolume);
int x ;
switch(out)
{
case 0:
x = 315;
break;
case 1:
x = 322;
break;
case 2:
x = 329;
break;
case 3:
x = 336;
break;
case 4:
x = 343;
break;
case 5:
x = 350;
break;
case 6:
x = 357;
break;
case 7:
x = 364;
break;
case 8:
x = 371;
break;
case 9:
x = 378;
break;
}
}
else
{
CopyBMP (IDB_MUTE,11);
//按静音按纽时,先保存当前声音
DWORD dwVolume;
DWORD sVolume;
DWORD dwType ;
dwType = REG_DWORD ;
waveOutGetVolume(0, &dwVolume);
sVolume=dwVolume>>16;
if(sVolume==0)
out=0;
else if(sVolume<((DWORD)0xffff/9*1))
out=1;
else if(sVolume<((DWORD)0xffff/9*2))
out=2;
else if(sVolume<((DWORD)0xffff/9*3))
out=3;
else if(sVolume<((DWORD)0xffff/9*4))
out=4;
else if(sVolume<((DWORD)0xffff/9*5))
out=5;
else if(sVolume<((DWORD)0xffff/9*6))
out=6;
else if(sVolume<((DWORD)0xffff/9*7))
out=7;
else if(sVolume<((DWORD)0xffff/9*8))
out=8;
else
out=9;
//为点静音按纽,保丰收当前音量。
waveOutSetVolume(0,0);
}
b_volume = !b_volume;
}
LPCTSTR CPLAYMP3Dlg::CStringDownMP3(CString m_string)
{
return LPCTSTR(m_string);
}
void CPLAYMP3Dlg::mp3CreateGraph()
{
mp3DestroyGraph();
mFilterGraph = new CDXGraph();
if (mFilterGraph->Create())
{
mFilterGraph->RenderFile(mSourceFile);
mFilterGraph->Pause();
}
}
void CPLAYMP3Dlg::mp3DestroyGraph()
{
if (mFilterGraph)
{
// Stop the filter graph first
mFilterGraph->Stop();
mFilterGraph->SetNotifyWindow(NULL);
delete mFilterGraph;
mFilterGraph = NULL;
}
}
void CPLAYMP3Dlg::mp3PLAY()
{
if (mFilterGraph)
{
mFilterGraph->Run();
// Start a timer
if (mSliderTimer == 0)
{
mSliderTimer = SetTimer(SLIDER_TIMER, 1000, NULL);
}
}
}
void CPLAYMP3Dlg::mp3Pause()
{
if (mFilterGraph)
{
mFilterGraph->Pause();
// Start a timer
if (mSliderTimer == 0)
{
mSliderTimer = SetTimer(SLIDER_TIMER, 1000, NULL);
}
}
}
void CPLAYMP3Dlg::mp3Stop()
{
if (mFilterGraph)
{
mFilterGraph->SetCurrentPosition(0);
// ShowRate(0);
mFilterGraph->Stop();
// Stop the timer
if (mSliderTimer)
{
KillTimer(mSliderTimer);
mSliderTimer = 0;
}
}
}
void CPLAYMP3Dlg::OnTimer(UINT nIDEvent)
{
if (nIDEvent == mSliderTimer && mFilterGraph)
{
double pos = 0, duration = 1.;
mFilterGraph->GetCurrentPosition(&pos);
mFilterGraph->GetDuration(&duration);
if (b_yesLrc&&b_beginPlay) //如果有歌词。
{
for(int i=0; i<lrc.m_recordArray.GetSize(); i++)
{
int ll = (int)pos;
double nnn=lrc.m_recordArray[i]->m_time;
int lll = (int)(nnn/100);
if (lll == ll)
{
str_lrc = lrc.m_recordArray[i]->m_str;
m_NewLrc.SetWindowText(L"歌词:" + str_lrc);
}
}
}
int fen,miao;
if (duration < 60)
{
fen = 0;
miao = duration;
}
else
{
miao = (int)duration%60;
fen = (int)duration /60;
}
CString s1;
s1.Format(L"%02d:%02d",fen,miao);
if (pos<60)
{
temp_second = (int)pos;
temp_minute = 0;
}
else
if (pos>=60)
{
temp_second = (int)pos % 60;
temp_minute = (int)pos / 60;
}
kkk_minute.Format(L"%02d",temp_minute);
kkk_second.Format(L"%02d",temp_second);
temp_time = L"播放时间: "+kkk_minute + ":" + kkk_second + " | " +s1;
if (b_beginPlay)
{
m_PlayTime.SetWindowText(temp_time);
}
//播放下一首
if (pos == duration)
{
if (!b_btn_round)//随 机
{
int l_max = m_ListMp3.GetCount();
xxx = rand()%(l_max );
}
else//循环
{
if (m_ListMp3.GetCount() == 1)
{
xxx = 0;
}
else
if (xxx == m_ListMp3.GetCount() - 1)
xxx = 0;
else
xxx++;
}
CString name_ ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -