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 :

Conversion audio avec LAME


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut Conversion audio avec LAME
    Depuis quelque jour, j'essaye de convertir un fichier .wav en mp3
    Pour cela j'utilise LAME.
    J'arrive a convertir le fichier en passant par l'invite de commande avec cette commande:
    lame.exe -b128 --resample 8 -m j \"C:\\test.wav\" \"C:\\test.mp3\"

    Mais imposible en C++ (en passant par la librairie LAME)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    int main()
    {
        //...
        //...
        // extraction de données audio PCM du fichier .wav  dans un fichier file.pcm
        short read, write;
     
        FILE *pcm = fopen("file.pcm", "rb");    //PCM du fichier .wav
        FILE *mp3 = fopen("file.mp3", "wb");
     
        const int PCM_SIZE = 18424;
        const int MP3_SIZE = 13424;
     
        short int pcm_buffer[PCM_SIZE];       //PCM du fichier .wav
        unsigned char mp3_buffer[MP3_SIZE];
     
        lame_t lame = lame_init();
     
       if ( lame == NULL ) {
            cout<<"Unable to initialize MP3"<<endl;
            return -1;
        }
     
        lame_set_num_channels(lame, 1);
        lame_set_in_samplerate(lame, 8000);
        lame_set_out_samplerate(lame, 8000);
        lame_set_brate(lame, 128);
        lame_set_mode(lame, MONO);
        lame_set_quality(lame, 2);
        lame_set_bWriteVbrTag(lame, 0);
        if (( lame_init_params(lame)) < 0) {
            cout << "Unable to initialize MP3 parameters"<<endl;
            return -1;
        }
     
        do {
            read = fread(pcm_buffer,sizeof(short), PCM_SIZE, pcm);
            if (read == 0)
                write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
            else
                write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
            fwrite(mp3_buffer, write, 1, mp3);
        } while (read != 0);
     
        lame_close(lame);
        fclose(mp3);
        fclose(pcm);
     
        return 0;
    }
    Le fichier obtenu est mon fichier audio mais en tres movaise qualité.


    Des idées pour reglé le probleme ?


    Voici les info de mon .wav :
    Frequence: 8000
    BlocSize: 16
    NbrCanaux: 1 (mono)
    BytePerSec: 16000
    BytePerBloc: 2
    BitsPerSample: 16

    Merci


    Edit:
    J'aimerais donc ne pas passer par une ligne de commande (pour la portabilité entre OS)

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Déjà un sample rate de 8000 c'est peu, je fais généralement 44100 voire 48000.
    Ensuite, un bitrate de 128 c'est pas mal, mais 192 est beaucoup mieux et tu peux aller plus loin (320 ?) et tu peux aussi utiliser VBR (Variable Bit Rate).
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    Le fichier .wav que j'ai, m'est donnée sous cette forme. Il aura toujours
    8000 de simple rate ,un bitrate de 128, et une taille de 13466 octets.

    J'ai l'impression que c'est l'encodage de PCM vers MP3 qui se passe mal, car quand je regarde le .mp3 générer, j'ai a partir du milieu du fichier des octets qui ont pour valeur 0x55
    Je n'ai aucune idée de la source du problème...

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    La qualité du fichier wav est très basse. La compression mp3 est destructive, donc j'aurais tendance à dire que compresser un fichier de mauvaise qualité en mp3, on obtiendra un fichier de qualité encore plus mauvaise.

    Du coup, dans ta situation, le mp3 n'est peut-être pas adapté.

    PS : as-tu bien vérifier les paramètres d'encodage du mp3 ? Il y a un paramètre qualité.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    Merci de tes infos moldavi.
    Actuellement j'utilise lame.exe pour la conversion, et elle marche très bien (mais pas portable entre OS). Le sample rate est toujours de 8000 après conversion, et la qualité est la même qu'en .wav .
    Donc ce n'est pas un problème de Sample Rate.

    Pour le paramètre de qualité c'est: lame_set_quality(lame, 2);
    Que la qualité soit a 1 ou a 5, le son reste inchangé (mais la taille du fichier augmente plus le chiffre est grand).
    Mon problème est un problème de paramètre (ou utilisation de la librairie lame), mais je ne vois pas l'erreur.

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne connais pas lame, mais quelque chose m'interpelle dans ton code: tu utilises la fonction lame_encode_buffer_interleaved, ce qui laisse à penser que les buffers seraient entrelacés, ce qui n'a pas de sens si tu es en mono.
    Essaie peut-être avec la fonction lame_encode_buffer()

    La taille du buffer mp3 aussi me laisse perplexe: je pense qu'il serait plus sûr qu'il fasse la même taille que le buffer wav.

Discussions similaires

  1. Probleme audio avec Adobe Flash Player
    Par maadadi dans le forum Audio
    Réponses: 5
    Dernier message: 07/11/2007, 23h54
  2. Enregistrer de l'audio avec php
    Par persia dans le forum Langage
    Réponses: 9
    Dernier message: 07/12/2006, 17h16
  3. Probleme audio avec SDL
    Par Invité dans le forum SDL
    Réponses: 5
    Dernier message: 17/03/2006, 17h31
  4. Conversion incorrecte avec atof ou strtod
    Par sber74 dans le forum C
    Réponses: 16
    Dernier message: 15/03/2006, 20h32
  5. [Diffusion audio] avec JavaScript ou PHP, est-ce possible ?
    Par GritNatz dans le forum Général Conception Web
    Réponses: 16
    Dernier message: 26/11/2005, 01h44

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