SpeechToText

SpeechToText API 提供将语音转换为文本的功能。

在 macOS 上实现的 SpeechText 的屏幕截图

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 的源代码