Bonjour,

J'avais créé un sujet mais je me suis éloigné un peu de la question initiale, donc je développe ici mon probleme actuel :
je travaille en C# (sur un webservice pour être précis) et je souhaite encoder des fichiers wav (PCM) en mp3.

Pour cela je pense utiliser lame dont on m'a dit qu'il pouvait répondre à mon besoin. J'ai donc téléchargé sur internet une archive contenant une dll (lame_enc.dll) et un exécutable (lame.exe).

D'abord j'ai essayé de référencer la librairie lame_enc.dll dans mon projet VS, sans succès.
Donc je me penche en ce moment sur la librairie lame_enc.dll.
Après avoir téléchargé sur le net, j'ai vérifié sur l'exe de demo fourni que je vais pouvoir encoder les pcm que j'ai en mp3. J'ai récupéré dewplayer sur le net pour faire simple, donc je me dis que je vais m'en sortir tranquille.

Et puis non.

Je ne suis pas arrivé à référencer le lame_enc.dll dans mon webservice.

- si j'utilise "add reference" : je viens de télécharger la dll, je ne la trouve pas dans les onglets .net et com. donc je vais dans l'onglet browse pour le récupérer là où je l'ai mis.
>> fenetre d'erreur lors du référencement "A reference to "...lame_enc.dll" could not be added. no type libraries were found in the component."

- si j'essaie de le référencer "à la main" (d'apres ce que j'ai compris, ça revient à :
*copier la dll dans le bin du projet webservice
*double cliquer dessus pour voir la version (apparemment 3, 93, 1 0) et ajouter dans le web.config la ligne
<add assembly="lame_enc, Version=3.93.1.0, Culture=neutral, PublicKeyToken=<ma_clé>"/>
*et enfin rajouter un using lame_enc dans chaque classe ou je veux m'en servier (en l'occurence une seule)
>> Erreur de compilation VS Error "Could not load file or assembly 'lame_enc, Version=3.93.1.0, Culture=neutral, PublicKeyToken=<...>' or one of its dependencies. The module was expected to contain an assembly manifest. C:\(...)Web.Config"
l'erreur pointant sur la ligne que j'ai ajoutée dans le web.config.

Il me semble qu'il y avait une manip à faire (aximp, sn ou quelque chose comme ça), sans laquelle le publickey n'était pas le bon, mais j'ai completement oublié les détails.

Donc à supposer que cette dll soit celle dont j'ai besoin pour mon problème (encoder des pcm en mp3 en Csharp), comment la référencer? Je me noie un peu...
Puis je me suis résolu à utiliser l'exécutable.
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
/* Encodage wav WAV -> MP3 via lame.exe
     * @param   string  wav_file    nom complet du fichier wav à encoder
     * @return  srinng  mp3_file    nom complet du fichier mp3 de sortie
     */
    [WebMethod]
    public string encodeWavToMp3(string wav_file)
    {
        try
        {
            // Vérifier l'existence de l'exécutable
            string exe_name = Server.MapPath("lame.exe");
            FileInfo ExeFile = new FileInfo(exe_name);
            if (!ExeFile.Exists)
                throw new Exception("L'exécutable lame.exe est introuvable");
            // Vérifier l'existence du fichier
            FileInfo WavFile = new FileInfo(wav_file);
            if (!WavFile.Exists)
                throw new Exception("Le fichier wav spécifié n'existe pas");
 
            // cmd> lame <fichier>.wav <fichier>.mp3            
            // Arguments
            string mp3_file = wav_file.Substring(0, wav_file.Length - 4) + ".mp3";
            string exe_args = "\"" + wav_file + "\" \"" + mp3_file + "\"";
 
            // Appel
            ProcessStartInfo processStartInfo = new ProcessStartInfo(exe_name, exe_args);
            processStartInfo.UseShellExecute = false;
            processStartInfo.ErrorDialog = false;
 
            // Encodage effectué avec succès
            return mp3_file;
        }//try
        catch (Exception ex)
        {
            return ex.Message;
        }//catch
    }//generateWavFile
Mon code a l'air de marcher pour un fichier .wav de petite taille; par contre quand il s'agit d'un plus gros fichier (3Mo, 3 minutes) alors cela prend une éternité. Pourtant quand j'exécute lame sur ligne de commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
>lame monfichier.wav monfichier.mp3
l'encodage est fait en moins de 2 secondes pour une taille similaire.

Donc j'en suis revenu à mon point de départ : "j'y arrive pas". Alors si quelqu'un a des pistes pour un des deux points suivants :

- référencer lame_enc.dll dans mon projet, et m'en servir par la suite pour faire mon encodage;
- un code C# qui lance la ligne de commande
>lame monfichier.wav monfichier.mp3
sans mettre 3 heures à chaque fois.


Merci d'avance.