Click here to Skip to main content
Click here to Skip to main content

Media Player

By , 20 Sep 2003
 

Sample image

Sample image

<!-- Add the rest of your HTML here -->

Introduction

Media Player

This is a simple media player which plays all audio and video formats .I am updating it becouse there were many of many complaints about it . Actually i had not time to do it , now found some ,so updating it . It uses Media Control Interface(MCI) Functions in the MFC .It is very simple , that is we only have to give the path and file name and other parameters to the function and the function will play that file .

Description

First the file names are taken from the user using the file dialog .These file name are stored in an array of CString type Files[Index] ; Index is the the index of files .Multiple files can be selected at a time . Now to Create window of playing the file is created in the following  function

void CMP3Dlg::CreateWindowplay(CString str)
{
if(m_Video!=NULL)    // m_video is handler of HWND type which is 
			//checked wether it has already some window data 
OnFileClose();  
m_Path=str;
MCIWndRegisterClass();
KillTimer(0);
SetTimer(0,1000,NULL);   //  Set Timer 
m_Path=str;
if(m_Video == NULL &&flag==0)
{
m_Video =MCIWndCreate(m_screen.GetSafeHwnd(),AfxGetInstanceHandle()
,MCIWNDF_NOOPEN|MCIWNDF_NOPLAYBAR |MCIWNDF_NOMENU,m_Path);   
// Create the Window for playing m_Path  is file name
::ShowWindow(m_Video,SW_MAXIMIZE);
}
m_SVolume.SetRange( 0, 1000, TRUE );  // Set Slider range
m_SVolume.SetPos(500);   // Set volume Position initially 
m_mute.SetCheck(1);  // Set Checked the Volume check box 
ptr=FromHandle(m_Video);   // Get handler of Window created 
ptr->UpdateWindow();

MCIWndSetTimeFormat(m_Video ,"ms");   // Set time Format 
m_length=MCIWndGetLength(m_Video );   // Get Video Length
TotalTime=m_length/1000;
TotalTime=TotalTime/100;
m_Seek.SetRange( 0, m_length, TRUE );   // Set Seek slider bar range
m_Seek.SetPos(0);
MCIWndPlay(m_Video);   // Play the File
flag=1;
UpdateData(FALSE);
MCIWndSetVolume(m_Video, m_Volume);   // Set Volume to m_Volume 
e=0; // Check for previus created window
}

So now Our window is created and file is played . Now there is a option for pause that is

void CMP3Dlg::Onpause() 
{
// TODO: Add your control notification handler code here
if(flag==0)
{
flag=1;
MCIWndResume(m_Video);

}
else
{
flag=0;
MCIWndPause(m_Video);

}

}
to stop 
MCIWndSeek(m_Video,MCIWND_START);

To move to next file ,

OnFileClose() ;
SongNo++;
if(Files[SongNo]!="" )
{
CreateWindowplay(Files[SongNo]);  // again Create the window 
MCIWndPlay(m_Video);
flag=1;
}
else 
if(Index==0)
OnOpen();
else 
{
SongNo=0;
OnPlayPrevius() ;   // check if Index is full play previous 
}
}
The is a Implemenation for CD ROM door open and close . this is done as ,
// mciSendString("set cdaudio door open",NULL,NULL,NULL);

To Increase the Speed of Play

int a;
a=MCIWndGetSpeed(m_Video);
a=a+200;
if(a<2000)
MCIWndSetSpeed(m_Video,a);

Similarly there is a function to decrease the speed

For full screen option,  there is another dialog upon which the window is created . The dialog is maximized so full screen is got . It is done as

