⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playmp3dlg.cpp

📁 WinCE 简单的播放器。MFC写的。以前在PUDN上找到的。怕丢了重新上传下。支持WMA WAV MP3,支持LRC 播放
💻 CPP
📖 第 1 页 / 共 3 页
字号:
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 + -