2008-10-31 12 views
5

मैं वर्तमान में एक ऐसे अनुप्रयोग पर काम कर रहा हूं जिसके लिए एक विशिष्ट ऑडियो प्रारूप में एन्कोड किए गए भाषण के संचरण की आवश्यकता होती है।प्रश्न भाषण सिंथेसाइज़र .etOutputToAudioStream ऑडियो प्रारूप समस्या

System.Speech.AudioFormat.SpeechAudioFormatInfo synthFormat = 
         new System.Speech.AudioFormat.SpeechAudioFormatInfo(System.Speech.AudioFormat.EncodingFormat.Pcm, 
          8000, 16, 1, 16000, 2, null); 

यह कहा गया है कि ऑडियो पीसीएम प्रारूप, प्रति सेकंड 8000 नमूने, नमूना प्रति 16 बिट, मोनो, 16000 प्रति सेकंड औसत बाइट्स, 2.

ब्लॉक संरेखण में है जब मैं निष्पादित करने का प्रयास निम्नलिखित कोड मेरे मेमोरीस्ट्रीम उदाहरण में कुछ भी नहीं लिखा गया है; हालांकि जब मैं प्रति सेकंड 8000 नमूने से 11025 तक बदलता हूं तो ऑडियो डेटा सफलतापूर्वक लिखा जाता है।

SpeechSynthesizer synthesizer = new SpeechSynthesizer(); 
waveStream = new MemoryStream(); 

PromptBuilder pbuilder = new PromptBuilder(); 
PromptStyle pStyle = new PromptStyle(); 

pStyle.Emphasis = PromptEmphasis.None; 
pStyle.Rate = PromptRate.Fast; 
pStyle.Volume = PromptVolume.ExtraLoud; 

pbuilder.StartStyle(pStyle); 
pbuilder.StartParagraph(); 
pbuilder.StartVoice(VoiceGender.Male, VoiceAge.Teen, 2); 
pbuilder.StartSentence(); 
pbuilder.AppendText("This is some text."); 
pbuilder.EndSentence(); 
pbuilder.EndVoice(); 
pbuilder.EndParagraph(); 
pbuilder.EndStyle(); 

synthesizer.SetOutputToAudioStream(waveStream, synthFormat); 
synthesizer.Speak(pbuilder); 
synthesizer.SetOutputToNull(); 

कोई अपवाद या त्रुटियों जब 8000 का एक नमूना दर का उपयोग कर और मैं दस्तावेज में उपयोगी कुछ भी SetOutputToAudioStream के बारे में नहीं मिल सका और क्यों यह प्रति सेकंड 11025 नमूनों में सफल होता है और न 8000. मैं एक है दर्ज की गई हैं वर्कअराउंड जिसमें मैंने उत्पन्न किया है और कुछ ध्वनि संपादन टूल का उपयोग करके सही नमूना दर में परिवर्तित किया गया है, लेकिन यदि मैं कर सकता हूं तो मैं एप्लिकेशन के भीतर से ऑडियो जेनरेट करना चाहता हूं।

ब्याज में से एक खास बिंदु SpeechRecognitionEngine स्वीकार करता है कि कि ऑडियो प्रारूप और सफलतापूर्वक मेरी संश्लेषित लहर फ़ाइल में भाषण ... मान्यता प्राप्त था

अपडेट: हाल ही में पता चला कि इस ऑडियो प्रारूप कुछ स्थापित आवाज के लिए सफल होता है, लेकिन विफल रहता है दूसरो के लिए। यह विशेष रूप से एलएच माइकल और एलएच मिशेल के लिए विफल रहता है, और विफलता प्रॉम्प्टबिल्डर में परिभाषित कुछ आवाज सेटिंग्स के लिए भिन्न होती है।

उत्तर

3

है यह (जो एलएच माइकल और एलएच मिशेल आवाज बस 8000 हर्ट्ज नमूना दर का समर्थन नहीं करते पूरी तरह से संभव है क्योंकि वे स्वाभाविक नमूने उत्पन्न> 8000 हर्ट्ज)। एसएपीआई इंजन को असमर्थित दरों को अस्वीकार करने की अनुमति देता है।

1

मैंने आपके NAudio लाइब्रेरी में कुछ कक्षाएं बनाई हैं ताकि आप अपने ऑडियो डेटा को एक अलग नमूना दर में परिवर्तित कर सकें, अगर आप सिंथेसाइज़र से 11025 के साथ फंस गए हैं। एक WaveFormatConversionStream पर नज़र (जो एसीएम का उपयोग करता है) या ResamplerDMO (एक DirectX मीडिया ओब्जेक्ट उपयोग करता है)

+0

क्षमा करें अगर मैं आपको बाधित करता हूं, ऐसा लगता है कि आप ऑडियो सामान में विशेषज्ञ हैं, मेरे पास [यह सवाल] है (http://stackoverflow.com/q/33932390/2651073) जिसने मुझे भ्रमित कर दिया है, क्या आप कृपया मेरी मदद कर सकते हैं उस? – Ahmad

1

मुझे एक समान समस्या थी और अगर कोई इसे मदद करता है तो उत्तर पोस्ट करना चाहता था। इस धागे ने मुझे जवाब खोजने की ओर अग्रसर किया। मेरा मुद्दा था, मैं स्पीचसिंथेसाइज़र आउटपुट को एक डब्ल्यूएवी फ़ाइल में था, और फिर उस डब्ल्यूएवी फ़ाइल को नूडियो के साथ खेल रहा था। जब फ़ाइल में आउटपुट किया जाता है, तो यह संशोधन के बिना काम करता है। हालांकि, जब मेमोरीस्ट्रीम का उपयोग करने की कोशिश की जा रही है, तो यह वापस खेलेंगे, लेकिन आपने जो कुछ सुना है, वह एक स्क्वाक था।

SpeechSynthesizer outputting के लिए इस कोड को समस्या को ठीक किया और कोई संशोधन NAudio तरफ की जरूरत है:

SpeechAudioFormatInfo synthFormat = new SpeechAudioFormatInfo(EncodingFormat.Pcm, 88200, 16, 1, 16000, 2, null); 
synth.SetOutputToAudioStream(streamAudio, synthFormat); 

88200 कुंजी है। डिफ़ॉल्ट रूप से, यह 11025 है। SpeechAudioFormatInfo बनाना और इसे 88200 पर सेट करना आवश्यक है।