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

📄 audioplaydlg.cpp

📁 一款用与WINCE.0下播放MP3的播放软件,可以播放多中音频文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#ifdef TESTPLAYER
	m_Player.SetVolume(VOL_SILENCE);
#endif
	m_btnMute.ShowWindow(SW_SHOW);
	m_btnVol.ShowWindow(SW_HIDE);
}
void CAudioPlayDlg::GetAudioDuration()
{
#ifdef TESTPLAYER
	m_Player.GetMediaDuration(m_dDuration);
#endif
}

void CAudioPlayDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

#ifdef TESTPLAYER
	LONG  lRemainingSecs;
	double	 rate = 0.0, llCurDur= 0.0;
	TCHAR	chDuration[MAX_STRING];
	TCHAR	chCurTime[MAX_STRING];

	if((nIDEvent == TIME_AUDIO_SECID)&&(m_Player.play_state == STATE_PLAY))
	{
		//change this to get_curtime
		m_Player.GetMediaCurrPos(llCurDur);
		//calculate time
		lRemainingSecs = (LONG)llCurDur;
		
		m_nTimeHour = (int)lRemainingSecs / 3600;   // 3600 seconds in the hour
		lRemainingSecs  = lRemainingSecs % 3600;
		
		m_nTimeMin = (int)lRemainingSecs / 60;   // 60 seconds in the minute
		lRemainingSecs    = lRemainingSecs % 60;
		
		m_nTimeSec = (int)lRemainingSecs;

		//convert time to string and display
		wsprintf(chCurTime, L"%02d:%02d:%02d", m_nTimeHour, m_nTimeMin, m_nTimeSec );
		wsprintf(chDuration, L"%02d:%02d:%02d", (int)m_dDuration/3600,(int)m_dDuration/60,(int)m_dDuration%60);
		DisplayTime(chDuration,chCurTime);
		
		//calculate progress slider position
		rate = llCurDur/m_dDuration;
		//set position
		m_sliderPro.SetPos((int)(rate*m_nProWidth));
		//check audio auto stop
		m_Player.checkautostop();
	}
	else if((nIDEvent == TIME_AUDIO_SECID)&&(m_Player.play_state == STATE_INIT))
	{
		//when play over, so play next music
		OnNextFile();
	}
#endif
	if(nIDEvent == TIME_AUDIO_INFO)
	{
		//switch to display audio information
		switch(m_nDisplayIdx)
		{
		case 0:
			m_MusicInfo.SetWindowText(GetFileName(m_chFileName));
			break;
		case 1:
			m_MusicInfo.SetWindowText(m_chMp3Title);
			break;
		case 2:
			m_MusicInfo.SetWindowText(m_chMp3Artist);
			break;
		case 3:
			m_MusicInfo.SetWindowText(m_chMp3Album);
			break;
		case 4:
			m_MusicInfo.SetWindowText(m_chMp3Remark);
			break;
		}
		m_nDisplayIdx++;
		if(m_nDisplayIdx > 4)
			m_nDisplayIdx = 0;
	}
	CDialog::OnTimer(nIDEvent);
}


void CAudioPlayDlg::ResetTimeAndSlider()
{
	//reset time and slider
	TCHAR	chDuration[MAX_STRING];
	TCHAR	chCurTime[MAX_STRING];
	CRect	btnRect;
	
	m_nTimeHour = 0;
	m_nTimeMin = 0;
	m_nTimeSec = 0;
	
	//time
	wsprintf(chDuration, L"%02d:%02d:%02d", 
		(int)m_dDuration/3600,(int)m_dDuration/60,(int)m_dDuration%60);
	wcscpy(chCurTime, L"00:00:00");
	DisplayTime(chDuration,chCurTime);
	//slider
	m_sliderPro.SetPos(0);
}

void CAudioPlayDlg::DisplayTime(TCHAR*  TotalTime,TCHAR* CurTime)
{
	TCHAR   TmpChar[MAX_STRING];
	
	//display time
	wcscpy(TmpChar,CurTime);
	wcscat(TmpChar,L"/");
	wcscat(TmpChar,TotalTime);
	m_Time.SetWindowText(TmpChar);
}


// void CAudioPlayDlg::OnPlaymodeAll() 
// {
// 	// TODO: Add your control notification handler code here
// 	m_PlayMode = PLAYMODE_ALL;
// 	m_btnOne.ShowWindow(SW_HIDE);
// 	m_btnAll.ShowWindow(SW_SHOW);
// 	m_btnRand.ShowWindow(SW_HIDE);
// }
// 
// void CAudioPlayDlg::OnPlaymodeOne() 
// {
// 	// TODO: Add your control notification handler code here
// 	m_PlayMode = PLAYMODE_ONE;
// 	m_btnOne.ShowWindow(SW_SHOW);
// 	m_btnAll.ShowWindow(SW_HIDE);
// 	m_btnRand.ShowWindow(SW_HIDE);
// }
// 
// void CAudioPlayDlg::OnPlaymodeRand() 
// {
// 	// TODO: Add your control notification handler code here
// 	m_PlayMode = PLAYMODE_RAND;
// 	m_btnOne.ShowWindow(SW_HIDE);
// 	m_btnAll.ShowWindow(SW_HIDE);
// 	m_btnRand.ShowWindow(SW_SHOW);
// }

