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

Android Discussion :

Taille du cache - Traitement temps réel de MP3


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 133
    Points
    133
    Par défaut Taille du cache - Traitement temps réel de MP3
    Bonjour,

    Je souhaite faire du traitement de signal temps réel sur un fichier mp3.

    J'avais commencé en décodant complêtement le MP3, puis en appliquant le traitement sur un stream audio envoyé à un objet AudioTrack.

    Je me suis heurté à la difficulté des fichiers de trop grosse taille assez vite, et la mémoire disponible dans une application android étant assez petite, j'ai changé de stratégie. J'utilise maintenant un genre de ring-buffer. Sur un buffer, j'ai un certain nombre de portions (4 par exemple) d'une certaine taille (8192 octets par exemple).

    Quand je souhaite lire une musique, je lance deux threads.

    Le premier consiste à décoder ma musique, elle remplis toute les portions du buffer et se met en attente si la portion qu'il souhaite remplir est en train d'être lue par le second thread.
    Le second thread attends qu'une première portion soit écrite pour commencer la lecture, il y a donc un décalage entre les deux threads. J'utilise libmpg123 porté sous android, le décodage mp3 est très efficace (un certain nombre de fois plus rapide qu'une lecture temps réel du fichier mp3), ainsi il n'y a jamais de temps mort.

    Ma question concerne le buffer. Plus haut j'ai donné un exemple (4 portions de 8192 octets), cependant je l'ai choisi assez arbitrairement. Je souhaitais au moins 3 portions car avec deux portions le thread de décodage ne peut pas prendre "d'avance". Pour la taille d'une portion, c'est pareil, c'est assez arbitraire.

    Est ce que quelqu'un pourrait m'indiquer (une bonne pratique) comment choisir cette taille de buffer (pour ne pas en donner "trop" ce qui serait inutile, et pour ne pas la sous-évaluer non plus) ?

    Merci d'avance,

    Al_th

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Une bonne pratique est en général de ne pas utiliser de threads différents, mais une méthode "push":

    Par exemple:

    La boite de lecture lit le fichier (binaire) bouts par bouts (par exemple 1024 octets), et le passe chaque bout à la "boite suivante" (attend le retour, puis passe une autre bout... etc...).
    La boite "MP3-Decode" récupère les 1024 octets, si elle arrive à en décoder une partie, elle le fait, passe cette partie à la "boite suivante", puis récupère la mémoire utilisée.
    La boite "Traitement" effectue le traitement sur la partie décodée, puis envoie le résultat à la boite "suivante".
    La boite "Lecture" demande au système de "lire" les données... Si le système n'a pas commencé de lire le buffer précédent... la boite "attend" (et du coup met en pause toute la chaine avant).
    La boite "MP3-Encode" va encoder en MP3... quand elle a suffisemment de données, elle envoit un buffer de bytes à la boite suivante.
    La boite "Ecriture" écrit le fichier binaire.

    Après il est possible de faire un système ou les connexions entre boites indique "la taille de données" qu'elles aimeraient avoir....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/02/2013, 11h43
  2. traitement temp réel de données port série
    Par lezebulon dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 29/07/2010, 13h13
  3. Traitement temps réel du son.
    Par kindyroot dans le forum Windows
    Réponses: 24
    Dernier message: 15/07/2008, 04h39
  4. Réponses: 7
    Dernier message: 27/01/2006, 02h44
  5. Durée d'un traitement temps réel
    Par Almex dans le forum C
    Réponses: 5
    Dernier message: 29/03/2003, 15h15

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