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

Algorithmes et structures de données Discussion :

Indexer fichiers audio


Sujet :

Algorithmes et structures de données

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 271
    Points : 4 081
    Points
    4 081
    Par défaut Indexer fichiers audio
    Bonjour,
    J'ai une collection de fichiers audio et je souhaite les indexer. Sur mon programme en C++, je bloque sur l'algorithme d'indexation car j'ai besoin de :
    - récupérer tout les sous dossiers du dossier source
    - récupérer les fichiers audio présents dans chaque dossier
    - lire les tag ID3
    - insérer dossiers et fichiers dans une base de données

    De plus, par la suite je compte surveiller les modifications :
    - ajout/suppression de fichier dans un dossier
    - détection des modifications sur un fichier

    Pour indexer j'avais penser à cette méthode :
    1) lister tout les dossiers et les insérer dans la base
    2) rechercher tout les fichiers audio par dossier, lire leur tag ID3 et les ajouter dans la base de données
    J'attends vos avis pour la performance et les améliorations

    Pour détecter les modifications, j'ai trouvé 2 solutions relatives aux fichiers pour le moment :
    - en fonction de la date de modification du fichier
    - grâce à un système d'empreinte : CRC, MD5, SHA1, ...
    En ce qui concerne les dossiers, je ne sais pas du trop :
    - en fonction de la date de modification sur un dossier (semble fonctionner pour un système de fichier ext3/4, pour les autres je ne sais pas


    Merci d'avance pour vos contributions

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Pour indexer j'avais penser à cette méthode :
    1) lister tout les dossiers et les insérer dans la base
    2) rechercher tout les fichiers audio par dossier, lire leur tag ID3 et les ajouter dans la base de données
    J'attends vos avis pour la performance et les améliorations
    C'est en O(n) et tu ne pourras pas faire autrement : tu es obligé de passer tous les dossiers pour faire la première indexation.

    Le plus important semble être ta base de données. Dans l'idée, ça serait un arbre n-aire avec comme noeud interne des dossiers et comme feuille tes fichiers. Il faudrait pouvoir ordonner les fils d'un noeud de façon à les passer rapidement (ordre alphabétique pour une recherche dichotomique ou encore hachage).

    Pour la gestion des modifications, le mieux (et le plus portable) est sans doute la gestion d'un hachage sur le contenu (à l'instar de git).

    Maintenant, plutôt que de développer longuement l'idée, il faudrait que tu nous précises ce qui te pose problème.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par smarties Voir le message
    Pour détecter les modifications, j'ai trouvé 2 solutions relatives aux fichiers pour le moment :
    - en fonction de la date de modification du fichier
    - grâce à un système d'empreinte : CRC, MD5, SHA1, ...
    En ce qui concerne les dossiers, je ne sais pas du trop :
    - en fonction de la date de modification sur un dossier (semble fonctionner pour un système de fichier ext3/4, pour les autres je ne sais pas
    La date de modification n'est pas forcément fiable : tu sembles être sous Unix, donc tu connais la commande touch, n'est-ce pas ?

    Côté empreinte, fais au plus simple. MD5 ou SHA1 sont trop coûteux et n'apporteront pas grand-chose de plus par rapport à un bête CRC32 qui sera cent fois plus rapide à calculer.
    Pour ma part, je te conseillerais de travailler avec une quadruple empreinte taille / date / CRC32 partiel / CRC32 complet. Si la taille du fichier à changé, pas besoin d'être sorti de Polytechnique pour savoir qu'il a été modifié, et c'est une opération très rapide à faire étant donné que tu as la taille pendant la recherche des fichiers elle-même. Même chose pour la date, même si c'est un poil plus complexe / coûteux en temps CPU de les comparer.
    Pour le CRC32 partiel, il porte sur une partie "libre" du fichier et modifiable librement, en l'occurrence le tag ID3. Si ce CRC32 est modifié, tu devras remettre à jour tes données. Là aussi, c'est une opération rapide à faire.
    Dernier point, le CRC32 total, qui sera garant que les données musicales elles-mêmes n'ont pas été modifiées. C'est plus lent et plus coûteux en temps CPU (sans parler de la charge disque...), mais c'est fiable.

    Il te reste juste à faire derrière un bout d'IHM pour demander à l'utilisateur s'il veut une indexation rapide ou intégrale : c'est un curseur à 4 positions qui indiquera combien d'empreintes différentes seront testées.

    Pour la notification de modification, tu as plusieurs choses :
    • La notification pendant le fonctionnement de l'application.
      Certains OS (Windows par exemple) permettent de "surveiller" un répertoire donné et d'être averti de toute modification. Toutefois, ceci ne marche QUE pendant le fonctionnement de ton application !
      Si tu veux que ça fonctionne tout le temps, il te faudra installer un service / daemon pour surveiller le système en permanence... Chose peu conseillée : d'une part, ça plombe le système, et d'autre part cela va t'obliger à synchroniser deux processus.
    • La vérification des changements au lancement de l'application.
      Là, pas le choix : soit tu as un service qui tourne pour t'en informer, soit tu devras refaire un scan à chaque lancement (quitte à le faire dans un thread basse priorité, bien sûr).
      Dans les deux cas, le principe de quadruple empreinte que je t'ai énoncé plus haut reste valide afin d'accélérer cette indexation.
    • Tu peux aussi utiliser une sorte de "cache" des données de chaque répertoire (l'équivalent d'un dir ou d'un ls) stocké dans un fichier caché, qui permettra de vérifier rapidement si le contenu du répertoire a changé ou pas. Cela ne solutionne pas le problème des sous-répertoires, mais ça accélèrera toujours un peu la phase d'analyse.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. dessiner la forme d'onde d'un fichier audio
    Par cgodefrw dans le forum DirectX
    Réponses: 7
    Dernier message: 26/06/2005, 08h40
  2. Fichiers Audios
    Par DarkOcean dans le forum Musique
    Réponses: 20
    Dernier message: 12/05/2005, 11h16
  3. fonction pour lire les fichier audio
    Par tarek007 dans le forum Multimédia
    Réponses: 1
    Dernier message: 11/05/2005, 16h28
  4. obtenir la durée d'un fichier audio
    Par cgodefrw dans le forum DirectX
    Réponses: 2
    Dernier message: 07/10/2004, 16h49
  5. Récupérer les infos sur un fichier audio
    Par Halleck dans le forum Windows
    Réponses: 13
    Dernier message: 17/04/2004, 18h39

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