Uit listbox mp3 afspelen

Status
Niet open voor verdere reacties.
met 1 mp3 werkt het bijna perfect alleen hij begint niet met spelen als ik het nummer selecteer
 
Kijk, daar hebben we ons probleem: teveel mp3's om te verwerken.

Ik ga even kijken of ik een oplossing kan vinden met multithreading.
Een moment geduld a.u.b. :)
 
Werkt dit:

[cpp]Delegate Sub Add(ByVal List As List(Of ListViewItem))

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim Thread1 As New System.Threading.Thread(AddressOf Importeer)
Thread1.Start()
End Sub

Private Sub Importeer()
Dim list As New List(Of ListViewItem)
For Each item As String In IO.Directory.GetFiles("Map")
If item.EndsWith(".mp3") Then
Dim lv As New ListViewItem
lv.Text = IO.Path.GetFileName(item)
lv.SubItems.AddRange({item, New Mp3Class(item).GetDurationString})
list.Add(lv)
End If
Next
Finished(list)
End Sub

Private Sub Finished(ByVal List As List(Of ListViewItem))
If ListView1.InvokeRequired Then
Dim d As New Add(AddressOf Finished)
Me.Invoke(d, New Object() {List})
Else
For Each item As ListViewItem In List
ListView1.Items.Add(item)
Next
End If
End Sub[/cpp]
 
Laatst bewerkt:
ik heb de code

Delegate Sub Add(ByVal List As List(Of ListViewItem))

meteeen onder de Puplic Class Album1

de rest van de code vervangen en de "map" veranderd naar de goede mapnaam

nu laad hij wel door maar er komen geen nummers in de lijst (met 100 nummers) maar hij laad wel door
 
correctie de code werkt alleen het laden duurt iets langer en de nummers worden niet afgespeeld met het selecteren.
 
Waarom werkt dit niet bij jou en wel bij mij? :(

Mag ik je code zien?
 
Code:
Public Class album1
    Delegate Sub Add(ByVal List As List(Of ListViewItem))
    Private Sub album1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ControlBox = False
        PictureBox2.Image = New Bitmap(Application.StartupPath + "\hoesjes\1.jpg")
        Dim Thread1 As New System.Threading.Thread(AddressOf Importeer)
        Thread1.Start()
    End Sub

    Private Sub Importeer()
        Dim list As New List(Of ListViewItem)
        For Each item As String In IO.Directory.GetFiles(Application.StartupPath + "\albums\1")
            If item.EndsWith(".mp3") Then
                Dim lv As New ListViewItem
                lv.Text = IO.Path.GetFileName(item)
                lv.SubItems.AddRange({item, New Mp3Class(item).GetDurationString})
                list.Add(lv)
            End If
        Next
        Finished(list)
    End Sub

    Private Sub Finished(ByVal List As List(Of ListViewItem))
        If ListView1.InvokeRequired Then
            Dim d As New Add(AddressOf Finished)
            Me.Invoke(d, New Object() {List})
        Else
            For Each item As ListViewItem In List
                ListView1.Items.Add(item)
            Next
        End If
    End Sub

    Private Sub PictureBox1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Albums.Show()
        Me.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim open As New FolderBrowserDialog
        If open.ShowDialog = DialogResult.OK Then
            My.Computer.FileSystem.CopyDirectory( 
            Application.StartupPath & "\albums\1",
            open.SelectedPath, _
            Microsoft.VisualBasic.FileIO.UIOption.AllDialogs, _
            Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
        End If
    End Sub

    Private Sub Label7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label7.Click
        Pc_info.Show()
    End Sub

    Private Sub ListView1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.Click
        AxWindowsMediaPlayer1.URL = ListView1.SelectedItems(0).Tag
        Label2.Text = ListView1.SelectedItems(0).Text
    End Sub
    Private Sub PictureBox7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.Click
        Dim afsluiten As Integer
        afsluiten = MsgBox("wil je echt afsluiten?", vbDefaultButton2 + vbYesNo, "Waarschuwing")
        If afsluiten = vbYes Then
            End
        Else

        End If
    End Sub

    Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
        AxWindowsMediaPlayer1.settings.volume = TrackBar1.Value
        Label10.Text = TrackBar1.Value

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim folder As New FolderBrowserDialog
        If folder.ShowDialog = DialogResult.OK Then
            Me.Cursor = Cursors.WaitCursor
            For Each item As ListViewItem In ListView1.SelectedItems
                Try
                    System.IO.File.Copy(item.SubItems(1).Text, folder.SelectedPath & "\" & item.Text & ".mp3")
                Catch ex As Exception
                    Dim a = MsgBox(ex.Message + vbNewLine + vbNewLine & "Operatie Afbreken?", 16 + 4, Me.Text)
                    If a = vbYes Then Exit For
                End Try
            Next
            Me.Cursor = Cursors.Default
            MsgBox("Operatie voltooid!", 64, Me.Text)
        End If

    End Sub

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked = True Then
            AxWindowsMediaPlayer1.settings.mute = True
        Else
            AxWindowsMediaPlayer1.settings.mute = False
        End If
    End Sub

    Private Sub ListView2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView2.SelectedIndexChanged

    End Sub
End Class
 
Ja dat zie ik ook wel :P, maar ik vraag me af wat een het is. Heb zelf nooit een Delegate gebruikt.
 
Delegate Sub is een soort Pointer naar een functie (snap je?)
Ik gebruik het hier omdat ik niet de ListView kan aanpassen in een andere thread dan waarin hij is toegevoegd. :)

@dannydaboy: Tja, ik kan er nog steeds de hand niet op leggen.

Als ik morgen tijd heb kijk ik er verder naar. Misschien werkt een Backgroundworker beter (hoewel-ie dan niet live update ;))
 
Laatst bewerkt:
Ik zie het punt niet echt...

Je kan toch gewoon CheckForIllegalCrossEvents = False doen? Dat kun je toch de ListView aanpassen.
 
correctie de code werkt alleen het laden duurt iets langer en de nummers worden niet afgespeeld met het selecteren.

Goedzo! Hier heb ik overheen gelezen. :thumb:
Het laden duurt sowieso lang met zoveel nummers.

Over het afspelen, daar heb je nog geen code voor, toch? Had ik toch al iets over gezegd in mijn vorige posts?

Je kan toch gewoon CheckForIllegalCrossEvents = False doen? Dat kun je toch de ListView aanpassen.

Nog nooit van gehoord, waar zou ik dat moeten plaatsen? :confused:
Btw, mijn code werkt toch? :)
 
