语音/语音到文本

时间:2011-01-13 06:40:40

标签: c# .net speech-recognition voice-recognition speech-to-text

我需要一个API或库(最好免费),它会通过麦克风将语音/语音转换为文本(字符串)。

此外,我需要一个可以进行文本转语音的API或库。

我想使用C#和.NET,但其他语言就足够了。

感谢。

6 个答案:

答案 0 :(得分:15)

您可以使用CMU Sphinx,因为它是非常开放和可扩展的解决方案,我认为它可以在客户端和服务器端使用:

http://cmusphinx.sourceforge.net/

如果您正在寻找Microsoft桌面解决方案,那么您可以使用SAPI:

http://msdn.microsoft.com/en-us/magazine/cc163663.aspx

在服务器端,您可以使用Microsoft统一通信,但也要考虑许可:

http://www.microsoft.com/uc/en/gb/default.aspx

更新

这个帖子也有一些很好的参考:

C# Speech Recognition - Is this what the user said?

答案 1 :(得分:11)

以下是使用C#和System.Speech从语音转换为文本的完整示例

代码可分为两个主要部分:

配置SpeechRecognitionEngine对象(及其必需元素) 处理SpeechRecognized和SpeechHypothesized事件。

第1步:配置SpeechRecognitionEngine

_speechRecognitionEngine = new SpeechRecognitionEngine();
_speechRecognitionEngine.SetInputToDefaultAudioDevice();
_dictationGrammar = new DictationGrammar();
_speechRecognitionEngine.LoadGrammar(_dictationGrammar);
_speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);

此时,您的对象已准备好开始从麦克风转录音频。但是,您需要处理某些事件,以便实际访问结果。

第2步:处理SpeechRecognitionEngine事件

  

_speechRecognitionEngine.SpeechRecognized - = new EventHandler(SpeechRecognized);   _speechRecognitionEngine.SpeechHypothesized - = new EventHandler(SpeechHypothesizing);

     

_speechRecognitionEngine.SpeechRecognized + = new EventHandler(SpeechRecognized);   _speechRecognitionEngine.SpeechHypothesized + = new EventHandler(SpeechHypothesizing);

     

private void SpeechHypothesizing(对象发送者,   SpeechHypothesizedEventArgs e){   ///来自引擎的实时结果   string realTimeResults = e.Result.Text; }

     

private void SpeechRecognized(对象发件人,SpeechRecognizedEventArgs   e){   ///来自引擎字符串finalAnswer =的最终答案   e.Result.Text; }

就是这样。如果您想使用预先录制的.wav文件而不是麦克风,则可以使用

  

_speechRecognitionEngine.SetInputToWaveFile(pathToTargetWavFile);

而不是

  

_speechRecognitionEngine.SetInputToDefaultAudioDevice();

这些课程中有许多不同的选项,值得更详细地探讨。

http://ellismis.com/2012/03/17/converting-or-transcribing-audio-to-text-using-c-and-net-system-speech/

答案 2 :(得分:2)

请参阅Using c++ to call and use Windows Speech Recognition

其中说:

Microsoft为Windows的客户端和服务器版本提供语音识别引擎。两者都可以用C ++或.NET语言编程。用C ++编程的传统API称为SAPI。客户端和服务器语音的.NET框架名称是System.Speech和Microsoft.Speech。

SAPI文档 - http://msdn.microsoft.com/en-us/library/ms723627(VS.85).aspx

用于客户端识别的.NET命名空间是System.Speech - http://msdn.microsoft.com/en-us/library/system.speech.recognition.aspx。 Windows Vista和7包括语音引擎。

用于服务器识别的.NET命名空间是Microsoft.Speech,而版本为10.2的完整SDK可在http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4获得。语音引擎是免费下载的。

许多早期的问题已经解决了这个问题。有关示例,请参阅Prototype based on speech recognitiongetting started with speech recognition and speech synthesisSAPI and Windows 7 Problem

答案 3 :(得分:0)

要进行文字转换,您必须遵循以下3个步骤:

1.添加System.Speech参考。

2.添加标题:

使用System.Speech;

使用System.Speech.Synthesis;

3.添加以下代码,其中textBox1是文本框的默认名称。

            SpeechSynthesizer speaker = new SpeechSynthesizer();
            speaker.Rate = 1;
            speaker.Volume = 100;
            speaker.Speak(textBox1.Text);

答案 4 :(得分:-1)

I'd like to use C# and .NET, but other languages will suffice.如果您对C++ Festival

开放,请检查此项

答案 5 :(得分:-1)

每个Windows操作系统中都有一个用于Text2Speach的内置DLL。您将在c:\ Programs \ Shared Folders \ Microsoft Shared \ Speech \ sapi.dll(sAPI - speach api)中找到相应的dll - 我不太确定路径 - 但无论如何您可能会搜索sapi.dll。

之后您可以使用以下代码段

SpVoice oVoice = new SpVoice();
oVoice.Voice = oVoice.GetVoices("","").Item(0); // 0 indicating what kind of speaker you want
oVoice.Volume = 50;
oVoice.Speak("hello world", SpeechVoiceSpeakFlags.SVSFDefault);
oVoice = null;