2013-04-15 17 views
10

Zastanawiam się, czy istnieje sposób na zapisanie danych tekst na mowę do formatu pliku mp3 lub Wav, aby odtworzyć go później?C# Zapisywanie tekstu na mowę do pliku MP3

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

Próbuję uzyskać to zapisane na zewnątrz, więc mogę odtworzyć je później. Jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

4

Nie moja odpowiedź, skopiuj pastę z How do can I use LAME to encode an wav to an mp3 c#


Najłatwiej w .NET 4.0:

używać visual studio Nuget Package konsolę Manager:

Install-Package NAudio.Lame 

kod Snip: wyślij mowę do strumienia pamięci, a następnie zapisz jako mp3:

//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

Próbowałem tego samego kodu, działa idealnie w lokalnym, ale nie można utworzyć pliku mp3 na serwerze. Czy masz pojęcie, jakiej konfiguracji potrzebujemy na serwerze? –

+0

musisz zainstalować kilka bibliotek dll na serwerze, aby urządzenie działało na przykład czy umieściłeś libmp3lame.32.dll i libmp3lame.64.dll w tym samym folderze co twój exe? – Cel

+0

Tak, mam je, mam je również w folderze Bin i katalogu głównym. Ale kiedy uruchomię tę aplikację na serwerze, utworzę plik mp3 o wielkości 2kb, zawsze niezależny od bardzo dużego wpisanego tekstu i mp3 nie gra. Myślę, że ze względu na pewne problemy na serwerze nie można poprawnie utworzyć mp3. –

-1

Często, jeśli coś działa na stacji roboczej programisty, ale nie na serwerze produkcyjnym, jest to problem z uprawnieniami. dwie myśli: Czy Lame gdzieś tworzy pliki tymczasowe? Jeśli tak, proces IIS wymaga uprawnień do zapisu. Podczas zapisywania pliku wyjściowego, ponownie proces IIS potrzebuje uprawnień, aby to zapisać. ConvertWavStreamToMp3File(ref ms, "mytest.mp3"); "mytest.mp3" prawdopodobnie musi być pełną ścieżką, używając Server.MapPath()

+0

Moja pierwsza odpowiedź, a jej dół głosował ...? – LegacyOfHerot

Powiązane problemy