deze code heb ik erin om af te spelen

Code:
    Private Sub ListView1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.Click
        AxWindowsMediaPlayer1.URL = ListView1.SelectedItems(0).Tag
        Label2.Text = ListView1.SelectedItems(0).Text
    End Sub

is het mogelijk om dmv een popup venstertje of laadbalkje te gebruiker te laten weten dat hij nummer in laad want de gebruiker gaat nu vast denken dat het niet meer werkt.

hoe kan het eigenlijk dat die nu ineens zo lang laad deed die eerst niet...
 
Laatst bewerkt:
ik heb even getest de code

Code:
    Private Sub album1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ControlBox = False
        PictureBox2.Image = New Bitmap(Application.StartupPath + "\hoesjes\2.jpg")
        For Each file As IO.FileInfo In New IO.DirectoryInfo(Application.StartupPath + "\albums\2").GetFiles("*.mp3")
            Dim lvi As New ListViewItem
            lvi.Text = file.Name 'Alleen bestandsnaam als item tekst
            lvi.Tag = file.FullName 'Volledige pad opslaan in de Tag property. Elk item heeft zn eigen Tag
            lvi.SubItems.Add(file.FullName)
            ListView1.Items.Add(lvi)
        Next
    End Sub

    Private Sub PictureBox1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Albums.Show()
        Me.Close()
    End Sub


laad de nummers vrijwel meteen in maar heeft de tijdsaanduiding niet. Is het niet verstandig om de tijdsduur in een textlabel te tonen als het nummer geselecteerd word

ik dacht iets aan de code van

Label12.Text = ?
 
Dat wordt dan:

[CPP]Label12.Text = New Mp3Class(ListView1.SelectedItems.Item(0)).GetDurationString[/CPP]

Maar je zou het probleem van 'tijdsduur niet laten zien' niet hebben als je mijn code had gebruikt (post #84).

Ik zie dat je zelf iets gemaakt hebt? :confused:
 
ja maar het probleem is dat die dan langer doet om de nummer in te laden (30 seconden)

is het niet mogelijk om de tijdsduur niet in me listview te laden maar direct bij het aanklikken in me label ? dan hoeft hij ze namelijk niet alle 100 eerst in te laden. In me listview hoef hij namelijk niet getoond te worden
 
[CPP] Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.Click
If ListView1.SelectedItems.Count > 0 Then Label1.Text = New Mp3Class(ListView1.SelectedItems.Item(0).Text).GetDurationString
End Sub[/CPP]

:)
 
met de gegeven code geef die een fout aan in mijn mp3class file met het starten van het nummer
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan