[Delphi7] Procedure wordt niet afgewerkt

Pagina: 1
Acties:

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Ik ben bezig met een programmatje voor het renamen van MP3s. Je voert een directory naam in waarin een compleet album staat, je copy-en-paste vanaf IMDB alle tracknamen in het programma, drukt op een knop en dan worden ze gerenamed. Tegelijkertijd haal ik ID3v1 en ID3v2 tags weg. En daar zit het probleem.

Deze procedure wordt uitgevoerd wanneer je op de 'OK' knop drukt.
procedure TMainForm.buttonGoClick(Sender: TObject);
begin
   if (editArtist.Text<>'') and (editTitle.Text<>'') and MatchingNumberOfFiles then
     begin

      
//in de procedure RenameFiles worden alle bestanden gerenamed
       //een array met de oude namen, een array voor de nieuwe namen
       //ik gebruik daarin de ingebouwde functie RenameFile();

       RenameFiles;


      
//de procedure GenrateM3UFile bouwt een tekstbestand met daarin
       //alle nieuwe tracknamen, als gebruikt voor playlist in WinAmp

       if checkM3U.Checked then
       GenerateM3UFile;


       //deze procedure verwijdert ID3 tags. zie beneden voor de
      //gebruikte code.

       if checkID3v1.Checked then
       RemoveID3v1Tags;

      
//deze procedure laat een timer aflopen (5 seconden) omvervolgens
       //te gaan kijken of er ID3v2 tags zijn, en deze verwijderen. er
       //wordt een timer gebruikt om te
      //zorgen dat er pas wordt gestart zodra de ID3v1 tags wegzijn

       if checkID3v2.Checked then
       timerID3v2.Enabled:=True;

     end

  else
   MessageDlg('No changes made', mtError, [mbOK], 0)

end;
Nou goed, deze code werkt gewoon goed. Als ik een album heb gerenamed, zijn alle ID3 tags weg, de namen zijn goed, playlistje erbij, perfect. Echter, als ik nu, zonder het programma opnieuw op te starten, nog een album ga doen, dan loopt 'ie vast, omdat 'ie bij het truncaten van een MP3 voor het verwijderen van de ID3v1, de file niet kan accessen.

Hoe kan het dan, dat 'ie die files allemaal (hoeveel het er ook zijn) in de eerste run (het eerste album) wel gewoon kan accessen, en de volgende run niet ?

Nou had ik als oplossing gebruikt, dat 'ie het hele programma reset op het moment dat ie alle procedures heeft doorlopen (dus na timerID3v2.Enabled:=True), maar dan blijkt dat ie de ID3v2 verwijdering niet toepast... die loopt blijkbaar te lang door, maar het programma reset al, dus stopt dat ID3v2 verwijderen ook. Mijn vraag: hoe kan ik zorgen dat ie pas het programma reset als ie klaar is met het verwijderen van de ID3v2 tags ?

Voor de mensen die er naar willen kijken heb ik de complete code geupload :

http://www.xs4all.nl/~julesvdz/quickrename.rar (32kb)

[ Voor 15% gewijzigd door TheLunatic op 17-08-2003 20:40 ]

Mother, will they like this song?


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 30-07 19:19
Mag ik vragen waarom je uberhaupt je ID3V1 tags in een aparte thread verwijdert (als dat niet zo was, had je geen timer nodig)? Sluit je verder je files wel netjes?

Genoeg is meer dan veel, en tart den overvloed


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Jep, ik sluit de files netjes af ... als ik dat niet zou doen dan zou het bij het eerste album ook al verkeerd moeten gaan he ... Als ik v1 en v2 in dezelfde thread verwijder, dan krijg je problemen met het verwijderen van de v2 omdat de file dan nog in gebruik is voor het verwijderen van de v1. Dus dan zou je daar ook een (korte) timer moeten inbouwen, wat dus geen winst oplevert...

Mother, will they like this song?


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 07:56

alienfruit

the alien you never expected

Waarvoor je niet pas het verwijderen van de ID3v2 tags als je succesvol de ID3v1 tags hebt verwijderd?

Probeer deze eens; geen idee wat je wil hoor. Maar ik kon hier meerdere malen op Go klikken.

http://www.annielennox.nl/quickie.rar

[ Voor 41% gewijzigd door alienfruit op 18-08-2003 01:15 ]


Verwijderd

Delphi:
1
2
3
4
5
6
procedure TMainForm.DeleteID3v2(Filename: String);
var
  MP3File: TID3v2;
begin
  MP3File.RemoveFromFile(Filename);
end;


hover TID3v2 tijdens executie geeft: "Symbol was eliminated by linker"

Compiler Warning: "[Warning] MainUnit.pas(374): Variable 'MP3File' might not have been initialized"

Ik zou ook nog ff try ... finally gebruiken bij het openen en sluiten van de desbetreffende bestanden, want er zitten toch nog enkele discutabele stukken code in.

Bovendien hangt het programma als ik geen Title invul (na een foutmelding). Vraag me niet waarom.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 12:39

Reptile209

- gers -

Verwijderd schreef op 18 August 2003 @ 02:13:
Delphi:
1
2
3
4
5
6
procedure TMainForm.DeleteID3v2(Filename: String);
var
  MP3File: TID3v2;
begin
  MP3File.RemoveFromFile(Filename);
end;


hover TID3v2 tijdens executie geeft: "Symbol was eliminated by linker"

Compiler Warning: "[Warning] MainUnit.pas(374): Variable 'MP3File' might not have been initialized"

Ik zou ook nog ff try ... finally gebruiken bij het openen en sluiten van de desbetreffende bestanden, want er zitten toch nog enkele discutabele stukken code in.

Bovendien hangt het programma als ik geen Title invul (na een foutmelding). Vraag me niet waarom.
Ik weet niet wat voor object TID3V2 is, maar ik zou de procedure toch beginnen met:
Delphi:
1
2
3
MP3File := TID3V2.Create;
MP3File.RemoveFromFile(Filename);
MP3File.Free;

Of ben ik nou te lui om even je .rar in te duiken? :)
offtopic:
Voor de TS: ze je code tussen [code]-tags, stukken leesbaarder. Maar pas op voor te lange regels. :)

Zo scherp als een voetbal!


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 07:56

alienfruit

the alien you never expected

Neej klopt hoor sinaasappel ;)
Pagina: 1