2013-04-15 17 views
10

Konuşma verilerinin metne kaydedilmesinin bir mp3 veya Wav dosya formatına daha sonra çalınması için bir yol olup olmadığını merak ediyorum. Ben çalışıyorumC# Konuşmak için metni MP3 dosyasına kaydedin

SpeechSynthesizer reader = new SpeechSynthesizer(); 
reader.Rate = (int)-2; 
reader.Speak("Hello this is an example expression from the computers TTS engine in C-Sharp); 

o dışarıdan kurtarılmayı yüzden daha sonra oynatabilirsiniz. Bunu yapmanın en iyi yolu nedir?

cevap

8

Varolan bir dere kaydetme gibi multiple options vardır. Yeni bir WAV dosyası oluşturmak isterseniz, SetOutputToWaveFile yöntemini kullanabilirsiniz.

Kullanım visual studio Nuget Paket yöneticisi konsolu:

Install-Package NAudio.Lame 

Kod

reader.SetOutputToWaveFile(@"C:\MyWavFile.wav"); 
4

değil cevabım, .NET 4.0 How do can I use LAME to encode an wav to an mp3 c#


En kolay yoldan kopyalayıp yapıştırarak Snip: Bir bellek akışına konuşun, ardından mp3 olarak kaydedin:

//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); 
    } 
} 
+0

kullanarak tam bir yol olmalı, aynı kodunuzu denedim, yerelde mükemmel çalışıyor ancak sunucuda mp3 dosyası oluşturamıyor. Sunucuda hangi yapılandırmaya ihtiyacımız olduğuna dair bir fikrin var mı? –

+0

çalışmak için sunucuya bazı dlls dağıtmak gerekir. libb3lame.32.dll ve libmp3lame.64.dll dosyasını exe'nizdeki aynı klasöre koydunuz mu? – Cel

+0

Evet, onları var, Bin klasörüne ve kök dizinine de sahibim.Ama bu uygulamayı sunucuda çalıştırdığımda, 2kb boyutunda, girdiğiniz çok büyük metinden bağımsız olarak bir mp3 dosyası oluşturur. mp3 oynamıyor. Ben sunucudaki bazı sorunlar nedeniyle mp3 düzgün bir şekilde oluşturamaz düşünüyorum. –

-1

Genellikle bir şey bir iş istasyonunda çalışır, ancak bir üretim sunucusunda çalışmıyorsa, bir izin sorunu olur. iki düşünce: Lame bir yerde geçici dosyalar oluşturur mu? Öyleyse, IIS işleminin orada yazma izinleri olması gerekir. Çıkış dosyasını yazarken, bunu yeniden yazmak için IIS işleminin izne ihtiyacı vardır. ConvertWavStreamToMp3File(ref ms, "mytest.mp3"); "mytest.mp3" muhtemelen Server.MapPath()

+0

İlk cevabım ve aşağı oyu ...? – LegacyOfHerot

İlgili konular