2013-04-15 11 views
10

mi chiedo se c'è un modo per salvare il testo in dati vocali ad un mp3 o formato di file Wav da riprodurre in un secondo momento?C# Salva il testo in parlato in file 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); 

sto cercando di ottenere che salvati esternamente in modo che può giocare in un secondo momento. Qual è il modo migliore per farlo?

risposta

8

ci sono multiple options come il salvataggio di uno stream esistente. Se si desidera creare un nuovo file WAV, è possibile utilizzare il metodo SetOutputToWaveFile.

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

Non la mia risposta, copia incolla da How do can I use LAME to encode an wav to an mp3 c#


modo più semplice in .Net 4.0:

Utilizzare il Visual Studio Nuget Package Manager Console:

Install-Package NAudio.Lame 

Codice snip: Invia discorso a un flusso di memoria, quindi salvare come mp3:

01.235.164,106 mila
//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

Avevo provato lo stesso codice del tuo, funziona perfettamente in locale ma non riesco a creare file mp3 sul server. Hai idea di quale configurazione abbiamo bisogno sul server? –

+0

è necessario distribuire alcune DLL sul server per NAudio a lavorare per esempio hai messo libmp3lame.32.dll e libmp3lame.64.dll nella stessa cartella del tuo exe? – Cel

+0

Sì, li ho, li ho nella cartella Bin e anche nella directory root. Ma quando eseguo questa applicazione sul server, creo un file mp3 con la dimensione di 2kb sempre indipendente dal testo molto grande che inserisci e dal l'mp3 non suona. Penso che a causa di alcuni problemi sul server non sia possibile creare mp3 correttamente. –

-1

Spesso, se qualcosa funziona su una workstation di sviluppo ma non su un server di produzione, è un problema di autorizzazioni. due pensieri: Lame crea file temporanei da qualche parte? Se è così, il processo IIS ha bisogno di permessi di scrittura lì. Quando si scrive il file di output, ancora una volta il processo di IIS ha bisogno di permesso di scrivere questo. ConvertWavStreamToMp3File(ref ms, "mytest.mp3"); "mytest.mp3" dovrà probabilmente essere un percorso completo, utilizzando Server.MapPath()

+0

La mia prima risposta, e la sua giù votata ...? – LegacyOfHerot