| | |
Threads and MediaPlayer component problem
Please support our Pascal and Delphi advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Jan 2007
Posts: 8
Reputation:
Solved Threads: 0
Ok, so im just finishing a media player program which works to an extent. Now, the problem im having is that i need to load a new file into the media player component and play it, after a previous song has finished playing. To acomplish this, i have written a thread which starts as a song begins to play, then waits until the song has finished. After this, it runs a prodecure to find and play the next song in the list.
Although it plays the next song in the list as it should, it seems to be loading the song into a player that i dont have access to controlling. (As if it was creating another player and using that instead of the one i've given it.)
If i can solve this problem, i would be delighted as this has been haunting me for quite some time.
Here is the code for the important bits.
This is the procedure to find and play the next song. (There is a similar procedure for shuffleing the songs.)
This is the procedure to actually play the song. (This procedure starts the thread.)
This is the thread that calls the next song procedure.
Just in case, here are all the global variable declerations.
If anyone can work out why the next song is being played in what seems to be a different mediaplayer component and not the one i give it, I would be very grateful.
Thank you in advance for any help anyone may be able to provide.
Carson
Although it plays the next song in the list as it should, it seems to be loading the song into a player that i dont have access to controlling. (As if it was creating another player and using that instead of the one i've given it.)
If i can solve this problem, i would be delighted as this has been haunting me for quite some time.
Here is the code for the important bits.
This is the procedure to find and play the next song. (There is a similar procedure for shuffleing the songs.)
Pascal and Delphi Syntax (Toggle Plain Text)
Procedure TMain_Form.NextSongNormal; var Next: integer; NextFilename: String; begin //Get The Next Track Next := MediaListRow + 1; //Clear Previous variables NextFilename := ''; //Check that the Next song isn't off the end of the list if Next < MediaList_ListView.Items.Count then begin //Get Song Information MediaList_ListView.Items.Item[MediaListRow].Selected := False; MediaList_ListView.Items.Item[MediaListRow].Focused := False; MediaList_ListView.Items.Item[Next].Selected := True; MediaList_ListView.Items.Item[Next].Focused := True; //Find selected Song details from Media List with MediaList_ListView do begin ID3Title := Selected.Caption; ID3Artist := Selected.SubItems.Strings[0]; ID3Album := Selected.SubItems.Strings[1]; NextFilename := Selected.SubItems.Strings[2]; end; //Make sure the previous media has been stopped if PlayingBoolean = True then Player_MediaPlayer.Stop; //Play Selected Playlist File PlayMedia(NextFilename); //Update the current Selected Row MediaListRow := Next; end; end;
This is the procedure to actually play the song. (This procedure starts the thread.)
Pascal and Delphi Syntax (Toggle Plain Text)
Procedure TMain_Form.PlayMedia(CurrentMedia: String); var Playing: String; thr : THandle; thrID : DWORD; begin //Reset TrackTime TrackTime := 0; //Change Play Control Buttons Play_Normal_Image.Visible := False; Pause_Normal_Image.Visible := True; //Clear previous variable Player_MediaPlayer.Filename := ''; //Sets Media Player Volume and Progress Bar Settings SetMPVolume(Player_MediaPlayer, VolumeControl_TrackBar.Position); MediaProgress_ProgressBar.Max := 0; //Puts Media File into Player and Play Player_MediaPlayer.Close; Player_MediaPlayer.FileName := CurrentMedia; Player_MediaPlayer.Open; Player_MediaPlayer.Play; //Set Playing Boolean to True PlayingBoolean := True; //Get the track length TrackTime := Player_MediaPlayer.Length; //Create the TrackFinished Thread Thr := CreateThread(nil, 0, @TrackFinished, nil, 0, ThrID); if (Thr = 0) then ShowMessage('Thread not created'); //Sets the Max value for progress bar to allow the progress bar to start MediaProgress_ProgressBar.Max := TrackTime * 1000; //Get ID3 Information for current media GetID3(CurrentMedia); //Get, Format and Display Song information Playing := ID3Artist + ' - ' + ID3Title; Main_StatusBar.Panels.Items[2].Text := 'Now Playing: ' + Playing; end;
This is the thread that calls the next song procedure.
Pascal and Delphi Syntax (Toggle Plain Text)
Function TrackFinished(P:Pointer):LongInt; stdcall; begin //Sleep whilst playing starts Sleep(500); //Sleep for a but Sleep(UMain_Unit.TrackTime); //Set Playing Boolean to False UMain_Unit.PlayingBoolean := False; //Check Playing options and perform corresponding task If Options_Form.Shuffle_CheckBox.Checked = False then begin //Play Next Song Main_Form.NextSongNormal; //Exit Thread Exit; end else begin //Play Random Next Song Main_Form.NextSongShuffle; //Exit Thread Exit; end; end;
Just in case, here are all the global variable declerations.
Pascal and Delphi Syntax (Toggle Plain Text)
var Main_Form: TMain_Form; //Directory Variables RootDirectory, CurrentMedia, CurrentFile: String; //WMA Tag Variables WMA: TWMAfile; WMATitle, WMAArtist, WMAAlbum, WMAYear, WMAGenre, WMATrack, WMAComment: string; //ID3 Tag Variables ID3: Tid3v2Tag; ID3Title, ID3Artist, ID3Album, ID3Year, ID3Genre, ID3Track, ID3Comment: String; //Variables for threads TrackThr, LibraryThr: THandle; //Other Variables Found, PlaylistCount, Added, CurrentPlaylistRow, MediaListRow, TrackTime: integer; PlayingBoolean, Searching, Shuffle: boolean; SearchFile: string;
If anyone can work out why the next song is being played in what seems to be a different mediaplayer component and not the one i give it, I would be very grateful.
Thank you in advance for any help anyone may be able to provide.
Carson
![]() |
Similar Threads
- IBM Thinkpad T2x series dead machine problem: any information?? (Troubleshooting Dead Machines)
- Rundll stuff, bridge.dll, p2esocks_1012.dll, and other know spyware on startup (Viruses, Spyware and other Nasties)
- IE resets home page to "about blank" upon exit (Viruses, Spyware and other Nasties)
- Need review of HJT log (Viruses, Spyware and other Nasties)
- HELP== having some 2020 search and sear 1 problems. (Viruses, Spyware and other Nasties)
- Internet Explorer not opening from desktop (Viruses, Spyware and other Nasties)
- Another "bridge.dll"-problem (Viruses, Spyware and other Nasties)
- error message when i log onto windows (Viruses, Spyware and other Nasties)
Other Threads in the Pascal and Delphi Forum
- Previous Thread: How can I make a download when my program is opened?
- Next Thread: counting elements in the queue
| Thread Tools | Search this Thread |





