Freigeben über


SpeechToText

Die SpeechToText-API bietet die Möglichkeit, Sprache in Text zu konvertieren.

Screenshot der Implementierung von SpeechText unter macOS

Die folgenden Voraussetzungen sind für SpeechToText erforderlich:

Berechtigungen hinzufügen zu AndroidManifest.xml:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

Syntax

C#

SpeechToText kann wie folgt in C# verwendet werden:

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);
    }
}

oder Ereignisse verwenden:

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;
}

Methoden

Methode Beschreibung
RequestPermissions Fordert die Berechtigung an.
ListenAsync Startet die Spracherkennung.
StartListenAsync Startet den SpeechToText-Dienst. (Die Echtzeit-Spracherkennungsergebnisse werden über RecognitionResultUpdated und RecognitionResultCompleted angezeigt)
StopListenAsync Beendet den SpeechToText-Dienst. (Spracherkennungsergebnisse werden über RecognitionResultCompleted angezeigt)

SpeechToTextResult

Das Ergebnis, das von der ListenAsync-Methode zurückgegeben wurde. Damit können Sie überprüfen, ob die Erkennung erfolgreich war, und auch auf Ausnahmen zugreifen, die während der Spracherkennung aufgetreten sind.

Eigenschaften

Eigenschaft Typ BESCHREIBUNG
Text string Der erkannte Text.
Exception Exception Ruft die Exception ab, wenn der Spracherkennungsvorgang fehlgeschlagen ist.
IsSuccessful bool Ruft einen Wert ab, der angibt, ob der Vorgang erfolgreich war.
CurrentState SpeechToTextState Ruft einen aktuellen Überwachungszustand ab.

Ereignisse

EventName EventArgs Beschreibung
RecognitionResultUpdated SpeechToTextRecognitionResultUpdatedEventArgs Wird ausgelöst, wenn für SpeechToText Aktualisierungen in Echtzeit erfolgen.
RecognitionResultCompleted SpeechToTextRecognitionResultCompletedEventArgs Wird ausgelöst, wenn SpeechToText abgeschlossen ist.
StateChanged SpeechToTextStateChangedEventArgs Wird ausgelöst, wenn sich CurrentState geändert hat.

Methoden

Methode Beschreibung
EnsureSuccess Überprüft, ob der Spracherkennungsvorgang erfolgreich war.

Warnung

EnsureSuccess löst eine Exception aus, wenn der Erkennungsvorgang nicht erfolgreich war.

Registrierung von Abhängigkeiten

Wenn Sie einen Dienst einfügen möchten, müssen Sie ihn zunächst registrieren. Aktualisieren Sie MauiProgram.cs mit den nächsten Änderungen:

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();
    }
}

Jetzt können Sie den Dienst wie folgt einfügen:

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);
	}
}

Beispiele

Ein konkretes Beispiel für SpeechToText in Aktion finden Sie in der Beispielanwendung für das .NET MAUI Community Toolkit.

API

Sie finden den Quellcode für SpeechToText über das GitHub-Repository für das .NET MAUI Community Toolkit.