Trying to convert a 12 year old wav file to mp3,
8K, 8bit, Mono-channel, Mu-Law format, WAV
and I am getting this error in LameMP3FileWriter line:
LameMP3FileWriter: Unsupported encoding format MuLaw Parameter name: format
static void Main(string[] args)
{
string wavFilePath = @"C:\temp\Message.wav";
string mp3FilePath = @"C:\temp\Message.mp3";
if (!File.Exists(mp3FilePath))
{
byte[] bytearrwav = File.ReadAllBytes(wavFilePath);
byte[] bytearrmp3 = ConvertWavToMp3(bytearrwav);
File.WriteAllBytes(mp3FilePath, bytearrmp3);
}
}
public static byte[] ConvertWavToMp3(byte[] wavFile)
{
try
{
using (var retMs = new MemoryStream())
using (var ms = new MemoryStream(wavFile))
using (var rdr = new WaveFileReader(ms))
using (var wtr = new LameMP3FileWriter(retMs, rdr.WaveFormat, 128))
{
rdr.CopyTo(wtr);
return retMs.ToArray();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
Could anyone show me how to convert this type of wav to mp3?
I ended up using SOX and LAME exes instead to convert to usable wav file and then convert to mp3. It turned out to be an easy and effective solution. Here's the main part of the code:
SOX command line utility: URL: http://sox.sourceforge.net/
Version: SoX 14.4.2 released on 02/22/2015
LAME compiled command line utility: URL: http://www.rarewares.org/mp3-lame-bundle.php
Version: LAME 3.99.5 released on 05/22/2014, Bundle compiled with Intel Compiler 14.0.3.
You need to get your file converted to a more standard format before converting it to MP3. Use
WaveFormatConversionStream.CreatePcmStream
to go from mu law to linear PCM 16 bit. Then the next challenge will be that LAME probably won't like 8kHz audio, so upsample to at least 16kHz, possibly higher with either anotherWaveFormatConversionStream
orMediaFoundationResampler
.