void CMP3Dlg::OnViewFullscreen() 
{
// TODO: Add your command handler code here
FullScreen=1;   // flag of full screen , Mode is Full screen
KillTimer(0);   // Kill timer
MCIWndDestroy(m_Video);  // destroy previous window 

// Now save the Context of Current file for full screen through FS object of 
//FullScreen Dialog
FS.SeekPos=SeekPos;   // Get seek position of previous window for new dialog 
 			//(Full screen)
FS.m_Volume=m_Volume;   // Get 
FS.m_Path=m_Path;
FS.DoModal();           // Create New dialog
SeekPos=FS.SeekPos;  // Return Back to Normal size and get New 
      			//Context from Full screen 
if(SeekPos==m_length )
{
if( repeat==1) 
{
OnPlayNext();    // Check whether the file has ended or seek is at end so 
                 //next file will also be played in the full //screen mode
Onfullscreen() ;
}
else
{
OnFileClose();
}

}
else
{
SetTimer(0,1000,NULL);

flag=1;   // Re-create Window for normal size play   
m_Video=MCIWndCreate(m_screen.GetSafeHwnd(),AfxGetInstanceHandle(),
MCIWNDF_NOOPEN|MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU ,m_Path);
::ShowWindow(m_Video,SW_MAXIMIZE);  // Restore the all Conext , volume value 
					//, seek postion ,,etc
MCIWndSetVolume(m_Video,m_Volume);
MCIWndSetTimeFormat(m_Video ,"ms");
MCIWndSetActiveTimer(m_Video,500);
ptr=FromHandle(m_Video);
m_length=MCIWndGetLength(m_Video); 
m_Seek.SetRange(0,m_length,TRUE);
MCIWndPlay(m_Video);
flag=1;
MCIWndSeek(m_Video,SeekPos);
MCIWndPlay(m_Video);
FullScreen=0;
ptr->UpdateWindow();
}
}
Now In new dialog Create Window and play according to previous context,
We will do it in the ShowWindow Function which is called first time when the
 dialog is created .
void FScreen::OnShowWindow(BOOL bShow, UINT nStatus) 
{
CDialog::OnShowWindow(bShow, nStatus);
CWnd* desk=GetDesktopWindow();  // Get the Desktop window's pointer
RECT re;
desk->GetClientRect(&re);
SetTimer(0,1000,NULL);
::ShowWindow(this->GetSafeHwnd(),SW_MAXIMIZE);   // Maximize window
// Now Create window for playing the file 
m_Video=MCIWndCreate(this->GetSafeHwnd(),AfxGetInstanceHandle(),
MCIWNDF_NOOPEN|MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU ,m_Path);
::ShowWindow(m_Video,SW_MAXIMIZE);  // Now set the previous saved context 
MCIWndSetTimeFormat(m_Video ,"ms");
MCIWndSetVolume(m_Video, m_Volume);
MCIWndSetActiveTimer(m_Video,500);
MCIWndSeek(m_Video,SeekPos);
MCIWndPlay(m_Video);
Length=MCIWndGetLength(m_Video);
}

We can add and remove  files to the Play list . There is another dialog for 
play list . 

To add files :

void playlist1::OnAdd() 
{
POSITION currPos;
CFileDialog avi(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY
,"All Files(*.*)|*.*|MP3 Files (*.mp3)|*.mp3|AVI Files(*.avi)|*.avi|");
if(avi.DoModal() == IDOK)
{
currPos = avi.GetStartPosition();
while(currPos != NULL)              // Get file names while now end of 
					//selection
{
m_Path = avi.GetNextPathName(currPos);
((CMP3Dlg *)GetParent())->Files[((CMP3Dlg*)GetParent())->m_Index]=m_Path;
m_control.AddString(m_Path);  // Add to List box
((CMP3Dlg*)GetParent())->m_Index=((CMP3Dlg*)GetParent())->m_Index+1;
}
UpdateData(FALSE);
}

}
Similary we can remove file through function 
void playlist1::OnRemove() 
{
// TODO: Add your control notification handler code here
i=m_control.GetCurSel();
m_control.DeleteString( i );
for(int j=0;j<=((CMP3Dlg*)GetParent())->m_Index;j++)
{
if(i==j)
{
((CMP3Dlg*)GetParent())->Files[i]=((CMP3Dlg*)GetParent())->Files[i+1];
for(int h=i;h<((CMP3Dlg*)GetParent())->m_Index;h++)
((CMP3Dlg*)GetParent())->Files[h]=((CMP3Dlg*)GetParent())->Files[h+1];
}
}
((CMP3Dlg*)GetParent())->m_Index--;

}

We can play a file  by double clicking on  File name

i=m_control.GetCurSel();
m_control.GetText(i,str);

if(((CMP3Dlg*)GetParent())->m_Video!=NULL)
{
MCIWndStop(((CMP3Dlg*)GetParent())->m_Video);
MCIWndDestroy(((CMP3Dlg*)GetParent())->m_Video);
((CMP3Dlg*)GetParent())->m_Video=NULL;
((CMP3Dlg*)GetParent())->m_Path=((CMP3Dlg*)GetParent())->OldFileName2; 
}
((CMP3Dlg*)GetParent())->NewFileName2=st;
((CMP3Dlg*)GetParent())->OldFilename=st;
((CMP3Dlg*)GetParent())->flag=0;
((CMP3Dlg*)GetParent())->CreateWindowplay(str);
The Shape of Dialog is got through
CRect r;
GetClientRect(r);
m_rgn.CreateEllipticRgn(04,04,r.Width(),r.Height());
SetWindowRgn(m_rgn,TRUE);

 

