SpeechToText
SpeechToText
API 提供将语音转换为文本的功能。
SpeechToText
需要满足以下前提条件:
向 AndroidManifest.xml
添加权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
语法
C#
SpeechToText
可在 C# 中按如下所示方式使用:
async Task Listen(CancellationToken cancellationToken)
{
var isGranted = await speechToText.RequestPermissions(cancellationToken);
if (!isGranted)
{
await Toast.Make("Permission not granted").Show(CancellationToken.None);
return;
}
var recognitionResult = await speechToText.ListenAsync(
CultureInfo.GetCultureInfo(Language),
new Progress<string>(partialText =>
{
RecognitionText += partialText + " ";
}), cancellationToken);
if (recognitionResult.IsSuccessful)
{
RecognitionText = recognitionResult.Text;
}
else
{
await Toast.Make(recognitionResult.Exception?.Message ?? "Unable to recognize speech").Show(CancellationToken.None);
}
}
或使用事件:
async Task StartListening(CancellationToken cancellationToken)
{
var isGranted = await speechToText.RequestPermissions(cancellationToken);
if (!isGranted)
{
await Toast.Make("Permission not granted").Show(CancellationToken.None);
return;
}
speechToText.RecognitionResultUpdated += OnRecognitionTextUpdated;
speechToText.RecognitionResultCompleted += OnRecognitionTextCompleted;
await speechToText.StartListenAsync(CultureInfo.CurrentCulture, CancellationToken.None);
}
async Task StopListening(CancellationToken cancellationToken)
{
await speechToText.StopListenAsync(CancellationToken.None);
speechToText.RecognitionResultUpdated -= OnRecognitionTextUpdated;
speechToText.RecognitionResultCompleted -= OnRecognitionTextCompleted;
}
void OnRecognitionTextUpdated(object? sender, SpeechToTextRecognitionResultUpdatedEventArgs args)
{
RecognitionText += args.RecognitionResult;
}
void OnRecognitionTextCompleted(object? sender, SpeechToTextRecognitionResultCompletedEventArgs args)
{
RecognitionText = args.RecognitionResult;
}
方法
方法 | 说明 |
---|---|
RequestPermissions | 请求权限。 |
ListenAsync | 启动语音识别。 |
StartListenAsync | 启动 SpeechToText 服务。 (实时语音识别结果将通过 RecognitionResultUpdated 和 RecognitionResultCompleted 显示) |
StopListenAsync | 停止 SpeechToText 服务。 (语音识别结果将通过 RecognitionResultCompleted 显示) |
SpeechToTextResult
从 ListenAsync
方法返回的结果。 这可用于验证识别是否成功,还可以访问在语音识别期间可能已引发的任何异常。
属性
属性 | 类型 | 说明 |
---|---|---|
文本 | string |
已识别的文本。 |
Exception | Exception |
如果语音识别操作失败,则获取 Exception 。 |
IsSuccessful | bool |
获取确定操作是否成功的值。 |
CurrentState | SpeechToTextState |
获取当前侦听状态。 |
事件
EventName | EventArgs | 说明 |
---|---|---|
RecognitionResultUpdated | SpeechToTextRecognitionResultUpdatedEventArgs |
当 SpeechToText 有实时更新时触发。 |
RecognitionResultCompleted | SpeechToTextRecognitionResultCompletedEventArgs |
SpeechToText 完成后触发。 |
StateChanged | SpeechToTextStateChangedEventArgs |
更改 CurrentState 时触发。 |
方法
方法 | 说明 |
---|---|
EnsureSuccess | 验证语音转文本操作是否成功。 |
警告
如果识别操作不成功,EnsureSuccess
将引发 Exception
。
依赖项注册
如果要注入服务,首先需要注册该服务。
使用以下更改更新 MauiProgram.cs
:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiCommunityToolkit();
builder.Services.AddSingleton<ISpeechToText>(SpeechToText.Default);
return builder.Build();
}
}
现在,可以按如下方式注入该服务:
public partial class MainPage : ContentPage
{
private readonly ISpeechToText speechToText;
public MainPage(ISpeechToText speechToText)
{
InitializeComponent();
this.speechToText = speechToText;
}
public async void Listen(object sender, EventArgs args)
{
var isGranted = await speechToText.RequestPermissions(cancellationToken);
if (!isGranted)
{
await Toast.Make("Permission not granted").Show(CancellationToken.None);
return;
}
var recognitionResult = await speechToText.ListenAsync(
CultureInfo.GetCultureInfo("uk-ua"),
new Progress<string>(), cancellationToken);
recognitionResult.EnsureSuccess();
await Toast.Make($"RecognizedText: {recognitionResult.Text}").Show(cancellationToken);
}
}
示例
可以在 .NET MAUI 社区工具包示例应用程序中查找 SpeechToText
的示例。
API
可以在 .NET MAUI 社区工具包 GitHub 存储库查看SpeechToText
的源代码