Avatar billede xaque Nybegynder
16. juli 2006 - 16:59 Der er 9 kommentarer og
1 løsning

hent sti fra *.txt og hvis mp3 navn

Hej jeg har lavet et program hvor man kan lave en afspilnings liste hvor der f.eks stå

c:\musik\navn på sangen - måske artist.mp3
c:\musik\sjov\andet navn på sangen - sjov sang.mp3

hvordan får jeg den ind i en listbox

så man kun kan se
navn på sangen - måske artist.mp3
andet navn på sangen - sjov sang.mp3

og så skal man unne trykke på dem og så skal programmet så åbne mediaplayer eller winamp (helst mediaplayer ellers det nemmeste)
og sende hele stien så den kan finde sangen

når den sang er færdig ville det være fedt vis den selv gik videre til næste
Avatar billede xaque Nybegynder
16. juli 2006 - 17:16 #1
ps. jeg er ret ny til vb så en smule forklaring i det kode der bliver smidt ville være lækkert
Avatar billede joern Nybegynder
16. juli 2006 - 21:18 #2
Hej.

Listboksen er ikke let at lave kolonner i, så jeg vil anbefale at du nøjes med titlen.  Hvis dine MP3-filer indeholder ID3-tags, kan medieplayer eller winamp jo vise artistnavn dér.  Man kan også godt få et VB-program til at vise ID3-tags version 1.1.

For at have sti og filnavn skjult - når filnavnet ikke er titlen - må du oprette et array hvor de stier og navne står, der svarer til en titel.  Hvis du vælger at din listeboks skal være sorteret, skal array'et gennemløbes efter stien ved hvert valg indtil den rette findes.  Er listeboksen ikke sorteret vil listindex være identisk med array'ets.

Hvis jeg skal angive noget kildetekst til at indlæse fra din tekstfil til et array, må du vise her hvorledes din tekstfil er opbygget.
Avatar billede xaque Nybegynder
16. juli 2006 - 23:18 #3
undskyld jeg har fået forklaret noget af det lidt dårligt
dette "andet navn på sangen - sjov sang.mp3" er navnet på min mp3 sang
den kunne lige så godt være "hyggesangen.mp3"
det var bare for at vise at sangene godt kunne være med mellem rum og tegn F.eks "- _ !" eller hvad der nu findes

min tekst fil ser så ledes ud
C:\Documents and Settings\xaque\Skrivebord\musik\James Blunt - Back To Bedlam - 02 - You're Beautiful.mp3
C:\Documents and Settings\xaque\Skrivebord\musik\01 - Wicked Introduction.mp3

der kan så være "uendelige" sange
og de kan være i forskellige stiger
hvis de f.eks er opdelt i mapper alle cd'erne

så jeg vil faktisk bare have listboksen til at vise filnavnet og så skal den sende den til f.eks mediaplayer som helst skal være usynlig for brugeren
Avatar billede joern Nybegynder
17. juli 2006 - 10:29 #4
Hej.

Det er da altid noget, at filnavnet fast står til sidst, selv om det kan have forskellig længde og indeholde "blanktegn" (space).

Jeg regner med, at du ved, at der findes programmer, der kan søge et drev igennem og finde alle mp3- pg wma-filer og tilføje dem til en playliste?  Hvis du meget gerne vil lave noget selv, vil jeg anbefale at du samler dine musikfiler i én eller nogle få mapper.

Jeg har med Visual Basic 5.0 lavet 2 programmer til håndtering af mediefiler.
http://jkfsoft.dk/cd_base.htm er en mini-udgave af http://jkfsoft.dk/musik32.htm, de opererer på samme database, der ser således ud, - også ren ascii:
-----------------------
0001
a434
My true love
Elvis Presley
bl-*3^ -em
16-11-1996


mp3

25-11-96

ID3
5:46
000008
------------------------------
Desuden anvendes en database over "medier".  Men filnavnene er enkle:  1a434.mp3 for den viste post, og alle ca. 6000 filer ligger i samme mappe.
Avatar billede xaque Nybegynder
17. juli 2006 - 13:24 #5
programmet til at lave en playliste har jeg lavet og det er bygget ind i det fulde program så det næste skal bare hente dem fra den liste og afspille dem

det er ikke fordi jeg har brug for et program der kan alle de ting det er kun fordi jeg vil lære noget mere og fordi jeg er igang med at lave en frontend til en bilpc da jeg syndes det er sjovere at bruge sin egen end andres
Avatar billede martin_moth Mester
17. juli 2006 - 13:37 #6
Her er lidt at lære fra - er ret pædagogisk bygget op, synes jeg selv ;o)

0) start VB6
1) Opret Nyt Project
2) Gå til Project > References > MicroSoft Scripting Runtime (afkryds)
3) Opret et nyt modul hvor du paster følgende:

Option Explicit
'Her erklærer du din helt egen variabeltype
'Dette SKAL stå i et modul
Public Type MP3
  Name As String
  Fullpath As String
End Type

4) sæt en listbox og en commandbutton på din form
5) copy-paste følgende kode, og ret stien til dine mp3-filer:

Option Explicit
Dim arrMP3() As MP3 'DYNAMISK array af typen MP3-Erklæretn public så den kan ses af alle subs og functions

Private Sub Form_Load()
  LoadMP3 ("c:\musik")
End Sub

