Bonjour,

je développe actuellement un lecteur MP3 en delphi avec l'api fmod et j'aimerais des renseignements pour gérer une liste (Tlist) d'enregistrement (type record);

L'idée est de stocker en mémoire, parallèlement à la liste de lecture FPlaylist de type TStringList qui stocke le chemin d'accès des chansons présents dans la liste de lecture, une variable FPlaylistInfo de type TList et qui contient les informations du morceau.

Voici le type TSongInfo :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
  type
    TSongInfo = record
      Title, Artist, Album, Year, Comment: String;
      Genre: Integer;
      LengthMs: Integer;
    end;
Pour obtenir les informations à partir d'un chemin d'accès d'une chanson j'ai écris la fonction GetSongInfo

Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function GetSongInfo(AFilename: String): TSongInfo;
La liste de lecture est présentée à l'utilisateur sous la forme d'un TListView avec la propriété Style à vsReport.

A chaque fois qu'une chanson est ajouté, supprimé, que l'utilsateur change l'ordre des chansons, je fais appel à la procédure UpdatePlaylist : celle-ci vide le contenu du TListView et le remet à jour, en renseignant les informations de la chanson.

Voila le problème : dans la procédure UpdatePlaylist, je fais appel à GetSongInfo() qui ouvre un fichier avec fMod dans un flux à part (j'entend à part du flux de lecture) et qui scanne les informations ID3 puis les retourne en résultat.

Seulement à chaque modifications de la playlist il y a de nombreux appel à UpdatePlaylist mais aussi à GetSongInfo donc cela représente bcp d'ouverture/fermeture de fichier et donc les performances s'en ressentent : avec seulement 15 morceaux dans la liste de lecture, le temps d'exécution de UpdatePlaylist est d'environ 3 secondes !!!

Voila pourquoi je voudrais stocké ces informations dans une liste de TSongInfo afin de limiter les appels à GetSongInfo() (elle ne serait donc appelé qu'à l'ajout d'une nouvelle chanson) et que la procédure de mise à jour UpdatePlaylist ne pioche ces informations précédemment lu directement dans cette liste au lieu de rappelé GetSongInfo, ce qui entrainait un gain de performances considérables.

Etant donné que j'ai bcp de mal avec les pointeurs, j'aurais aimé des conseils sur la gestion d'une telle liste. Dois-je créer un type pointé sur TSongInfo :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
type
  PSongInfo = ^TSongInfo;
  ...
Merci d'avance pour vos éventuelles réponses et désolé si ce message vous parrait long mais j'ai pensé que ce serait mieux d'exposé le problème en détails.

A bientot.