2013-04-15 5 views
10

मुझे आश्चर्य है कि किसी एमपी 3 या WAV फ़ाइल प्रारूप में पाठ को पाठ को सहेजने का कोई तरीका बाद में वापस खेला जा सकता है?सी # एमपी 3 फ़ाइल में भाषण में पाठ सहेजें

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

मैं इसे बाहरी रूप से सहेजने की कोशिश कर रहा हूं इसलिए मैं इसे बाद में खेल सकता हूं। इसे करने का बेहतरीन तरीका क्या है?

उत्तर

8

multiple options जैसे मौजूदा स्ट्रीम में सहेज रहे हैं। यदि आप एक नई WAV फ़ाइल बनाना चाहते हैं, तो आप SetOutputToWaveFile विधि का उपयोग कर सकते हैं।

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

नहीं मेरा उत्तर, नेट 4.0 में How do can I use LAME to encode an wav to an mp3 c#


सबसे आसान तरीका से पेस्ट कॉपी:

उपयोग दृश्य स्टूडियो 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

का उपयोग करके एक पूर्ण पथ होने की आवश्यकता होगी, मैंने आपके समान कोड का प्रयास किया था, स्थानीय पर सही काम करता था लेकिन सर्वर पर एमपी 3 फ़ाइल बनाने में असमर्थ था। क्या आपको पता है कि सर्वर पर हमें किस कॉन्फ़िगरेशन की आवश्यकता है? –

+0

आपको काम करने के लिए नोडियो के लिए सर्वर पर कुछ डीएलएस तैनात करने की आवश्यकता है उदा। क्या आपने libmp3lame.32.dll और libmp3lame.64.dll को अपने exe के समान फ़ोल्डर में रखा था? – Cel

+0

हां मेरे पास है, मेरे पास उन्हें बिन फ़ोल्डर और रूट निर्देशिका में भी है। लेकिन जब मैं सर्वर पर यह एप्लिकेशन चलाता हूं तो यह आपके द्वारा दर्ज किए गए बहुत बड़े टेक्स्ट से स्वतंत्र 2kb के आकार के साथ एक एमपी 3 फ़ाइल बनाता है और एमपी 3 नहीं खेलता है। मुझे लगता है कि सर्वर पर कुछ मुद्दों के कारण यह एमपी 3 ठीक से नहीं बना सकता है। –

-1

अक्सर, यदि कोई dev वर्कस्टेशन पर काम करता है लेकिन उत्पादन सर्वर पर नहीं, तो इसकी अनुमति समस्या होती है। दो विचार: क्या लंगड़ा कहीं अस्थायी फाइलें बनाता है? यदि ऐसा है तो आईआईएस प्रक्रिया को वहां लिखने की अनुमति की आवश्यकता है। आउटपुट फ़ाइल लिखते समय, फिर आईआईएस प्रक्रिया को लिखने की अनुमति की आवश्यकता होती है। ConvertWavStreamToMp3File(ref ms, "mytest.mp3"); "mytest.mp3" शायद Server.MapPath()

+0

मेरा पहला जवाब, और इसके नीचे मतदान ...? – LegacyOfHerot

संबंधित मुद्दे