void CAudioPlayDlg::GetMp3Attr()
{
	FILE *fp;
	const int seekPos = 128;
	int i = 0,j = 0;
	char* m_buff = (char *)malloc(seekPos+1);
	MP3_ATTR	mp3Attr;
	TCHAR   WideCharStr[MAX_STRING];
	
	memset(m_buff,0,sizeof(char)*128);
	
	//open file,get last 128 byte
	if((fp = _wfopen(m_chFileName,L"rb"))==NULL)
	{
		free(m_buff);
		return;
	}

	//seek to end
	fseek(fp, 0, SEEK_END);
	//seek to -128
	fseek(fp, ftell(fp)-128, SEEK_SET);
	//read last content
	i = fread(m_buff, sizeof(mp3Attr), seekPos, fp);
	fclose(fp);

	//evaluate to m_mp3attr
	int position = 0;//loop begin
	int currentIndex = 0;//attr current index
	//get tag
	for(i = currentIndex;i<currentIndex+3;i++)
	{
		mp3Attr.tag[j] = m_buff[i];
		position++;
		j++;
	}
	currentIndex = position;
	//get title	
	for(i = currentIndex,j = 0;i<currentIndex+30;i++)
	{
		mp3Attr.title[j] = m_buff[i];
		position++;
		j++;
	}
	//conversion
	MultiByteToWideChar(CP_ACP,0,mp3Attr.title,-1,(LPWSTR)WideCharStr,30);
	wcscpy(m_chMp3Title,L"Title:     ");
	wcscat(m_chMp3Title,WideCharStr);
	currentIndex = position;
	//get artist
	for(i = currentIndex,j = 0;i<currentIndex+30;i++)
	{
		mp3Attr.artist[j] = m_buff[i];
		position++;
		j++;
	}
	//conversion
	MultiByteToWideChar(CP_ACP,0,mp3Attr.artist,-1,(LPWSTR)WideCharStr,30);
	wcscpy(m_chMp3Artist,L"Artist:     ");
	wcscat(m_chMp3Artist,WideCharStr);
	currentIndex = position;
	//get album
	for(i = currentIndex,j = 0;i<currentIndex+30;i++)
	{
		mp3Attr.album[j] = m_buff[i];
		position++;
		j++;
	}
	//conversion
	MultiByteToWideChar(CP_ACP,0,mp3Attr.album,-1,(LPWSTR)WideCharStr,30);
	wcscpy(m_chMp3Album,L"Album:     ");
	wcscat(m_chMp3Album,WideCharStr);
	currentIndex = position;
	//get year
	for(i = currentIndex,j = 0;i<currentIndex+4;i++)
	{
		mp3Attr.year[j] = m_buff[i];
		position++;
		j++;
	}
	currentIndex = position;
	//get remark
	for(i = currentIndex,j = 0;i<currentIndex+30;i++)
	{
		mp3Attr.remark[j] = m_buff[i];
		position++;
		j++;
	}
	//conversion
	MultiByteToWideChar(CP_ACP,0,mp3Attr.remark,-1,(LPWSTR)WideCharStr,30);
	wcscpy(m_chMp3Remark,L"Remark:     ");
	wcscat(m_chMp3Remark,WideCharStr);
	free(m_buff);
} 



void CAudioPlayDlg::OnOpenFile() 
{
	// TODO: Add your control notification handler code here
	CFileListDlg dlg(this);
	//get file list dlg
	m_AudioList = &dlg;
	dlg.DoModal();
	
	//get current full file name
	if(m_AudioList->m_chCurFilename[0]!=0)
	{
		//m_chFileName is full file name
		wcscpy(m_chFileName, m_AudioList->m_chCurFilename);
		AudioPlay();
	}
	
}
TCHAR* CAudioPlayDlg::GetFileName(TCHAR* chFullFileName)
{
	if (chFullFileName == NULL || chFullFileName[0] == 0)
		return NULL;
	
	int siLen = wcslen(chFullFileName);
	
	for(int i = siLen - 1; i >= 0; --i)
	{
		if(chFullFileName[i] == '\\')
			break;
	}
	
	return chFullFileName + i + 1;
}
void CAudioPlayDlg::OnNextFile() 
{
	// TODO: Add your control notification handler code here
	CString		Str;
	if(m_chFileName[0])
	{
		switch(m_PlayMode)
		{
		case PLAYMODE_ALL:
			if(g_nCurSelItem+1<g_StrList.GetCount())
				g_nCurSelItem++;
			else
				g_nCurSelItem = 0;
			break;
		case PLAYMODE_ONE:
			break;
		case PLAYMODE_RAND:
			g_nCurSelItem = rand() % g_StrList.GetCount();
			break;
		}
		//081030,jelly add it for access violation
		m_Player.stop();
		if(g_nCurSelItem != -1)  //g_nCurSelItem == -1, there is not file in playlist
		{
			Str = g_StrList.GetAt(g_StrList.FindIndex(g_nCurSelItem));
			//get current full file name
			wcscpy(m_chFileName,Str);
			//then open it
			AudioPlay();
		}
	}
}

