Est-il BOITEUX wrapper C++\simplifier (travail sur Linux, Mac et Gagner de code pur)?
Je veux créer simple pcm mp3 projet C++. Je veux qu'il à utiliser la LAME. J'aime BOITEUX, mais il est vraiment grand. j'ai donc besoin d'un certain type de l'OpenSource de travail à partir de code pur avec de la pure lame du code de workflow simplifier. Pour ainsi dire, je lui donne de Fichier PCM et COPIE de fichier. Appeler quelque chose comme:
LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR);
de minerai de telle chose dans les 4 - 5 lignes (des exemples existent) et j'ai vhat j'nécessaire, Il doit être léger, simple, powerfool, open source, multi plates-formes.
Est-il quelque chose comme cela?
- En dépit de la lame de sources assez grand, il n'est pas nécessaire d'apprendre plein de sources. Vous avez seulement besoin de regarder par l'analyse de la commande de la chaux paramètres et leur correspondance interne, des boiteux, des structures.
Vous devez vous connecter pour publier un commentaire.
Boiteux n'est vraiment pas difficile à utiliser, bien qu'il existe beaucoup d'option de configuration des fonctions si vous en avez besoin. Elle prend un peu plus de 4-5 lignes pour encoder un fichier, mais pas beaucoup plus. Voici un exemple de travail, j'ai frappé ensemble (juste les fonctionnalités de base, pas de contrôle d'erreur):
gcc lametest.c -lmp3lame
(après l'installation de la bibliothèque et les fichiers d'en-tête avecsudo apt-get install libmp3lame-dev
). Je n'ai aucune idée de comment l'installer et le lien avec les bibliothèques sur Mac et Windows, je le crains.sudo apt-get install libmp3lame-dev
. Sinon, utilisez votre distribution le gestionnaire de package pour la recherche de quelque chose comme ça, ou le télécharger à partir de la source sourceforge.net/projects/lame/files et de suivre ce que les instructions que vous trouverez à construire et à installer.inspiré par Mike Seymour réponse, j'ai créé une pure wrapper C++ qui permet d'encoder /décoder des fichiers WAV et MP3 en seulement 2 lignes de code
pas besoin de se soucier de la fréquence d'échantillonnage, byte taux et le nombre de canaux - cette information est obtenue à partir de fichiers WAV ou MP3 lors de l'encodage /décodage.
La bibliothèque ne pas utiliser de vieux C fonctions d'e/s, mais le C++ ruisseaux seulement. Je le trouve plus élégant.
Pour le confort, j'ai créé une très fine wrapper C++ sur LAME et l'a appelé lameplus et une petite bibliothèque pour l'extraction de données d'échantillonnage à partir de fichiers WAV.
Tous les fichiers peuvent être trouvés ici:
de codage/décodage: https://github.com/trodevel/convimp3
lameplus: https://github.com/trodevel/lameplus
wav manipulation: aussi sur github, référentiel est vague
J'ai utilisé avec succès libmp3lame dans la façon dont mike seymour proposé.
Je suis maintenant essayer d'utiliser la même approche à l'aide de threads posix pour accélérer l'encodage.
Je suis greating un lame_t pointeur, et ont plusieurs threads faire des bits de la conversion,
en prenant soin que chaque thread a un unique bit de la piste pcm qu'il convertit.
- Je utiliser un mondial lame_t structure qui est utilisée pour le codage dans chaque thread.
Mon code fonctionne pour 1 fil (pas d'exécution en parallèle), il fonctionne aussi si je de retarder la création de thread en mode parallèle (tel qu'il ne permet l'exécution en parallèle, mais les structures de données sont des tableaux).
Lorsque j'exécute mon code en mode parallèle, je reçois beaucoup d'erreurs comme
Pour referernce, je joins le code que j'utilise, qui compile très bien.
Peut-être quelqu'un sait si la lame ne peut pas être utilisé de cette façon dans le code parallèle. Je n'ai pas trouvé de conseils si c'est possible ou pas.
Le problème semble être que le mondial lame_t structure est accessible par plusieurs threads en même temps. J'ai pensé que ce serait seulement la lecture, donc pas de problème, mais il me semble être erronée.
J'ai aussi pensé qu'une solution pourrait être de créer un lame_t objet pour chaque thread.
J'ai essayé, en utilisant les threads pour encoder mutuellement exclusifs bits du fichier wav d'origine.
Le code compile et s'exécute sans problèmes, mais le fichier résultant contient pas de son.
Si quelqu'un est intéressé, je peux ajouter le code. C'est juste une modification mineure du code ci-dessus avec lame_t être un tableau de taille NTHREADS.
J'ai eu ce travail en changeant de 41000 à environ 8000:
à
Et compilé prog.c avec:
Le fichier.pcm ne sonne pas bien en tant que fichier.mp3. J'ai eu une parfaite conversion lorsque j'ai utilisé cette commande bash: