bibliothèque de décodage Windows mp3 c c ++

J’ai passé toute la journée à ça et ça me rend fou

Est-ce que quelqu’un connaît un moyen simple de décoder un mp3 en un simple fichier pcm (wave) 16 bits? J’ai besoin de quelque chose que je peux expédier avec mon programme commercial, donc je préfère un .lib

J’ai trouvé libmpg123.dll, mais je ne vois pas comment faire en sorte que mon programme soit lié à une dll dans msvc 2010. Je sais que je dois append une référence, mais lorsque je clique sur “append une nouvelle référence”, tout ce que j’ai est un dialog vide avec nom de projet et en-tête de répertoire de projet et rien à cliquer. J’ai essayé de convertir .dll en .lib en utilisant l’outil lib mais cela n’arrête pas de me plaindre car le format de fichier .def est mauvais.

J’ai essayé de construire madplayer mais je ne peux pas trouver id3tag.h et il n’y a pas de documentation ou d’exemples d’utilisation de libmad que je puisse trouver

Lame a l’air trop énorme

Toutes les idées pour une solution rapide pour un .lib je peux créer un lien avec et être fait avec elle

Merci, steve

mpg123 est bien. Je peux voir que vous avez des problèmes pour obtenir une bibliothèque statique (.lib).

Il y a 2 façons d’obtenir la lib:

  1. Construisez le code source. C’est beaucoup plus flexible, mais c’est un peu délicat. Si vous téléchargez les sources, vous pouvez trouver un port sur VS2010 via le chemin suivant: ports \ MSVC ++ \ 2010. Mais dans ce cas, vous rencontrerez des problèmes d’installation de YASM et de manipulation des configurations de construction (il semble que les configurations ne sont pas correctement ajustées dans le package de code source).
  2. Utilisez l’outil lib en convertissant le fichier .def. Vous n’avez pas besoin de sources car les packages binarys contiennent déjà les fichiers .h et .def. Je vais expliquer en détails:

    1. Téléchargez les fichiers binarys ( win32 ou win64 ) et extrayez, disons, dans le dossier D:\mpg123 .
    2. Exécuter à partir de Démarrer -> Microsoft Visual Studio 2010 -> Outils de Visual Studio -> Invite de commandes Visual Studio (2010).
    3. Allez dans votre dossier cd D:\mpg123 , D: et exécutez la ligne: lib /def:libmpg123-0.dll.def (ou lib /def:libmpg123-0.dll.def soit le nom du fichier def lib /def:libmpg123-0.dll.def ).
    4. Vous avez maintenant le fichier .lib souhaité libmpg123-0.dll.lib dans votre dossier.

Notez toutefois que la page de propriétés ‘Framework and References’ est utilisée pour définir des références aux assemblys .NET Framework, aux composants COM ou aux projets externes ( MSDN ). Dans ce cas, vous devez spécifier une dépendance supplémentaire de l’éditeur de liens dans votre projet [Propriétés de configuration => Éditeur de liens => Entrée => Dépendances supplémentaires].

la réponse d’Olexander fonctionne très bien, merci beaucoup

J’ai une petite chose à append lorsque vous téléchargez mpg123-1.15.1-x86.zip

vous verrez libmpg123-0.dll (la dll) et libmpg123-0.dll.def la chose utilisée pour créer le fichier .lib comme décrit ci-dessus. il est préférable de changer le nom en libmpg123-0.def sinon il va chercher une dll appelée libmpg123-0.dll qui n’est pas agréable

à côté de ça, ça marche très bien. Je ne peux pas croire que cette information n’était pas sur Internet il y a des années. merci Olexander et merci stackoverflow

FYI, voici un simple décodeur mp3 utilisant mpg123

 #include "mpg123/mpg123.h" #define INBUFF 16384 #define OUTBUFF 32768 void loadMp3File(const char* filename) { mpg123_handle *mh; unsigned char *buffer; size_t buffer_size; size_t done; int err; int channels, encoding; long rate; mpg123_init(); mh = mpg123_new(NULL, &err); buffer_size = mpg123_outblock(mh); buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char)); /* open the file and get the decoding format */ mpg123_open(mh, filename); mpg123_getformat(mh, &rate, &channels, &encoding); /* set the output format and open the output device */ int m_bits = mpg123_encsize(encoding); int m_rate = rate; int m_channels = channels; /* decode and play */ for (int totalBtyes = 0 ; mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK ; ) { totalBtyes += done; } /* clean up */ free(buffer); mpg123_close(mh); mpg123_delete(mh); mpg123_exit(); }