[ markoub @ 03.10.2002. 10:47 ] @
Kada treba nesto vise da radimo sa fajlovima na CD-u (da ih renderujem) CD ne stigne da mi procita sve fajlove na vreme, program zakuca i dobijem bazu koja se pravi od tih podataka pogresnu. Kada idem izvrsavanje step-by-step sve ide u redu. Onda sam pokusao da dodam besmislenu petlju "for i" da bi oduzeo vreme kompu i dao CD Rom-u. To nije radilo na manjem broju ponavljanja te petlje, ali kada sam povecao radi, ali ide strasno sporo! Ta petlja mi i ne odgovara posto nemaju svi istu brzinu CD Rom-a. Gde je greska!
Hvala
[ jc denton @ 04.10.2002. 23:14 ] @
Meni ova petlja vrsi pos'o :

For i = 0 To File1.ListCount - 1

Set mediacontrol = Nothing
Set audio = Nothing
Set pozicija = Nothing

Set mediacontrol = New FilgraphManager
mediacontrol.RenderFile ("f:\" & File1.List(i))
Set audio = mediacontrol
Set pozicija = mediacontrol

Debug.Print (i + 1) & _
" " & _
(pozicija.Duration \ 60) & ":" & (pozicija.Duration Mod 60) & _
" " & _
File1.List(i)

Next

Postoji tu jedan drugi problem. Media Player vraca pogresan duration za VBR (variable bit rate) mp3. Nacin za dobijanje duzine pesme kod VBR mp3 fajlova je prilicno slozen postupak, posto moras da poznajes strukturu VBR header-a itd.

Pozdrav
[ markoub @ 05.10.2002. 21:54 ] @
Ne pomaze, i moj je kod bio isti. Pokusacu da radim odvojeno poslove posto ja ne znam kako on ucita to ali ja dobijem (posto to ubacujem u Record pesma, koji ima pesma.ime, pesma.velicina ...) poruku (kada probam da ucitam to) "Bad Record Lenght". Koristim brojac da bi se prebacio na kraj fajla (ucitavam record-e While Not EOF) i taj brojac, kada pukne program, ima neku ogromnu vrednost, preko 30000. Kako da se prebacim na kraj fajla bez toga, posto ne znam koliko record-a imam?
[ markoub @ 06.10.2002. 10:38 ] @
Option Explicit
Dim mediacontrol As IMediaControl
Dim pozicija As IMediaPosition
Dim audio As IBasicAudio
...
Private Type Pesma
ime As String
velpesme As Long
putanja As String
ImeCD As String
duzinatrajanja As Double
End Type
Dim pes As Pesma
Dim Temp As Pesma
...
Private Sub ucitaj()
Set mediacontrol = New FilgraphManager
Set audio = mediacontrol
Set pozicija = mediacontrol
Open App.Path & "\Katalog.dat" For Random As #1
j = 0
Do While Not EOF(1)
Get #1, , Temp
j = j + 1
Loop
If j = 1 Then j = 0

For i = 0 To File1.ListCount - 1
pes.ime = File1.List(i)
pes.putanja = File1.Path
pes.ImeCD = odgovor
If Right$(pes.putanja, 1) <> "\" Then putanj = pes.putanja_
& "\" & pes.ime Else: putanj = pes.putanja & pes.ime
pes.velpesme = FileLen(putanj)
Set mediacontrol = Nothing
Set audio = Nothing
Set pozicija = Nothing
Set mediacontrol = New FilgraphManager
mediacontrol.RenderFile (putanj)
Set audio = mediacontrol
Set pozicija = mediacontrol
pes.duzinatrajanja = pozicija.Duration

Put #1, j + i + 1, pes
Next i
Close #1
End Sub
[ jc denton @ 07.10.2002. 19:44 ] @
Prvo moras da izmenis neke deklaracije, tj. da podesis stringove na 'fiksnu' duzinu, a u komandi Open specificiras duzinu sloga :

Open App.Path & "\Katalog.dat" For Random As as #1 len = len(pes)

Evo predloga za izmene u deklaraciji tipa Pesma, a ti vidi kako bi bilo najbolje za tvoje potrebe :

Private Type Pesma
ime As String *30
velpesme As Long
putanja As String *80
ImeCD As String *30
duzinatrajanja As Double
End Type

Broj slogova u otvorenom fajlu je:
lof(1)/len(pes)

znaci, na kraj fajla se 'prebacas' recimo ovako :
put #1, lof(1)/len(pes)+1, pes

Kad uradis ovo idemo dalje, ako je potrebno.
[ markoub @ 07.10.2002. 21:19 ] @
Radi! Sad imam problem: sta ako je putanja ili ime pesme vece od onog koliko ja mogu da zabelezim? Nije problem u prikazivanju, nego u tome sto program posle treba sve te pesme da iskopira na HD. Postojili jos neka funkcija sem FileCopy koja bi kopirala i fajl ove kojima adresa pocinje kao ona koju ja imam zabelezenu?

Imam jos jedan problem: kako da ucitam u bazu pesme sa Audio CD-a i kako da ne prepisujem pesme jednu preko druge?
Hvala.
[ jc denton @ 07.10.2002. 22:58 ] @
Moj predlog je da uopste ne belezis putanju u bazu.

Za kopiranje te nisam razumeo (mada verovatno postoji jos neka API funkcija), a za duplikate jednostavno proveri da li pod tim nazivom vec postoji neka pesma u bazi, pa na osnovu toga vrsi upis/brisanje ili sta vec.

Za audio cd ne znam.