C# Save text to speech to MP3 file

前端 未结 3 763
有刺的猬
有刺的猬 2021-02-13 17:20

I am wondering if there is a way to save text to speech data to an mp3 or Wav file format to be played back at a later time?

SpeechSynthesizer reader = new Speec         


        
相关标签:
3条回答
  • 2021-02-13 17:24

    Often, if something works on a dev workstation but not on a production server, its a permissions issue. two thoughts: Does Lame create temporary files somewhere? If so the IIS process needs write permissions there. When writing the output file, again the IIS process needs permission to write that. ConvertWavStreamToMp3File(ref ms, "mytest.mp3"); "mytest.mp3" will probably need to be a full path, using Server.MapPath()

    0 讨论(0)
  • 2021-02-13 17:43

    There are multiple options such as saving to an existing stream. If you want to create a new WAV file, you can use the SetOutputToWaveFile method.

    reader.SetOutputToWaveFile(@"C:\MyWavFile.wav");
    
    0 讨论(0)
  • 2021-02-13 17:43

    Not my answer, copy paste from How do can I use LAME to encode an wav to an mp3 c#


    Easiest way in .Net 4.0:

    Use the visual studio Nuget Package manager console:

    Install-Package NAudio.Lame
    

    Code Snip: Send speech to a memory stream, then save as 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 讨论(0)
提交回复
热议问题