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

SDL Discussion :

Comment gérer la balance audio


Sujet :

SDL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 31
    Points : 91
    Points
    91
    Par défaut Comment gérer la balance audio
    Bonjour,

    Je ne connaissais SDL que de nom, et pour un projet je pense devoir l'utiliser, mais seulement la partie audio.

    Voila mon problème :
    J'ai un lecteur de vidéo qui utilise la librairie ffmpeg. Le flux audio des vidéos est en mono. Je dois pouvoir couper le son soit à droite, soit à gauche, mais sans utiliser /dev/mixer.
    Je me suis penché sur SDL, mais je ne sais pas bien comment faire. Je comptais utiliser SDL_OpenAudio et utiliser une fonction callback qui va bien, mais dans ce cas là, je ne peux pas utiliser Mix_SetPanning.
    Et Mix_SetPanning ne s'applique qu'à un channel.

    Y a-t-il un moyen autre que d'utiliser SDL ? Ou SDL permet de faire ça ?

    Zhebulonn

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 31
    Points : 91
    Points
    91
    Par défaut solution
    Je m'auto réponds, j'ai trouvé une solution. On ne sait jamais, ça peut servir.

    J'ai donc utilisé SDL pour convertir du mono en stéréo :

    decodedBuffer contient les données décodées par ffmpeg.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SDL_AudioCVT cvt;
    SDL_BuildAudioCVT(&cvt, AUDIO_S16, 1, 44100, AUDIO_S16, 2, 44100);
    cvt.buf = (Uint8*)malloc(decodedBuffer->getDataSize()*cvt.len_mult);
    memcpy(cvt.buf, decodedBuffer->getBuffer(), decodedBuffer->getDataSize());
    cvt.len = decodedBuffer->getDataSize();
    SDL_ConvertAudio(&cvt);
    Voila pour la partie SDL, ensuite, suivant qu'on veut écouter le canal gauche ou droit (trouvé sur le net) :

    Les valeurs de _leftVolume et _rightVolume sont comprises entre 0 et 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int16 = (short*) (cvt.buf);
        for(int i=0; i<cvt.len_cvt/2; i++) {
        	if (leftchannel) {
        		(*int16) = (short)((float)(*int16) * _leftVolume);
        	} else {
        		(*int16) = (short)((float)(*int16) * _rightVolume);
        	}
        	int16++;
        	leftchannel = !leftchannel;
        }
    Zhebulonn

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment gérer plusieurs langues ?
    Par InterSQL dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/02/2004, 16h12
  2. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49
  3. Comment gérer ma carte réseau en ASM
    Par will1974 dans le forum Assembleur
    Réponses: 6
    Dernier message: 23/09/2003, 17h08
  4. *Comment gérer la touche echap ?
    Par Adrael dans le forum C
    Réponses: 28
    Dernier message: 11/07/2003, 13h15
  5. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 09h44

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