IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Traiter 128 derniers octets d'un fichier


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut Traiter 128 derniers octets d'un fichier
    Bonjour,

    comme certains auront pu le deviner, je cherche à récupérer les tags ID3 v1.1 d'un morceau MP3, sans passer par une bibliothèque ou un composant extérieur.

    J'avais vu un code qui permettait de le faire en delphi mais je ne le trouve plus, j'ai donc essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    type
      ID3tags = packed record
        Title  : String[30];
        Artist : String[30];
        Album  : String[30];
        Year   : String[4];
        Comment: String[30];
        Genre  : Byte;
      end; 
     
    ... 
     
    function GetID3tags(Fichier: String): ID3tags;
    var
      Buffer: ID3tags;
    begin
      with TFileStream.Create(Fichier, fmOpenRead) do
      try
        Seek(128,soFromEnd);
        Read(Buffer,128);
      finally
        Free;
      end;
        Result:=Buffer;
      end;
    end;
    Le code compile bien mais quelque soit la chanson quand je fait GetID3tags(...).Title ou une autre variable de l'enregistrement la chaine est vide.

    Pouvez-vous me dire à quel niveau je me trompe?

    Merci d'avance.

  2. #2
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Petit oubli de ma part mais lourde conséquence :

    doit être remplacé par

    un effet le paramètre "Offset" doit être nul ou négatif quand on utilise "soFromEnd" pour le parmamètre "Origin".

    En essayant ma petite fonction pour lire un fichier texte octet par octet j'ai bien le contenu du fichier contrairement à auparavant.

    Je vais donc essayé pour les tags ID3. Je vous tiens au courant.

  3. #3
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const
       ID3_SIZE = SizeOf(ID3tags);
     
     
    Seek(-ID3_SIZE, sofromEnd);
    ReadBuffer(result,ID3_SIZE);

  4. #4
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Merci pour cette précision.

    avec ma déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type
      ID3tags = packed record
        Title  : String[30];
        Artist : String[30];
        Album  : String[30];
        Year   : String[4];
        Comment: String[30];
        Genre  : Byte;
      end;
    Il manquait des lettres pour les informations (souvent les 3 premières).
    En cherchant sur le Web j'ai retrouve le code qui est correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ID3tags = packed record
        Tag     : array[0..2] of Char;
        Title,
        Artist,
        Comment,
        Album   : array[0..29] of Char;
        Year    : array[0..3] of Char;
        Genre   : Byte;
      end;
    Et maintenant ca marche bien.


    L'adresse du site pour ceux que çà intéresse
    http://delphi.about.com/od/multimedia/l/aa112800d.htm

    Je posterai ma fonction dès que j'en aurai terminé.

    Merci.

  5. #5
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Ben oui c est un problème récurrent avec le premier caractare avec le shortstring mais il me semble que j'ai rencontré la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type
      ID3tags = packed record
        Title  : String[30];
        Artist : String[30];
        Album  : String[30];
        Year   : String[4];
        Comment: String[30];
        Genre  : Byte;
      end;
    a plusieurs reprises sur le net

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/11/2011, 10h57
  2. effacer la dernier ligne d'un fichier
    Par maz dans le forum C
    Réponses: 2
    Dernier message: 17/11/2006, 11h56
  3. Réponses: 2
    Dernier message: 19/08/2006, 12h47
  4. Réponses: 2
    Dernier message: 27/06/2006, 14h33
  5. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo