如何使用.NET语音命名空间类将WAV文件中的音频转换为文本格式,我可以在屏幕上显示或保存到文件中?
我正在寻找一些教程样本。
找到代码示例here。但是当我尝试它时它给出了不正确的结果。下面是我采用的vb代码示例。 (其实我不介意lang,只要它的vb / c#...)。它没有给我正确的结果。我假设如果我们把正确的语法 - 即我们在录音中所期望的单词 - 我们应该得到它的文本输出。首先,我尝试了调用中的示例单词。它有时只打印那个(一个)字而不是其他字。然后我尝试了一些我们在录音中完全没有想到的词......不幸的是它也打印出来了...... :(
Imports System
Imports System.Speech.Recognition
Public Class Form1
Dim WithEvents sre As SpeechRecognitionEngine
Private Sub btnLiterate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLiterate.Click
If TextBox1.Text.Trim.Length = 0 Then Exit Sub
sre.SetInputToWaveFile(TextBox1.Text)
Dim r As RecognitionResult
r = sre.Recognize()
If r Is Nothing Then
TextBox2.Text = "Could not fetch result"
Return
End If
TextBox2.Text = r.Text
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = String.Empty
Dim dr As DialogResult
dr = OpenFileDialog1.ShowDialog()
If dr = Windows.Forms.DialogResult.OK Then
If Not OpenFileDialog1.FileName.Contains("wav") Then
MessageBox.Show("Incorrect file")
Else
TextBox1.Text = OpenFileDialog1.FileName
End If
End If
End Sub
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
sre = New SpeechRecognitionEngine()
End Sub
Private Sub sre_LoadGrammarCompleted(ByVal sender As Object, ByVal e As System.Speech.Recognition.LoadGrammarCompletedEventArgs) Handles sre.LoadGrammarCompleted
End Sub
Private Sub sre_SpeechHypothesized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechHypothesizedEventArgs) Handles sre.SpeechHypothesized
System.Diagnostics.Debug.Print(e.Result.Text)
End Sub
Private Sub sre_SpeechRecognitionRejected(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognitionRejectedEventArgs) Handles sre.SpeechRecognitionRejected
System.Diagnostics.Debug.Print("Rejected: " & e.Result.Text)
End Sub
Private Sub sre_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognizedEventArgs) Handles sre.SpeechRecognized
System.Diagnostics.Debug.Print(e.Result.Text)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim words As String() = New String() {"triskaidekaphobia"}
Dim c As New Choices(words)
Dim grmb As New GrammarBuilder(c)
Dim grm As Grammar = New Grammar(grmb)
sre.LoadGrammar(grm)
End Sub
End Class
找到一种加载默认语法的方法。它是这样的:
sre.LoadGrammar(New DictationGrammar)
这里仍有问题。认可并不准确。输出是垃圾。对于6分钟的文件,它可能提供5-6个字的文本,与语音文件完全无关。
答案 0 :(得分:8)
System.Speech中的类用于文本到语音(主要是可访问性功能)。
您正在寻找语音识别。自.Net 3.0以来,有System.Speech.Recognition命名空间可用。它使用Windows桌面语音引擎。这可能会让你开始,但我想有更好的引擎。
语音识别非常复杂且难以做到,也有一些商业产品可用。
答案 1 :(得分:1)
我意识到这是一个老问题,但在以后的问题和答案中有更好的信息。例如,请参阅What is the best option for transcribing speech-to-text in a asp.net web app?
您可以调用SetInputToWaveFile()来读取音频文件,而不是调用SetInputToDefaultAudioDevice()。
Windows Vista和Windows 7中的桌面识别引擎包含一个听写语法,如参考答案中所示。
答案 2 :(得分:0)
您实际上需要自然语言工具包。在python中,我使用了NTLK http://www.nltk.org/
答案 3 :(得分:0)
您应该使用SpeechRecognitionEngine
。要使用wave文件,请致电SetInputToWaveFile
。我希望我能帮助你更多,但我不是专家。
哦,如果你的话真的是triskaidekaphobia
,我认为即使是人类语音识别引擎也不会认识到......
答案 4 :(得分:0)
我已经测试了您的代码,但它没有正确抓取wave文件。它正在捕捉
如果不是OpenFileDialog1.FileName.Contains(“wav”)那么 MessageBox.Show(“文件不正确”) 其他 TextBox1.Text = OpenFileDialog1.FileName 结束如果
不是其他条件。我也尝试在字符串中使用.wav。
我还需要一个示例代码,用于将wav文件转录为不是来自Microphone的文本。如果你找到了一个好的解决方案,那么请在这里发布。