So thats all from me .What  could be done more in it ? that could be

1. We does not know about the file in the program ,whether its audio or video ,if audio to dont go to full screen

2. The full screen mechanism is not efficient , also it needs menu in full screen on right click .

3. Implementation of VCD cutter

and much more !!!!!!!!!!!!!

 


License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Tahir Naeem
Business Analyst
Germany Germany
Tahir Naeem is a Business Analyst at a Software Company in Germany.
 
Presently he is working in the area of Business Intelligence.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
BugError while playing .wav filemembervijaykumar.soni22-Mar-13 0:07 
Questiondfdmemberprabhatjain4-Oct-12 15:22 
Questiontoyoumemberzhangxiangxixi6-Dec-11 1:57 
Questionabout information about the referencesmemberMember 81126534-Aug-11 0:40 
Questionimplementationmembervinuvadakkemuriyil19-Jul-11 23:01 
GeneralAnaglyph/3d playermemberankireddy112231-Oct-10 20:34 
GeneralRunning the Projectmemberselonda19-Sep-10 22:44 
Questionneed to build projectmembersatilo1-Aug-10 16:39 
GeneralDev-C++membersmely3-Dec-09 21:59 
GeneralRe: Dev-C++memberTahir Naeem13-Mar-10 9:12 
GeneralNeed help on moving a line along with the audio slider positionmembervenki50218-Feb-09 7:08 
Questionhow to integrate new codec into this player?memberSantosh Chaurasia30-Jul-08 4:12 
AnswerRe: how to integrate new codec into this player?memberTahir Naeem30-Jul-08 5:31 
GeneralRe: how to integrate new codec into this player?memberSantosh Chaurasia30-Jul-08 5:45 
GeneralRe: how to integrate new codec into this player?memberTahir Naeem2-Aug-08 9:33 
GeneralBUG !!!memberanmytry25-Jan-08 2:19 
GeneralRe: BUG !!!memberTahir Naeem14-Feb-08 2:38 
Questionkeyboard accelerator?memberm2sawyer27-Feb-07 4:24 
AnswerRe: keyboard accelerator?memberTahir Naeem28-Feb-07 7:55 
GeneralMCI Errormembernaraimha2-Oct-06 23:42 
GeneralRe: MCI ErrormemberTahir Naeem3-Oct-06 1:22 
GeneralRe: MCI Errormembernaraimha3-Oct-06 2:47 
GeneralRe: MCI ErrormemberTahir Naeem3-Oct-06 2:51 
Generalcant play VOB filessussluniv04048-Nov-04 2:23 
GeneralRe: cant play VOB filessussTahir Naeem8-Feb-05 0:34 
GeneralErrormemberZero_Master9-Feb-04 20:40 
GeneralRe: Errormemberlwinkenb24-Apr-04 11:24 
QuestionWindows Media Player example in win32?memberdobrin_s_ivanov@yahoo.com30-Oct-03 2:15 
AnswerRe: Windows Media Player example in win32?sussAnonymous1-Dec-03 23:44 
GeneralError in resourcememberFahadAsh22-Sep-03 19:09 
GeneralRe: Error in resourcememberTahir Naeem30-Sep-03 1:24 
GeneralI wouldn't call this an article.memberlallous19-Jun-03 22:17 
GeneralHelp regarding Skin and othersmemberAYSHA SAEED22-Feb-03 4:15 
GeneralAakhir Bahrian Hi Ho Nan,Code Nahin DiamemberXclusiveGuy7-Feb-03 23:16 
GeneralWelcome to CodeProject!!memberWREY3-Feb-03 23:47 
GeneralThis could be a really interesting article if...memberJim Crafton3-Feb-03 5:45 
GeneralRe: This could be a really interesting article if...memberTahir Naeem4-Feb-03 6:38 
GeneralRe: This could be a really interesting article if...memberJim Crafton3-Jul-03 3:50 
GeneralRe: This could be a really interesting article if...memberTahir Naeem3-Jul-03 11:38 
GeneralRe: This could be a really interesting article if...membernn_10524-Oct-05 9:12 
Questionwhere's the source?sussanonymousone2-Feb-03 20:56 
AnswerRe: where's the source?memberSimon Brown3-Feb-03 1:42 
GeneralRe: where's the source?memberTahir Naeem27-Jul-03 12:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130617.1 | Last Updated 21 Sep 2003
Article Copyright 2003 by Tahir Naeem
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid