2013-04-15 71 views
10

我想知道是否有一種方法可以將文本保存爲語音數據轉換爲以後播放的mp3或Wav文件格式?C#將文本保存爲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); 

我想讓外部保存下來,以便以後再玩。做這個的最好方式是什麼?

回答

4

不是我的答案,從How do can I use LAME to encode an wav to an mp3 c#


最簡單的方法複製粘貼在.NET 4.0中:

使用Visual Studio的NuGet包管理器控制檯:

Install-Package NAudio.Lame 

代碼剪輯:將語音發送到內存流,然後另存爲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

我已經嘗試過你的相同的代碼,在本地完美工作,但無法在服務器上創建mp3文件。你知道我們在服務器上需要什麼配置嗎? –

+0

您需要在服務器上部署一些dll以便naudio運行,例如你是否將libmp3lame.32.dll和libmp3lame.64.dll與你的exe文件放在同一個文件夾中? – Cel

+0

是的,我有他們,我有他們在Bin文件夾和根目錄以及。但當我在服務器上運行此應用程序它創建一個2kb大小的MP3文件總是獨立於您輸入的非常大的文本和MP3不播放。我認爲由於服務器上的一些問題,它無法正常創建mp3。 –

-1

通常,如果某些工作在開發工作站上,但不在生產服務器上,則會出現權限問題。兩個想法: Lame是否在某處創建臨時文件?如果是這樣的話,IIS進程需要寫入權限。 在編寫輸出文件時,IIS進程需要權限才能寫入該文件。 ConvertWavStreamToMp3File(ref ms, "mytest.mp3");「mytest.mp3」可能需要一個完整的路徑,使用Server.MapPath()

+0

我的第一個答案,它的投票... ...? – LegacyOfHerot

相關問題