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

C Discussion :

Lecture entrée Audio : timings ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Par défaut Lecture entrée Audio : timings ?
    Bonjour,

    Je me permet de poser cette question ici car je n'ai trouvé aucun réponse claire et concise à ma question.

    En fait je ne comprend pas comment est géré l'acquisition des données audio par le driver audio ... je m'explique, admettons le code suivant dans le même processus ( fd étant un descripteur de fichier du style /dev/dsp sous Linux).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ...
    read(fd, buf, size);
     
    ...
     
    process(buf, size);
     
    ...
    Est-ce que l'on "perd des données" durant le temps de traitement de la fonction process() ? Ou est-ce que le drivers continue de mémoriser "en interne" les échantillons de l'entrée audio ? Le cas échéant il doit bien y avoir une limite de taille non ?

    J'espère avoir été assez clair, sinon n'hésitez pas à me demander de mieux expliquer mon problème.

    Merci pour vos éventuelles réponses.

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Je vois à peu près comment ça se passe sur la sortie, alors je suppose que sur l'entrée c'est la même chose... Je suis sous Windows, les autres systèmes sont peut-être différents. Sur la sortie, on envoie un paquet à la carte son qui possède son propre buffer d'entrée. une interruption levée par la carte son indique que son buffer est presque vide et un callback est chargé d'envoyer le prochain paquet. C'est tout le problème du "temps de latence" qui fait que les musiciens haïssent leur PC, car on a beau écrire quoi que ce soit dans le paquet, il ne sera pas transmis immédiatemment.

    En entrée, je suppose que la carte son échantillonne son bus audio et bufférise ses données. Elle doit envoyer cycliquement une interruption du genre "mon buffer est quasi-plein" pour qu'un callback récupère les données. Si quelqu'un en sait plus, je suis sûr que ça intéressera beaucoup de monde.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Par défaut
    Merci de ta réponse.

    C'est bien ce que je pensais, mais dans mon cas, je pense perdre des données le temps d'exécuter process() ...

    A moins de mettre le read() dans un autre thread et de libérer un sémaphore lorsque la lecture est terminée ?

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    C'est peut-être le problème classique: Pour diminuer la latence, on diminue la taille du buffer. Ca part d'un bon sentiment, ça marche dans 95% des cas, mais il suffit que l'OS soit un peu chargé (genre plein d'accès disque ou autres) et c'est perdu... Je ne sais pas comment tu développes, mais je te conseille une librairie spécialisée comme SDL ou FMOD, qui encapsulent ça très bien et qui n'ont plus à faire leurs preuves. En plus elles sont multiplateforme (pour fmod, je ne suis pas sûr). Les threads et les callbacks sont encapsulés, tu peux te concentrer ainsi sur l'essentiel.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    C'est peut-être le problème classique: Pour diminuer la latence, on diminue la taille du buffer. Ca part d'un bon sentiment, ça marche dans 95% des cas, mais il suffit que l'OS soit un peu chargé (genre plein d'accès disque ou autres) et c'est perdu... Je ne sais pas comment tu développes, mais je te conseille une librairie spécialisée comme SDL ou FMOD, qui encapsulent ça très bien et qui n'ont plus à faire leurs preuves. En plus elles sont multiplateforme (pour fmod, je ne suis pas sûr). Les threads et les callbacks sont encapsulés, tu peux te concentrer ainsi sur l'essentiel.
    Je confirme FMOD est très multiplateforme ( les consoles sont aussi supportées )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [gfortran] Lecture entrée clavier
    Par s.chaillol dans le forum Fortran
    Réponses: 4
    Dernier message: 22/09/2008, 14h21
  2. Problème lecture cd audio
    Par chris2laO dans le forum Debian
    Réponses: 6
    Dernier message: 15/06/2007, 18h40
  3. [Time] Comment calculer la différence entre deux Time?
    Par adil_vpb dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 14/03/2007, 17h24
  4. [Time] comment calculer une différence entre deux Time?
    Par adil_vpb dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/03/2007, 17h02
  5. diffrence entre deux TIME
    Par mrkinfo dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 31/07/2006, 15h18

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