URL: https://linuxfr.org/forums/programmation-c/posts/conversion-en-mp3-avec-libmp3lame Title: Conversion en mp3 avec libmp3lame Authors: Mais qui suis-je ? :) Date: 2013年06月12日T17:39:22+02:00 License: CC By-SA Tags: lame, mp3 et c Score: 0 Salut, Alors voilà, je suis en train d'essayer de comprendre comment marche la librairie lame pour encoder en mp3, le tout à partir d'un prog C++ Lame est assez mal documenté, j'ai un truc qui compile, qui parfois veut bien tourner (en jouant avec les params) mais clairement pas quelques chose qui marche, à prioris je dois pas comprendre la fonction : int lame_encode_buffer_interleaved ( lame_global_flags * gfp,short int buffer[],int nsamples,unsigned char * mp3buf, int mp3buf_size) Voilà comment j'éssaye de l'utiliser, ===================================================== //Je vous épargne la lecture du header du wav, et ce genre de truc while (inStream) { inStream.read(WavBuff,WavBufferSize); cout << "read : " << inStream.gcount() << endl; int PCMBuffSize=WavBufferSize/(sizeof(short int)/sizeof(char)); cout << PCMBuffSize << endl; short int* PCMBuff /*= new short int[PCMBuffSize]*/; int MP3BuffSize=(1.25*PCMBuffSize+7200); // Magic numbers from lame.h unsigned char* MP3Buff = new unsigned char[MP3BuffSize]; //Conversion char* from read to short int PCMBuff=reinterpret_cast(WavBuff); lame_encode_buffer_interleaved(lame, PCMBuff,WavBufferSize,MP3Buff, MP3BuffSize); if (!inStream) { lame_encode_flush(lame, MP3Buff,MP3BuffSize); } //Et puis on écrit le buffer avec le mp3 outStream.write((char*)MP3Buff,PCMBuffSize); delete[] MP3Buff; } inStream.close(); ================================================== Allons y pour les questions, * Comment je connais la taille du buffer qui contiens mon mp3, je veux dire après encodage, pour savoir combien de bit je doit écrire ? Car je m'en sort avec un fichier trop long entrecoupé de blancs * Est-ce que avoir seté : lame_set_num_channels(lame,channels); me garantit que lame sait faire la différence tout seul entre du mono et du stéréo ? Car je soupçonne qu'un de mes problèmes y soit liés * Je veux lire mon tableau de char comme un tableau de short (input de la fonction) est-ce que int PCMBuffSize=WavBufferSize/(sizeof(short int)/sizeof(char)); me donne la bonne taille, est-ce qu'un simple ré-interpret cast est bon (je pense que oui, vu ce que me dit la calculatrice et l'éditeur hexa) Voilà pour la première séries de questions, si quelqu'un à l'habitude

AltStyle によって変換されたページ (->オリジナル) /