School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become an Expert!

Join 307,094 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 2,022 people online right now. Registration is fast and FREE... Join Now!




MyMusic Player

 
Reply to this topicStart new topic

> MyMusic Player, How to implement a simple MP3 Player

AdamSpeight2008
Group Icon



post 12 Jul, 2008 - 06:46 AM
Post #1


MyMusic Player

Modification: You'll need to add a COM Reference Windows Media Player (the one with path that ends InterOp.WMPLib.dll)

Start a new Windows Form Application project
Ingredients
3 x Buttons
But_Play
But_Pause
But_Stop
2 x Textboxes
Txt_TrackName
Txt_Progress
These need to be readonly
2 x TrackBar
TrackPosition
Volume (Vertical orientation, Minimum =0. Maximum=100)
1 x Timer
Timer1
1 x Listview (Multi Select = False, View=Details, HeaderStyle None)
Add one column called TrackCol


The code
View the code for Form1 and insert the following code

vb

Public Class Form1
#Region "Color Settings"
Dim CurrentTrackColor As System.Drawing.Color = Color.Red
Dim PausedTrackColor As System.Drawing.Color = Color.LightYellow
#End Region
Dim WithEvents Player As New WMPLib.WindowsMediaPlayer
Dim files As Collections.ObjectModel.ReadOnlyCollection(Of String)
Dim titles As New List(Of String)
Dim CurrentPlaying As Integer = 0
Dim PreviouslyPlaying As Integer = 0

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
' Dispose of player
Player = Nothing
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TrackCol.Width = TrackList.Width - 20
But_Pause.Enabled = False
But_Stop.Enabled = False
files = FileIO.FileSystem.GetFiles(My.Computer.FileSystem.SpecialDirectories.MyMusic, FileIO.SearchOption.SearchAllSubDirectories, "*.mp3")
For Each a As String In files
Me.TrackList.Items.Add(FileIO.FileSystem.GetName(a))
Next
Volume.Value = Player.settings.volume
Me.Txt_TrackName.Text = Player.URL
Player.settings.autoStart = False
Player.URL = files(0)
Player.enableContextMenu = False
With Me.Timer1
.Interval = 500
.Start()
.Enabled = True
End With
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
' Form is closing, so shutdown player
Player.close()
End Sub

