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

Audio Discussion :

xaudio2 et temps de latence


Sujet :

Audio

  1. #1
    Membre à l'essai Avatar de meynaf
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 10
    Points
    10
    Par défaut xaudio2 et temps de latence
    Bonjour,


    J'ai réussi à faire jouer à xaudio2 ce que je voulais qu'il joue. En tous cas pour un test simple.
    Ce que je veux, c'est du temps réel, pas jouer un wav avec 4 secondes d'avance.
    Du coup il faut appeler SubmitSourceBuffer un paquet de fois par seconde, en envoyant peu de données en une fois, sinon l'utilisateur se demandera pourquoi le son est décalé de l'image...

    Mais dès que je descends en-dessous d'une demi-seconde (24000 samples en 48000hz), il commence à y avoir des "trous" dans l'audio.
    Bien sûr plus on descend et moins ils sont espacés. Avec une taille suffisamment basse - mais théoriquement tout à fait valide - c'est carrément l'horreur.

    Une taille pareille rend xaudio2 totalement inutilisable pour ce que je voulais en faire. "Low latency" mon oeil, pour ne pas dire mon autre chose.
    Donc si je n'ai pas de solution je suis coincé, et, peut-être, obligé de tout recommencer. Par exemple utiliser wasapi, mais c'est incomparablement plus compliqué et je n'ai aucun exemple que je puisse utiliser comme base.

    Ma méthode actuelle est de lancer un thread qui va attendre qu'on lui fournisse quelque chose et jouer le(s) son(s) demandé(s) jusqu'à la fin ou indéfiniment si ça boucle.
    On remplit simplement une structure, on la lui passe et il se débrouille avec.
    Je dois faire le mixage "à la main" parce qu'xaudio2 ne fournit pas les fonctionnalités requises - ou alors j'ai pas trouvé.
    Pour le moment, une seule voie - avec un mixage rapide et nase qui plus est - suffit à échouer misérablement.

    Mais peut-être ai-je simplement foiré quelque part ?
    Y a-t-il des pièges dans lesquels ne pas tomber ?
    Une méthode "classique" qui permette de s'en sortir en pareil cas ?

    Note : je peux poster le code ici s'il le faut mais >600 lignes c'est pas idéal.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Autant que j'ai pu le comprendre, il semble que vous utilisez un thread, qui reçoit les données audio d'autre part. Qu'est ce qui vous dit que votre thread (ou la transmission des données) se fait exactement au moment où le voulez. Généralement, l'OS peut prendre du temps à réveiller tel ou tel thread. Certes le décalage n'est pas "énorme", mais pour de l'audio, c'est perceptible immédiatement.
    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.

  3. #3
    Membre à l'essai Avatar de meynaf
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Certes le décalage existe, mais il est de l'ordre de 16ms ou un truc dans le genre.
    Or ici j'en suis à une demi-seconde, soit 500ms : je sais que windows n'est pas un système temps réel, mais là il exagère !
    Du point de vue de la vidéo, c'est plus de 70 frames !
    On n'est clairement pas dans une situation où c'est l'ordonnanceur qui coince.

    De plus, le thread principal lit depuis le fichier et envoie les données par pavé de 4 secondes...
    Ce n'est pas du tout l'utilisation typique qui est prévue, mais au moins ça me simplifie mon affaire dans un premier temps.
    Il va de soi que les trous sont bien plus fréquents que ça, sinon j'aurais compris d'où ça venait.

Discussions similaires

  1. Temps de latence à l'affichage
    Par Flophx dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 21/09/2007, 19h06
  2. Service windows - Temps de latence lors de l'arrét
    Par Grosbenji dans le forum Windows
    Réponses: 1
    Dernier message: 09/07/2007, 14h10
  3. Mesure de temps de latence d'un LCD
    Par Txitxounet dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 08/11/2006, 22h06
  4. Problème de temps de latence avec KeyAdapter
    Par marissa_mean dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 08/10/2006, 20h35
  5. [KeyPressed] temps de latence
    Par dieurouille dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/06/2006, 21h01

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