共用方式為


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 方法傳回的結果。 這可用來驗證辨識是否成功,也存取在語音辨識期間可能已擷取的任何例外狀況。

屬性

屬性 類型​ 描述
Text string 已辨識的文字。
例外狀況 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 Community Toolkit 範例應用程式中找到作用中的範例SpeechToText

API

您可以在 .NET MAUI Community Toolkit GitHub 存放庫找到 的SpeechToText原始程式碼。