Private Sub ClickedOnPlayButton(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But_Play.Click
GUIMode("Play")
updatePlayer()
Player.controls.play()
End Sub

Private Sub ClickedOnStopNutton(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But_Stop.Click
Player.controls.stop()
GUIMode("Stopped")
End Sub

Private Sub ClickedOnPauseButton(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But_Pause.Click
If Player.playState = WMPLib.WMPPlayState.wmppsPaused Then
GUIMode("Play")
Else
GUIMode("Paused")
End If
End Sub

Private Sub GUIMode(ByRef Guimode As String)
Select Case Guimode
Case "Play"
' Put GUI in playing mode guise
Player.controls.play()
But_Pause.BackColor = System.Drawing.SystemColors.Control
But_Pause.Enabled = True
But_Stop.Enabled = True
But_Play.Enabled = True
Case "Paused"
' put gui in paused mode guise
But_Pause.Enabled = True
But_Stop.Enabled = False
But_Play.Enabled = False
But_Pause.BackColor = PausedTrackColor
Player.controls.pause()
Case "Stopped"
But_Pause.Enabled = False
But_Stop.Enabled = False

End Select
End Sub

Private Sub ScrollingVolume(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Volume.Scroll
' Change the player's volume
Player.settings.volume = Volume.Value
End Sub

Private Sub Player_MediaError(ByVal pMediaObject As Object) Handles Player.MediaError
MessageBox.Show("Unrecoverable Problem. Shutting Down", "MyMusic Player")
Me.Close()
End Sub

Private Sub Player_PlayStateChange(ByVal NewState As Integer) Handles Player.PlayStateChange
Static Dim PlayAllowed As Boolean = True
Select Case CType(NewState, WMPLib.WMPPlayState)
Case WMPLib.WMPPlayState.wmppsReady
If PlayAllowed Then
Player.controls.play()
End If
Case WMPLib.WMPPlayState.wmppsMediaEnded
' Reach end of track move onto next, looping around
PreviouslyPlaying = CurrentPlaying
CurrentPlaying = (CurrentPlaying + 1) Mod files.Count
' Start protection (without it next wouldn't play
PlayAllowed = False
' Play track
Player.URL = files(CurrentPlaying)
Player.controls.play()
' End Protection
PlayAllowed = True
updatePlayer()
End Select

End Sub

Private Sub updatePlayer()
' Display track name
Txt_TrackName.Text = Player.currentMedia.name
' Update TrackPostion
With TrackPosition
.Minimum = 0
.Maximum = CInt(Player.currentMedia.duration)
.Value = CInt(Player.controls.currentPosition())
End With
' Display Current Time Position and Duration
Txt_Progress.Text = Player.controls.currentPositionString & vbTab & Player.currentMedia.durationString
' Set Volume slide to match current volume
Volume.Value = Player.settings.volume
' Is the CurrentPlaying Track No. is different to the Previous Track number.
If CurrentPlaying <> PreviouslyPlaying Then
' Yes,
' Set the forecolor of the corrisponding track, assiociated with the previous playing track, with the control color
TrackList.Items(PreviouslyPlaying).ForeColor = System.Drawing.SystemColors.ControlText
End If
' Set the forecolor of the corrisponding track, assiociated with the currently playing track, with the current track color
TrackList.Items(CurrentPlaying).ForeColor = CurrentTrackColor

End Sub

Private Sub Tracks_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackList.MouseDoubleClick
GUIMode("Play")

' A track in the tracklisting has been double clicked on
PreviouslyPlaying = CurrentPlaying
' Set CurrentPlaying to position of selected track.
CurrentPlaying = TrackList.SelectedIndices(0)
' Play the track
Player.URL = files(CurrentPlaying)
updatePlayer()
Player.controls.play()
End Sub

Private Sub ScrollingTrackPosition(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackPosition.Scroll
' Seek the through track
Player.controls.pause()
Player.controls.currentPosition = TrackPosition.Value
Player.controls.play()
updatePlayer()
' Allow the app to do some processing
Application.DoEvents()
End Sub

Private Sub UpdatePlayerTimer(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
updatePlayer()
End Sub

End Class


Bake in a preheated over a gas mark 6 for 1 hour.

Here one I made earlier
Attached File  MediaPlayer.zip ( 923.23k ) Number of downloads: 1333

Run

Now enjoy!

This post has been edited by AdamSpeight2008: 15 Jul, 2008 - 03:03 AM
Go to the top of the page
+Quote Post


Register to Make This Ad Go Away!

jagatworld
Group Icon



post 14 Jul, 2008 - 11:07 PM
Post #2
Hi,
Everything looks fine, but only for that , I'm unable to find this library / control ......

Dim WithEvents Player As New WMPLib.WindowsMediaPlayer
Error : Type 'WMPLib.WindowsMediaPlayer' is not defined.

it is giving error.
Should I import some control or add any reference?

I use VS 2005 Team Suite.

Thanks and Regards.

Jagat.
Go to the top of the page
+Quote Post

AdamSpeight2008
Group Icon



post 15 Jul, 2008 - 03:02 AM
Post #3
QUOTE(jagatworld @ 15 Jul, 2008 - 08:07 AM) *

Hi,
Everything looks fine, but only for that , I'm unable to find this library / control ......

Dim WithEvents Player As New WMPLib.WindowsMediaPlayer
Error : Type 'WMPLib.WindowsMediaPlayer' is not defined.

it is giving error.
Should I import some control or add any reference?

I use VS 2005 Team Suite.

Thanks and Regards.

Jagat.


You'll need to add a COM Reference Windows Media Player (the one with path that ends InterOp.WMPLib.dll)
Go to the top of the page
+Quote Post

Speedular
*



post 25 Dec, 2008 - 12:36 AM
Post #4
Big thanks to you; it was very helpful;
I'm just wondering it there a way for example to make the player start at a certain position that I specify; let us say I've got the current position " position = player.Ctlcontrols.currentPosition" and I closed the player app and when I start it again I want it to start from that "position" is this possible?
Go to the top of the page
+Quote Post

juunas
**



post 26 Mar, 2009 - 06:31 AM
Post #5
Hey, I have a question about this part:


CODE
CurrentPlaying = (CurrentPlaying + 1) Mod files.Count


How exactly does that work? From what I know, modulus would do the job if it was the last song, returning 0. But what if say, you're at index 4 of the playlist, and theres a total of 10 songs, last index being 9. So, the calculation would be:

(4+1) Mod 10

5 Mod 10

Basically 5/10 is 0,5 so I dont know whats the remainder of that, care to explain? I know it works, its just that I want to understand it.
Go to the top of the page
+Quote Post

AdamSpeight2008
Group Icon



post 26 Mar, 2009 - 07:05 AM
Post #6
5 / 10 = 0 remainder 5
MOD is simply, give me the remainder from the division.

It simple way to implement continuous looping of all the songs.
Go to the top of the page
+Quote Post

juunas
**



post 26 Mar, 2009 - 07:08 AM
Post #7
Of course!! Dumb me! tongue.gif

Thanks, now I got it.
Go to the top of the page
+Quote Post

hayt777
*



post 27 May, 2009 - 09:09 PM
Post #8
So i downloaded your MediaPlayer.zip file.
I'm having the problem that it reads the mp3 files properly and places the track names and all that, then crashes with "unrecoverable error" msgbox.

MSVC Debugger says that

Player.URL = files(0)

Is at fault, and says index is out of range must be non-negative and less than the size of the collection.

The folder that is targeted for the player to read for mp3 files has only 1 mp3 file.

Any ideas why this is happening?

Edit: Ok, It appears to work fine on another one of my computers, just on the developing computer it has the index out of range issue.

However on another computer when you click the 'X' button to close the form, it closes and restarts the current track over again, and that track keeps playing over and over, and you cant stop it since the form was destroyed, if you open the form again, it will just start playing the first track again, mixing that with the already playing track.

I'm really confused now, any ideas would be greatly appreciated, thanks.

Another Quick Edit: Just Noticed that the player autostarts playing even though in the code the player settings are set to autostart = false


This post has been edited by hayt777: 27 May, 2009 - 11:17 PM
Go to the top of the page
+Quote Post

AdamSpeight2008
Group Icon



post 8 Jun, 2009 - 11:30 PM
Post #9
QUOTE(hayt777 @ 28 May, 2009 - 04:09 AM) *

So i downloaded your MediaPlayer.zip file.
I'm having the problem that it reads the mp3 files properly and places the track names and all that, then crashes with "unrecoverable error" msgbox.

MSVC Debugger says that

Player.URL = files(0)

Is at fault, and says index is out of range must be non-negative and less than the size of the collection.

The folder that is targeted for the player to read for mp3 files has only 1 mp3 file.

Any ideas why this is happening?

It couldn't find the file!. Correction in code that follows.

QUOTE

Another Quick Edit: Just Noticed that the player autostarts playing even though in the code the player settings are set to autostart = false


Added a new constant at start
CODE

Const CONST_AutoPlayFirst As Boolean = False

Alter Form Load
CODE

If files.Count = 0 Then
   MessageBox.Show("No Music Files Found", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
   Me.Close()
   Exit Sub
  End If
  Player.settings.autoStart = CONST_AutoPlayFirst
  Player.enableContextMenu = False
  Player.settings.invokeURLs = False
  Player.URL = files(0)


Comment out the code
CODE

   Case WMPLib.WMPPlayState.wmppsReady
    'If PlayAllowed Then
    ' Player.controls.play()
    'End If



QUOTE

Edit: Ok, It appears to work fine on another one of my computers, just on the developing computer it has the index out of range issue.

However on another computer when you click the 'X' button to close the form, it closes and restarts the current track over again, and that track keeps playing over and over, and you cant stop it since the form was destroyed, if you open the form again, it will just start playing the first track again, mixing that with the already playing track.

I'm really confused now, any ideas would be greatly appreciated, thanks.

Try adding corrections.See what happens.
Go to the top of the page
+Quote Post


Fast ReplyReply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 


Lo-Fi Version Time is now: 11/21/09 11:36AM

Live Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

Tutorials

Programming

Web Development

Reference Sheets

Code Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month