void CAudioPlayDlg::OnLastFile() 
{
	// TODO: Add your control notification handler code here
	CString		Str;
	if(m_chFileName[0])
	{
		switch(m_PlayMode)
		{
		case PLAYMODE_ALL:
			if(g_nCurSelItem>0)
				g_nCurSelItem--;
			else
				g_nCurSelItem = g_StrList.GetCount()-1;
			break;
		case PLAYMODE_ONE:
			break;
		case PLAYMODE_RAND:
			g_nCurSelItem = rand() % g_StrList.GetCount();
			break;
		}
		//081030,jelly add it for access violation
		m_Player.stop();
		if(g_nCurSelItem != -1)  //g_nCurSelItem == -1, there is not file in playlist
		{
			Str = g_StrList.GetAt(g_StrList.FindIndex(g_nCurSelItem));
			//get current full file name
			wcscpy(m_chFileName,Str);
			//then open it
			AudioPlay();
		}
	}
}


HBRUSH CAudioPlayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr;
	
	// TODO: Change any attributes of the DC here
	if(nCtlColor==CTLCOLOR_STATIC)
	{
		int ID = pWnd->GetDlgCtrlID();

		pDC->SetBkMode(TRANSPARENT);  

		switch(ID)
		{
		case IDC_STATIC_INFO:
			hbr = CreateSolidBrush(COLOR_BLUE);
			pDC->SetTextColor(COLOR_YELLOW);
			break;
		case IDC_STATIC_TIME:
			hbr = CreateSolidBrush(COLOR_BLACK);
			pDC->SetTextColor(COLOR_YELLOW);
			break;
		}
	}   
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
}


LRESULT CAudioPlayDlg::OnBitmapSliderMoved(WPARAM wParam, LPARAM lParam)
{
	double  dRate = 0.0;
	int		nPos = 0, nLeftVol = 0, nRightVol = 0;

	if(m_chFileName[0] == 0)
		return 0;

	if( wParam == IDC_SLIDER_VOL)
	{
		m_nPos = m_sliderVol.GetPos();
		m_sliderVol.SetPos(m_nPos);
		//only m_bMute is false
		if(m_bMute == FALSE)
		{
			//calculate rate
			dRate = (double)m_nPos/m_nVolWidth;
			//delete this for OS volume
// 			nLeftVol = nRightVol = (int)(0xffff*dRate);
// 			m_nVolume =  nLeftVol<<16|nRightVol;
			//for change audio volume
			m_nVolume = (LONG)(dRate*(VOL_FULL-VOL_SILENCE)+VOL_SILENCE);

#ifdef TESTPLAYER
			m_Player.SetVolume(m_nVolume);
#endif
		}
	}
	else if(wParam == IDC_SLIDER_PRO)
	{
		m_nPos = m_sliderPro.GetPos();
		//set new position
		m_sliderPro.SetPos(m_nPos);
		//calculate rate
		dRate = (double)m_nPos/m_nProWidth;

#ifdef TESTPLAYER
		m_Player.SetMediaPos(m_dDuration*dRate);
#endif
	}
	return 0;
}

LRESULT CAudioPlayDlg::OnBitmapSliderMoving(WPARAM wParam, LPARAM lParam)
{
	if( wParam == IDC_SLIDER_PRO )
	{
		//set new position
		m_sliderPro.SetPos(m_sliderPro.GetPos());
	}	
	return 0;
}


void CAudioPlayDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	//point in play mode all
	if(PtInRect(&RectModeAll, point))
	{
		m_PlayMode = PLAYMODE_ALL;
	}//point in play mode one
	else if(PtInRect(&RectModeOne, point))
	{
		m_PlayMode = PLAYMODE_ONE;
	}//point in play mode rand
	else if(PtInRect(&RectModeRand, point))
	{
		m_PlayMode = PLAYMODE_RAND;
	}
	//refresh
	LoadPlayMode();

	CDialog::OnLButtonDown(nFlags, point);
}

//this only for OS volume
void IncreaseVolume() 
{
	DWORD m_curVolume=0;
	waveOutGetVolume(0,(unsigned long*)&m_curVolume);
	m_curVolume += VOL_SET_STEP;
	if (m_curVolume > VOL_FULL) m_curVolume = VOL_FULL;
	waveOutSetVolume(0, m_curVolume);
}

void DecreaseVolume() 
{
	DWORD m_curVolume=0;
	waveOutGetVolume(0,(unsigned long*)&m_curVolume);
	m_curVolume -= VOL_SET_STEP;
	if (m_curVolume < VOL_SILENCE) m_curVolume = VOL_SILENCE;
	
	waveOutSetVolume(0, m_curVolume);
}

void CAudioPlayDlg::OnSliderVol() 
{
	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -