如何使用 .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
更新(11 月 28 日之后)
找到了一种加载默认语法的方法。它是这样的:
sre.LoadGrammar(New DictationGrammar)
这里还有问题。识别不准确。输出是垃圾。对于一个 6 分钟的文件,它可能会给出 5-6 个与语音文件完全无关的文本词。
最佳答案
System.Speech 中的类用于文本到语音(主要是辅助功能)。
您正在寻找语音识别。有 System.Speech.Recognition自 .Net 3.0 起可用的命名空间。它使用 Windows 桌面语音引擎。这可能会让你开始,但我想那里有更好的引擎。
语音识别非常复杂,很难做到正确,也有一些商业产品可用。
关于C#:使用 System.Speech 命名空间将 WAV 文件转录为文本(语音到文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1768679/