Private Sub LoadMP3(Sti As String)
'Denne sub læser alle MP3-filer ind i dit array med navn og navn+sti
'Desuden sættes navnene på filerne ind i din listbox

    Dim FSO As FileSystemObject 'Objekt
    Dim MyFolder As Folder 'Objekt
    Dim MyFile As File 'variabel af typen File
    Dim i As Long 'Tæller

    ReDim arrMP3(0)  'Nulstiller array
    Set FSO = New FileSystemObject
    Set MyFolder = FSO.GetFolder(Sti)
   
    For Each MyFile In MyFolder.Files 'Looper over alle filer i folderen
      If Lcase(Right(MyFile.Name, 4)) = ".mp3" Then 'finder de filer der slutter med ".mp3"
        i = i + 1 'Forøger tælleren med 1
        ReDim Preserve arrMP3(i) 'Udvider arrayet med en plads
        arrMP3(i).Name = MyFile.Name 'Indlæser navn i array
        arrMP3(i).Fullpath = MyFile.Path 'Indlæser sti i array
        List1.AddItem arrMP3(i).Name 'Indlæser navn i listbox
      End If
    Next MyFile
       
    Set MyFolder = Nothing 'Nedlægger objektet, så det ikke er i hukommelsen
    Set FSO = Nothing 'Nedlægger objektet, så det ikke er i hukommelsen
End Sub

Private Sub Command1_Click()
If List1.ListIndex >= 0 Then
    MsgBox "Du har markeret filen med stien : " & arrMP3(List1.ListIndex + 1).Fullpath
  'Du kan så bruge stien til at få startet filen op i media player eller hvad du vil
End If
End Sub

Prøv det - det tager 30 sek at copy-paste :o)
Avatar billede xaque Nybegynder
17. juli 2006 - 14:25 #7
det ser sådan set meget godt ud martin_moth men der er bare lige det problem at musikken godt kan ligge i andre mapper end c:\musik
Avatar billede xaque Nybegynder
17. juli 2006 - 14:35 #8
jeg prøvede lige din kode og fant ud af at hvis jeg satte flere
af disse ind
LoadMP3 ("c:\musik")
LoadMP3 ("c:\musik\hygge")
LoadMP3 ("c:\musik\rock")
så finder den dem alle og smider ind kan jeg lave på en måde så den enten søger hele
c:\musik\og alle under mapper
eller lave en txt fil hvor man så  kan tilføje alle sti'erne og så åbner dit program txt'en tager stierne
og smider dem ind i
LoadMP3 ("c:\musik")
LoadMP3 ("c:\musik\hygge")
LoadMP3 ("c:\musik\rock")

i kan godt høre jeg ikke ved særlig meget om det ikke :)
Avatar billede martin_moth Mester
17. juli 2006 - 15:00 #9
ja du kan!

Søge:

For each folder in MyFolder.Subfolders - så vidt jeg husker. Prøv at søg på det på eksperten.

Eller søg f.eks. på "find fil" eller "rekursiv", så er der masser af eksempler

Skrive stierne i fil og bruge dem:
Se eksempler her: http://www.eksperten.dk/spm/252223
Avatar billede xaque Nybegynder
17. juli 2006 - 15:18 #10
sådan takker fik det til at virke koden kom til at se sådan her ud

Option Explicit
Dim arrMP3() As MP3 'DYNAMISK array af typen MP3-Erklæretn public så den kan ses af alle subs og functions

Private Sub Form_Load()
  LoadMP3 ("C:\Documents and Settings\xaque\Skrivebord\musik")

End Sub

Private Sub LoadMP3(Sti As String)
'Denne sub læser alle MP3-filer ind i dit array med navn og navn+sti
'Desuden sættes navnene på filerne ind i din listbox

    Dim FSO As FileSystemObject 'Objekt
    Dim MyFolder As Folder 'Objekt
    Dim MyFile As File 'variabel af typen File
    Dim i As Long 'Tæller

    ReDim arrMP3(0)  'Nulstiller array
    Set FSO = New FileSystemObject
    Set MyFolder = FSO.GetFolder(Sti)
   

    For Each MyFile In MyFolder.Files 'Looper over alle filer i folderen
      If LCase(Right(MyFile.Name, 4)) = ".mp3" Then 'finder de filer der slutter med ".mp3"
        i = i + 1 'Forøger tælleren med 1
        ReDim Preserve arrMP3(i) 'Udvider arrayet med en plads
        arrMP3(i).Name = MyFile.Name 'Indlæser navn i array
        arrMP3(i).Fullpath = MyFile.Path 'Indlæser sti i array
        List1.AddItem arrMP3(i).Name 'Indlæser navn i listbox
      End If
    Next MyFile
   
    For Each MyFolder In MyFolder.SubFolders
    For Each MyFile In MyFolder.Files 'Looper over alle filer i folderen
      If LCase(Right(MyFile.Name, 4)) = ".mp3" Then 'finder de filer der slutter med ".mp3"
        i = i + 1 'Forøger tælleren med 1
        ReDim Preserve arrMP3(i) 'Udvider arrayet med en plads
        arrMP3(i).Name = MyFile.Name 'Indlæser navn i array
        arrMP3(i).Fullpath = MyFile.Path 'Indlæser sti i array
        List1.AddItem arrMP3(i).Name 'Indlæser navn i listbox
      End If
    Next MyFile
    Next MyFolder
   

       
    Set MyFolder = Nothing 'Nedlægger objektet, så det ikke er i hukommelsen
    Set FSO = Nothing 'Nedlægger objektet, så det ikke er i hukommelsen
End Sub

Private Sub Command1_Click()
If List1.ListIndex >= 0 Then
    MsgBox "Du har markeret filen med stien : " & arrMP3(List1.ListIndex + 1).Fullpath
  'Du kan så bruge stien til at få startet filen op i media player eller hvad du vil
End If
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester