Šta je novo?

Delphi - Nekoliko problemicica

!rabas

Čuven
Učlanjen(a)
09.12.2003
Poruke
630
Poena
619
Izvinjavam unapred zbog sigurno dugackog posta:D
Dakle ovako: radim na jednom programu koji ce da pravi baze (kataloge) mp3 pesama. Poceo sam od toga da napravim sasvim jednostavan program, medjutim tokom vremena sam ubacivao toliko novih funkcija da ne znam ni sam kako sam uspeo da ih ugradim (posto sam jelte samouk)... E sad neki od glavnih delova prograam nisu jos gotovi, tj. neke od tih delova sam ugradio, ali ne daju mi zeljeni rezultat... Prvo od njih (a ujedno i skoro najvazniji) jeste citanje ID3 tagova iz fajlova. Pronasao sam mnoge nacine, koristo razne komponente, medjutim ni jedna nije radila sasvim dobro... Na sajtu www.id3.org sam pronasao "zvanican" nacin kako da se vade tagovi u Delphiu, medjutim i on neke lepo ucita a neke nikako(iako sam siguran da postoje jer ih WMP ucita). Sada me interesuje da li neko zna siguran nacin da se svi tagovi lepo ucitaju (ako postoje, normalno).

Dalje, potrebna mi je funkcija koja ce pretrazivati citav HDD ili CD. I ovo je jedna od stvari koje su mi kasnije pale na pamet, ali opet je korisna. Dakle uspeosam da ubacim u program da pronadje sve particije i CD uredjaje i da se izvrsi pretraga kada korisnik klikne na njih. Posto nemam nikavu predstavu kako bi procedura za pretrazivanje trebala da izgleda pronasao sam na jednu delphi3000.com. Medjutim ona ne radi, tako da sam u potrazi za novom, a posto ne znam koja bi odgovarala, neko bi mogao da mi pomogne.

I jos jedan problem: Posto sam dogurao dotle da sam ugradio mp3 plejer u program interesuje me kako da recimo pomocu Drag&Drop sortiram stavke u listboxu(koje predstavlja nesto kao playlistu)... Dakle nesto kao u winampu...

Ovo bi trebalo da budu stvari koje sprecavaju da program bude 95% gotov, jer je ostalo samo sminka i peglanje koda... Nadam se da nisam smorio, a ako jesam sta cu, morao sam:)...
 
Neznam sto se tice komponenti ali to je jako lako izvesti otvaranjem i citanjem ID3 tagova direktno iz mp3 pesama. Imas dve vrste tag-ova v1 i v2. V1 je fiksno ja mislim poslednja 128 karaktera ... samo je zalepljeno na kraj pesme. V2 ima oznaku za pocetak tag-a i svakog od njegovih delova. Idi sa onim AssignFile ... pa open pa citas... nije neka nauka ...
Sto se pretrage tice to isto mozes sam da napises ... imas API FindFile i FindNext kazes mu trebaju mi direktorijumi ili fajlovi ili mu das masku recimo *.mp3 .. to bar imas u help-u.. zao mi je oko ovih shturih informacija ... Imao sam te stvari napisane .. neke u Access-u neke u Deplhiju ali neznam gde su ... bilo je to davno. Uglavnom moj savet ti je da to napises sam .. nije tesko a bolje je nego bilo koja kontrola koju skines. Na Google-u ne trazi VCL vec Delphi examples. Ako imas problem sa kodom baci na forum pa cemo da radimo debug ... Pozdrav
 
Rage against The mAchine je napisao(la):
Dalje, potrebna mi je funkcija koja ce pretrazivati citav HDD ili CD. I ovo je jedna od stvari koje su mi kasnije pale na pamet, ali opet je korisna. Dakle uspeosam da ubacim u program da pronadje sve particije i CD uredjaje i da se izvrsi pretraga kada korisnik klikne na njih. Posto nemam nikavu predstavu kako bi procedura za pretrazivanje trebala da izgleda pronasao sam na jednu delphi3000.com. Medjutim ona ne radi, tako da sam u potrazi za novom, a posto ne znam koja bi odgovarala, neko bi mogao da mi pomogne.
Pogledaj ovo u attachmentu pa vidi da li mozes da izvuces ista korisno. U pitanju je jedan moj programcic koji skenira sve empetrojke u navedenom direktorijumu (ukljucujuci i poddirektorijume) i ispisuje da li imaju tagove.

Inace, id3v1 tag je niz od 128 bajtova na kraju fajla, sa fiksnom duzinom polja, jako je jednostavan za citanje i manipulaciju i ne trebaju ti nikakve dodatne komponente. Sa druge strane, id3v2 je komplikovaniji i moraces na netu da nadjes odredjeni PDF u kome su opisane verzije 2.3 i 2.4 (imao sam ga negde, ali ne znam gde).
 

Prilozi

  • VTagScan.zip
    11.7 KB · Pregleda: 76
Pisao sam ja sam za v1 ID... I to mi je radilo samo sa nekim... Za one kojima nije radilo sam upotrebio gore naveden kod sa id3.org... E sad ako sam razumeo, znaci da trebaju dva koda za citanje v1 i v2. Da li postoji nacin da program odredi sa koja verizja ja u pitanju, pa da koristi kod u zavisnosti od toga da li je v1 i ili v2? Valjda razumete sta hocu da kazem.... Sve u svemu hvala, a Voodoo, sad cu da vidim da li mi pomaze ovo...

Edit: E sad sam provalio da ti ovo programce ima i ovo za proveravanje da li ima v1 ili v2 ili cak oba...
 
Poslednja izmena:
Evo ti klase za ID3v1, ID3v2 i WMA.
Pogledaj na sajtu koji je u zaglavlju da li ima novijih.
Radio sam neki massRenamer za mp3 pa sam našao te klase.

Mislim da ako probaš da promeniš wma tagove, sj*be ti fajl, ali nisam siguran. Za mp3 radi savršeno.

Poz, Nick.

Bravo ja, zamalo da zaboravim attach. :D
 
Poslednja izmena:
Rage against The mAchine je napisao(la):
Da li postoji nacin da program odredi sa koja verizja ja u pitanju, pa da koristi kod u zavisnosti od toga da li je v1 i ili v2?
v1 se nalazi na kraju fajla i pocinje sa 'TAG', a v2 na pocetku i pocinje sa 'ID3', tako da nema teorije da promasis :)
 
Voodoo_NBGD je napisao(la):
v1 se nalazi na kraju fajla i pocinje sa 'TAG', a v2 na pocetku i pocinje sa 'ID3', tako da nema teorije da promasis :)

OK... Otprilike sam sve sredio... Ovo sto je Nick okacio je dosta opsirno i dosta mi je pomoglo... Ako bude bilo nekih problema ja cu da se javim...
,)
 
Ne znam da li u Nickovom programu ima procedura za pretrazivanje, ali mozes da iskoristis onu moju s tim da joj poturis root direktorijum ('C:\' npr.) kao Path. A spisak svih drajvova mozes dobiti preko API-jevih funkcija GetLogicalDrives i GetLogicalDriveStrings (tip drajva se odredjuje sa GetDriveType - za vise informacija, proveri \Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP)
 
Sredio sam pretrazivanje, iskoristivsi tvoju proceduru... A ovaj kod sam iskoristio za dobijanje stringa koji sadrzi sve HDD-ove (tj.particije) ili CD ROM-ove:

Kod:
Function GetHDDList : String;
Var
   I    : Integer;
  Drives: Integer;
  Tmp   : String;
begin
Drives := GetLogicalDrives;
  Result := '';
  For I := 0 To 25 Do
    If (((1 Shl I) And Drives)<>0) Then
    Begin
      Tmp := Char(65+I)+':\';
      If (GetDriveType(PChar(Tmp))=DRIVE_FIXED {ili DRIVE_CDROM} ) Then
                                   Result := Result+Char(65+I);
     End;
End;

Posle sam iskoristio Copy za izdvajanje svakog slova. Potom se dinamicki kreiraju TSpeedButton-i kojima prikacim za property OnClick tvoju f-ju (tj. malo izmenjenu). Putanja za pretragu mi je:

Kod:
 If (Sender is TSpeedButton) then    
    labela:=(Sender as TSpeedButton).Caption;
LoadPath(labela, ListBox1); itd...
I tako sada sve sljaka super... Koliko vremena bi otprilike trebalo da traje pretraga particije od 60GB? U tvom programu traje recimo 3-4 min (ali naravno on ispituje i da li ima tagova), a kod mene bukvalno odmah izbaci sve rezultate(bez provere tagova)...U cemu je fora?
 
Vrh Dno