Şu anda sesi yakalamak için NAudio kullanıyorum ve sadece bir wav dosyası oluşturuyorum. Dosyayı kaydetmeden önce bir mp3'e şifrelemek için bir yol arıyorum. LAME buldum ama lame_enc.dll dosyasını eklemeye çalıştığımda "Referans eklenemedi. Lütfen dosyanın erişilebilir olduğundan emin olun ve geçerli bir derleme veya COM bileşeni". Herhangi bir yardım takdir edilecektir.Bir wav'ı bir mp3 c'ye kodlamak için LAME'yi nasıl kullanabilirim? #
cevap
Sadece lame_enc.dll dosyasını bin klasörüne yerleştirin ve başvuruyu eklemeyi denemeyin. Bundan sonra bu kodu deneyin. 64,128 gibi ..... Burada da ayarlayabilirsiniz bit hızı
public byte[] ConvertWavToMP3(byte[] bt, uint bitrate)
{
MemoryStream ms = new MemoryStream(bt);
ms.Seek(0, SeekOrigin.Begin);
var ws = new WaveFileReader(ms);
byte[] wavdata = null;
using (MemoryStream wavstrm = new MemoryStream())
using (WaveFileWriter wavwri = new WaveFileWriter(wavstrm, ws.WaveFormat))
{
ws.CopyTo(wavwri);
wavdata = wavstrm.ToArray();
}
WaveLib.WaveFormat fmt = new WaveLib.WaveFormat(ws.WaveFormat.SampleRate, ws.WaveFormat.BitsPerSample, ws.WaveFormat.Channels);
Yeti.Lame.BE_CONFIG beconf = new Yeti.Lame.BE_CONFIG(fmt, bitrate);
byte[] srm = null;
using (MemoryStream mp3strm = new MemoryStream())
using (Mp3Writer mp3wri = new Mp3Writer(mp3strm, fmt, beconf))
{
mp3wri.Write(wavdata, 0, wavdata.Length);
byte[] mp3data = mp3strm.ToArray();
return mp3data;
}
}
lame_enc.dll
Eğer sadece .NET uygulamasında bir referansı ekleyemezsiniz yani yönetilmeyen bir DLL dosyası. Giriş noktalarının ne olduğunu ve nasıl çağrıldığını tanımlamak için bir sarıcıya ihtiyacınız var. change format from wav to mp3 in memory stream in NAudio: lame_enc.dll
için ben bir adım-adım yanıtta MP3 kodlama için soruyu bu nasıl kullanılacağı yayınlanan this CodeProject article.
bağlı kod bulunabilir Yeti
sarmalayıcı kullanın. Bu seni başlatmalı.
Net 4.0 kolay yolu:
Kullanım visual studio Nuget Paket yöneticisi konsolu:
Install-Package NAudio.Lame
Kod Snip:
//reference System.Speech
using System.Speech.Synthesis;
using System.Speech.AudioFormat;
//reference Nuget Package NAudio.Lame
using NAudio.Wave;
using NAudio.Lame;
using (SpeechSynthesizer reader = new SpeechSynthesizer()) {
//set some settings
reader.Volume = 100;
reader.Rate = 0; //medium
//save to memory stream
MemoryStream ms = new MemoryStream();
reader.SetOutputToWaveStream(ms);
//do speaking
reader.Speak("This is a test mp3");
//now convert to mp3 using LameEncoder or shell out to audiograbber
ConvertWavStreamToMp3File(ref ms, "mytest.mp3");
}
public static void ConvertWavStreamToMp3File(ref MemoryStream ms, string savetofilename) {
//rewind to beginning of stream
ms.Seek(0, SeekOrigin.Begin);
using (var retMs = new MemoryStream())
using (var rdr = new WaveFileReader(ms))
using (var wtr = new LameMP3FileWriter(savetofilename, rdr.WaveFormat, LAMEPreset.VBR_90)) {
rdr.CopyTo(wtr);
}
}
: mp3 olarak kaydetmek sonra, bir bellek akışı konuşma gönder
retMs bu örnekte hiçbir şey yapmaz mı? –
http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET – MichaC