Komma igång med talöversättning

En av huvudfunktionerna i Taltjänsten är möjligheten att känna igen mänskligt tal och översätta det till andra språk. I den här snabbstarten lär du dig hur du använder Speech SDK i dina appar och produkter för att utföra talöversättning av hög kvalitet. I den här snabbstarten går vi bland annat:

  • Översätta tal till text
  • Översätta tal till flera målspråk
  • Utföra direkt tal till tal-översättning

Gå vidare till exempel på GitHub

Om du vill hoppa direkt till exempelkoden kan du gå till C#-snabbstartsexempel på GitHub.

Förutsättningar

Den här artikeln förutsätter att du har ett Azure-konto och en prenumeration på Speech-tjänsten. Om du inte har ett konto och en prenumeration kan du prova Speech-tjänsten utan kostnad.

Installera Speech SDK

Innan du kan göra något måste du installera Speech SDK. Beroende på din plattform följer du anvisningarna i avsnittet Hämta Speech SDK i artikeln Om Speech SDK.

Importera beroenden

Om du vill köra exemplen i den här artikeln inkluderar using du följande instruktioner överst i filen Program.cs.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using Microsoft.CognitiveServices.Speech.Translation;

Känsliga data och miljövariabler

Exempelkällkoden i den här artikeln beror på miljövariabler för lagring av känsliga data, till exempel prenumerationsnyckeln för Speech-resursen och regionen. Klassen Program innehåller två värden som static readonly string tilldelas från värddatorerna miljövariabler, SPEECH__SUBSCRIPTION__KEY nämligen och SPEECH__SERVICE__REGION . Båda dessa fält finns i klassomfånget, vilket gör dem tillgängliga i metodens text i klassen. Mer information om miljövariabler finns i miljövariabler och programkonfiguration.

public class Program
{
    static readonly string SPEECH__SUBSCRIPTION__KEY =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
    
    static readonly string SPEECH__SERVICE__REGION =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));

    static Task Main() => Task.CompletedTask;
}

Skapa en talöversättningskonfiguration

Om du vill anropa Speech-tjänsten med hjälp av Speech SDK måste du skapa en SpeechTranslationConfig . Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Tips

Oavsett om du utför taligenkänning, talsyntes, översättning eller avsiktsigenkänning skapar du alltid en konfiguration.

Det finns några olika sätt att initiera en SpeechTranslationConfig :

  • Med en prenumeration: skicka in en nyckel och den associerade regionen.
  • Med en slutpunkt: skicka in en speech-tjänstslutpunkt. En nyckel eller auktoriseringstoken är valfri.
  • Med en värd: skicka in en värdadress. En nyckel eller auktoriseringstoken är valfri.
  • Med en auktoriseringstoken: skicka en auktoriseringstoken och den associerade regionen.

Låt oss ta en titt på hur en SpeechTranslationConfig skapas med hjälp av en nyckel och region. Hämta dessa autentiseringsuppgifter genom att följa stegen i Prova Speech-tjänsten kostnadsfritt.

public class Program
{
    static readonly string SPEECH__SUBSCRIPTION__KEY =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
    
    static readonly string SPEECH__SERVICE__REGION =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));

    static Task Main() => TranslateSpeechAsync();

    static async Task TranslateSpeechAsync()
    {
        var translationConfig =
            SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

Ändra källspråk

En vanlig uppgift för talöversättning är att ange indataspråket (eller källan). Låt oss ta en titt på hur du skulle ändra indataspråket till italienska. Interagera med instansen i SpeechTranslationConfig koden och tilldela den till egenskapen SpeechRecognitionLanguage .

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    // Source (input) language
    translationConfig.SpeechRecognitionLanguage = "it-IT";
}

Egenskapen SpeechRecognitionLanguage förväntar sig en språkspråkssträng. Du kan ange ett värde i kolumnen Språk i listan över språk som stöds.

Lägga till översättningsspråk

En annan vanlig uppgift för talöversättning är att ange målöversättningsspråk, minst ett krävs men flera stöds. Följande kodfragment anger både franska och tyska som mål för översättningsspråket.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    translationConfig.SpeechRecognitionLanguage = "it-IT";
    
    // Translate to languages. See, https://aka.ms/speech/sttt-languages
    translationConfig.AddTargetLanguage("fr");
    translationConfig.AddTargetLanguage("de");
}

Vid varje anrop AddTargetLanguage till anges ett nytt målöversättningsspråk. När tal identifieras från källspråket är med andra ord varje målöversättning tillgänglig som en del av den resulterande översättningsåtgärden.

Initiera en översättnings igen kännare

När du har skapat en SpeechTranslationConfig är nästa steg att initiera en TranslationRecognizer . När du TranslationRecognizer initierar en måste du skicka den till translationConfig . Konfigurationsobjektet tillhandahåller de autentiseringsuppgifter som speech-tjänsten kräver för att verifiera din begäran.

Om du känner igen tal med enhetens standardmi mikrofon ska du se ut så TranslationRecognizer här:

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var recognizer = new TranslationRecognizer(translationConfig);
}

Om du vill ange enheten för ljudinspelning måste du skapa en och ange AudioConfig audioConfig parametern när du initierar TranslationRecognizer din .

Först refererar du till AudioConfig -objektet på följande sätt:

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    using var recognizer = new TranslationRecognizer(translationConfig, audioConfig);
}

Om du vill tillhandahålla en ljudfil i stället för att använda en mikrofon måste du fortfarande ange en audioConfig . Men när du skapar en AudioConfig , i stället för att anropa , FromDefaultMicrophoneInput anropar du och skickar FromWavFileInput filename parametern .

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    using var recognizer = new TranslationRecognizer(translationConfig, audioConfig);
}

Översätt tal

För att översätta tal förlitar sig Speech SDK på en mikrofon eller en ljudfilsinmatning. Taligenkänning sker före talöversättning. När alla objekt har initierats anropar du funktionen recognize-once och hämtar resultatet.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var recognizer = new TranslationRecognizer(translationConfig);

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
    
    var result = await recognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\":");
        foreach (var (language, translation) in result.Translations)
        {
            Console.WriteLine($"Translated into '{language}': {translation}");
        }
    }
}

Mer information om tal till text finns i grunderna för taligenkänning.

Syntetisera översättningar

Efter en lyckad taligenkänning och översättning innehåller resultatet alla översättningar i en ordlista. TranslationsOrdlistenyckeln är målöversättningsspråket och värdet är den översatta texten. Identifierat tal kan översättas och sedan syntetiseras på ett annat språk (tal till tal).

Händelsebaserad syntes

Objektet TranslationRecognizer exponerar en Synthesizing händelse. Händelsen utbrandas flera gånger och ger en mekanism för att hämta det syntetiserade ljudet från översättningsigenkänningsresultatet. Om du översätter till flera språk kan du läsa manuell syntes. Ange syntesrösten genom att tilldela VoiceName en och tillhandahålla en händelsehanterare för händelsen och hämta Synthesizing ljudet. I följande exempel sparas det översatta ljudet som en WAV-fil.

Viktigt

Den händelsebaserade syntesen fungerar bara med en enda översättning, lägg inte till flera målöversättningsspråk. Dessutom bör vara VoiceName samma språk som målöversättningsspråket, till exempel; kan "de" mappas till "de-DE-Hedda" .

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguage = "de";
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    translationConfig.AddTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translationConfig.VoiceName = "de-DE-Hedda";

    using var recognizer = new TranslationRecognizer(translationConfig);

    recognizer.Synthesizing += (_, e) =>
    {
        var audio = e.Result.GetAudio();
        Console.WriteLine($"Audio synthesized: {audio.Length:#,0} byte(s) {(audio.Length == 0 ? "(Complete)" : "")}");

        if (audio.Length > 0)
        {
            File.WriteAllBytes("YourAudioFile.wav", audio);
        }
    };

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{toLanguage}'.\n");

    var result = await recognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\"");
        Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
    }
}

Manuell syntes

Ordlistan Translations kan användas för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera översättningen. När du SpeechSynthesizer skapar en -instans måste objektet ha egenskapen SpeechConfig inställd på önskad SpeechSynthesisVoiceName röst. Följande exempel översätts till fem språk, och varje översättning syntetiseras sedan till en ljudfil på motsvarande neurala språk.

static async Task TranslateSpeechAsync()
{
    var translationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);

    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "de", "en", "it", "pt", "zh-Hans" };
    translationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(translationConfig.AddTargetLanguage);

    using var recognizer = new TranslationRecognizer(translationConfig);

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");

    var result = await recognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
        var languageToVoiceMap = new Dictionary<string, string>
        {
            ["de"] = "de-DE-KatjaNeural",
            ["en"] = "en-US-AriaNeural",
            ["it"] = "it-IT-ElsaNeural",
            ["pt"] = "pt-BR-FranciscaNeural",
            ["zh-Hans"] = "zh-CN-XiaoxiaoNeural"
        };

        Console.WriteLine($"Recognized: \"{result.Text}\"");

        foreach (var (language, translation) in result.Translations)
        {
            Console.WriteLine($"Translated into '{language}': {translation}");

            var speechConfig =
                SpeechConfig.FromSubscription(
                    SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);
            speechConfig.SpeechSynthesisVoiceName = languageToVoiceMap[language];

            using var audioConfig = AudioConfig.FromWavFileOutput($"{language}-translation.wav");
            using var synthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
            
            await synthesizer.SpeakTextAsync(translation);
        }
    }
}

Mer information om talsyntes finns i grunderna i talsyntes.

Flerspråkig översättning med språkidentifiering

I många scenarier kanske du inte vet vilka indataspråk som ska anges. Med språkidentifiering kan du ange upp till tio möjliga indataspråk och automatiskt översätta till dina målspråk.

I följande exempel används kontinuerlig översättning från en ljudfil och identifierar automatiskt indataspråket, även om språket som talas ändras. När du kör exemplet en-US identifieras och automatiskt eftersom de zh-CN definieras i AutoDetectSourceLanguageConfig . Sedan översätts talet till och enligt de vad som anges i fr anropen till AddTargetLanguage() .

Viktigt

Den här funktionen är för närvarande i förhandsversion.

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

public static async Task MultiLingualTranslation()
{
    var region = "<paste-your-region>";
    // currently the v2 endpoint is required for this design pattern
    var endpointString = $"wss://{region}.stt.speech.microsoft.com/speech/universal/v2";
    var endpointUrl = new Uri(endpointString);
    
    var config = SpeechConfig.FromEndpoint(endpointUrl, "<paste-your-subscription-key>");

    // Source lang is required, but is currently NoOp 
    string fromLanguage = "en-US";
    config.SpeechRecognitionLanguage = fromLanguage;

    config.AddTargetLanguage("de");
    config.AddTargetLanguage("fr");

    config.SetProperty(PropertyId.SpeechServiceConnection_ContinuousLanguageIdPriority, "Latency");
    var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });

    var stopTranslation = new TaskCompletionSource<int>();
    using (var audioInput = AudioConfig.FromWavFileInput(@"path-to-your-audio-file.wav"))
    {
        using (var recognizer = new TranslationRecognizer(config, autoDetectSourceLanguageConfig, audioInput))
        {
            recognizer.Recognizing += (s, e) =>
            {
                var lidResult = e.Result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);

                Console.WriteLine($"RECOGNIZING in '{lidResult}': Text={e.Result.Text}");
                foreach (var element in e.Result.Translations)
                {
                    Console.WriteLine($"    TRANSLATING into '{element.Key}': {element.Value}");
                }
            };

            recognizer.Recognized += (s, e) => {
                if (e.Result.Reason == ResultReason.TranslatedSpeech)
                {
                    var lidResult = e.Result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);

                    Console.WriteLine($"RECOGNIZED in '{lidResult}': Text={e.Result.Text}");
                    foreach (var element in e.Result.Translations)
                    {
                        Console.WriteLine($"    TRANSLATED into '{element.Key}': {element.Value}");
                    }
                }
                else if (e.Result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                    Console.WriteLine($"    Speech not translated.");
                }
                else if (e.Result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
            };

            recognizer.Canceled += (s, e) =>
            {
                Console.WriteLine($"CANCELED: Reason={e.Reason}");

                if (e.Reason == CancellationReason.Error)
                {
                    Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                    Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                    Console.WriteLine($"CANCELED: Did you update the subscription info?");
                }

                stopTranslation.TrySetResult(0);
            };

            recognizer.SpeechStartDetected += (s, e) => {
                Console.WriteLine("\nSpeech start detected event.");
            };

            recognizer.SpeechEndDetected += (s, e) => {
                Console.WriteLine("\nSpeech end detected event.");
            };

            recognizer.SessionStarted += (s, e) => {
                Console.WriteLine("\nSession started event.");
            };

            recognizer.SessionStopped += (s, e) => {
                Console.WriteLine("\nSession stopped event.");
                Console.WriteLine($"\nStop translation.");
                stopTranslation.TrySetResult(0);
            };

            // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
            Console.WriteLine("Start translation...");
            await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

            Task.WaitAny(new[] { stopTranslation.Task });
            await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
        }
    }
}

En av huvudfunktionerna i taltjänsten är möjligheten att känna igen mänskligt tal och översätta det till andra språk. I den här snabbstarten lär du dig att använda Speech SDK i dina appar och produkter för att utföra talöversättning av hög kvalitet. Den här snabbstarten beskriver bland annat följande:

  • Översätta tal till text
  • Översätta tal till flera målspråk
  • Utföra direkt tal till tal-översättning

Hoppa till exempel på GitHub

Om du vill hoppa direkt till exempelkoden kan du se C++-snabbstartsexempel på GitHub.

Förutsättningar

Den här artikeln förutsätter att du har ett Azure-konto och en speech-tjänstprenumeration. Om du inte har något konto och en prenumeration kan du prova Speech-tjänsten utan kostnad.

Installera Speech SDK

Innan du kan göra något måste du installera Speech SDK. Beroende på din plattform följer du anvisningarna i avsnittet Hämta Speech SDK i artikeln Om Speech SDK.

Importera beroenden

Om du vill köra exemplen i den här artikeln inkluderar #include du följande - och using -instruktioner överst i C++-kodfilen.

#include <iostream> // cin, cout
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <speechapi_cxx.h>

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;
using namespace Microsoft::CognitiveServices::Speech::Translation;

Känsliga data och miljövariabler

Exempelkällkoden i den här artikeln är beroende av miljövariabler för lagring av känsliga data, till exempel prenumerationsnyckeln för Speech-resursen och regionen. C++-kodfilen innehåller två strängvärden som tilldelas från värddatorerna miljövariabler, SPEECH__SUBSCRIPTION__KEY nämligen och SPEECH__SERVICE__REGION . Båda dessa fält finns i klassomfånget, vilket gör dem tillgängliga i metodens text i klassen. Mer information om miljövariabler finns i miljövariabler och programkonfiguration.

auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");

Skapa en konfiguration för talöversättning

Om du vill anropa Speech-tjänsten med hjälp av Speech SDK måste du skapa en SpeechTranslationConfig . Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Tips

Oavsett om du utför taligenkänning, talsyntes, översättning eller avsiktsigenkänning skapar du alltid en konfiguration.

Det finns några sätt att initiera en SpeechTranslationConfig :

  • Med en prenumeration: skicka en nyckel och den associerade regionen.
  • Med en slutpunkt: skicka in en speech-tjänstslutpunkt. En nyckel eller auktoriseringstoken är valfri.
  • Med en värd: skicka in en värdadress. En nyckel eller auktoriseringstoken är valfri.
  • Med en auktoriseringstoken: skicka en auktoriseringstoken och den associerade regionen.

Låt oss ta en titt på hur en SpeechTranslationConfig skapas med hjälp av en nyckel och region. Hämta dessa autentiseringsuppgifter genom att följa stegen i Prova Speech-tjänsten kostnadsfritt.

auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");

void translateSpeech() {
    auto config =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}

int main(int argc, char** argv) {
    setlocale(LC_ALL, "");
    translateSpeech();
    return 0;
}

Ändra källspråk

En vanlig uppgift för talöversättning är att ange indataspråket (eller källspråket). Låt oss ta en titt på hur du skulle ändra indataspråket till italienska. Interagera med instansen i koden SpeechTranslationConfig och anropa SetSpeechRecognitionLanguage metoden .

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    // Source (input) language
    translationConfig->SetSpeechRecognitionLanguage("it-IT");
}

Egenskapen SpeechRecognitionLanguage förväntar sig en formatsträng med språkspråk. Du kan ange ett värde i kolumnen Språk i listan över språk som stöds.

Lägga till översättningsspråk

En annan vanlig uppgift för talöversättning är att ange målöversättningsspråk, minst ett krävs men multiplar stöds. Följande kodfragment anger både franska och tyska som mål för översättningsspråket.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    translationConfig->SetSpeechRecognitionLanguage("it-IT");

    // Translate to languages. See, https://aka.ms/speech/sttt-languages
    translationConfig->AddTargetLanguage("fr");
    translationConfig->AddTargetLanguage("de");
}

Vid varje anrop AddTargetLanguage till anges ett nytt målöversättningsspråk. När tal identifieras från källspråket är med andra ord varje målöversättning tillgänglig som en del av den resulterande översättningsåtgärden.

Initiera en översättnings recognizer

När du har skapat en SpeechTranslationConfig är nästa steg att initiera en TranslationRecognizer . När du TranslationRecognizer initierar en måste du skicka den till translationConfig . Konfigurationsobjektet tillhandahåller de autentiseringsuppgifter som taltjänsten kräver för att verifiera din begäran.

Om du känner igen tal med enhetens standardmi mikrofon bör du se ut så TranslationRecognizer här:

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
}

Om du vill ange enheten för ljudinspelning måste du skapa en och ange AudioConfig audioConfig parametern när du initierar TranslationRecognizer din .

Först refererar du till AudioConfig -objektet på följande sätt:

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
    auto recognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}

Om du vill ange en ljudfil i stället för att använda en mikrofon måste du fortfarande ange en audioConfig . Men när du skapar en AudioConfig , i stället för att anropa , FromDefaultMicrophoneInput anropar du och skickar FromWavFileInput filename parametern .

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    auto recognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}

Översätt tal

För att översätta tal förlitar sig Speech SDK på en mikrofon eller en ljudfilsinmatning. Taligenkänning sker före talöversättning. När alla objekt har initierats anropar du funktionen recognize-once och hämtar resultatet.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    string fromLanguage = "en-US";
    string toLanguages[3] = { "it", "fr", "de" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = recognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;
        }
    }
}

Mer information om tal till text finns i grunderna för taligenkänning.

Syntetisera översättningar

Efter en lyckad taligenkänning och översättning innehåller resultatet alla översättningar i en ordlista. TranslationsOrdlistenyckeln är målöversättningsspråket och värdet är den översatta texten. Identifierat tal kan översättas och sedan syntetiseras på ett annat språk (tal till tal).

Händelsebaserad syntes

Objektet TranslationRecognizer exponerar en Synthesizing händelse. Händelsen utbrandas flera gånger och ger en mekanism för att hämta det syntetiserade ljudet från översättningsigenkänningsresultatet. Om du översätter till flera språk kan du läsa manuell syntes. Ange syntesrösten genom att tilldela SetVoiceName en och ange en händelsehanterare för händelsen och hämta Synthesizing ljudet. I följande exempel sparas det översatta ljudet som en WAV-fil.

Viktigt

Den händelsebaserade syntesen fungerar bara med en enda översättning, lägg inte till flera målöversättningsspråk. Dessutom bör vara SetVoiceName samma språk som målöversättningsspråket, till exempel; "de" kan mappas till "de-DE-Hedda" .

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguage = "de";
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    translationConfig->AddTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translationConfig->SetVoiceName("de-DE-Hedda");

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
    recognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
        {
            auto audio = e.Result->Audio;
            auto size = audio.size();
            cout << "Audio synthesized: " << size << " byte(s)" << (size == 0 ? "(COMPLETE)" : "") << std::endl;

            if (size > 0) {
                ofstream file("translation.wav", ios::out | ios::binary);
                auto audioData = audio.data();
                file.write((const char*)audioData, sizeof(audio[0]) * size);
                file.close();
            }
        });

    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = recognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;
        }
    }
}

Manuell syntes

Ordlistan Translations kan användas för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera översättningen. När du skapar SpeechSynthesizer en instans måste objektet ha egenskapen inställd på önskad SpeechConfig SetSpeechSynthesisVoiceName röst. I följande exempel översätts till fem språk, och varje översättning syntetiseras sedan till en ljudfil i motsvarande neurala språk.

void translateSpeech() {
    auto translationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
    translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        translationConfig->AddTargetLanguage(language);
    }

    auto recognizer = TranslationRecognizer::FromConfig(translationConfig);

    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = recognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
        map<string, string> languageToVoiceMap;
        languageToVoiceMap["de"] = "de-DE-KatjaNeural";
        languageToVoiceMap["en"] = "en-US-AriaNeural";
        languageToVoiceMap["it"] = "it-IT-ElsaNeural";
        languageToVoiceMap["pt"] = "pt-BR-FranciscaNeural";
        languageToVoiceMap["zh-Hans"] = "zh-CN-XiaoxiaoNeural";

        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;

            auto speech_config =
                SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
            speech_config->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);

            auto audio_config = AudioConfig::FromWavFileOutput(language + "-translation.wav");
            auto synthesizer = SpeechSynthesizer::FromConfig(speech_config, audio_config);

            synthesizer->SpeakTextAsync(translation).get();
        }
    }
}

Mer information om talsyntes finns i grunderna för talsyntes.

Flerspråkig översättning med språkidentifiering

I många scenarier kanske du inte vet vilka indataspråk som ska anges. Med hjälp av språkidentifiering kan du ange upp till tio möjliga indataspråk och automatiskt översätta till dina målspråk.

I följande exempel används kontinuerlig översättning från en ljudfil och identifierar automatiskt indataspråket, även om språket som talas ändras. När du kör exemplet en-US identifieras och automatiskt eftersom de zh-CN definieras i AutoDetectSourceLanguageConfig . Sedan översätts talet till och enligt de vad som anges i fr anropen till AddTargetLanguage() .

Viktigt

Den här funktionen är för närvarande i förhandsversion.

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;

void MultiLingualTranslation()
{
    auto region = "<paste-your-region>";
    // currently the v2 endpoint is required for this design pattern
    auto endpointString = std::format("wss://{}.stt.speech.microsoft.com/speech/universal/v2", region);
    auto config = SpeechConfig::FromEndpoint(endpointString, "<paste-your-subscription-key>");

    config->SetProperty(PropertyId::SpeechServiceConnection_ContinuousLanguageIdPriority, "Latency");
    auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });

    promise<void> recognitionEnd;
    // Source lang is required, but is currently NoOp 
    auto fromLanguage = "en-US";
    config->SetSpeechRecognitionLanguage(fromLanguage);
    config->AddTargetLanguage("de");
    config->AddTargetLanguage("fr");

    auto audioInput = AudioConfig::FromWavFileInput("path-to-your-audio-file.wav");
    auto recognizer = TranslationRecognizer::FromConfig(config, autoDetectSourceLanguageConfig, audioInput);

    recognizer->Recognizing.Connect([](const TranslationRecognitionEventArgs& e)
        {
            std::string lidResult = e.Result->Properties.GetProperty(PropertyId::SpeechServiceConnection_AutoDetectSourceLanguageResult);

            cout << "Recognizing in Language = "<< lidResult << ":" << e.Result->Text << std::endl;
            for (const auto& it : e.Result->Translations)
            {
                cout << "  Translated into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
            }
        });

    recognizer->Recognized.Connect([](const TranslationRecognitionEventArgs& e)
        {
            if (e.Result->Reason == ResultReason::TranslatedSpeech)
            {
                std::string lidResult = e.Result->Properties.GetProperty(PropertyId::SpeechServiceConnection_AutoDetectSourceLanguageResult);
                cout << "RECOGNIZED in Language = " << lidResult << ": Text=" << e.Result->Text << std::endl;
            }
            else if (e.Result->Reason == ResultReason::RecognizedSpeech)
            {
                cout << "RECOGNIZED: Text=" << e.Result->Text << " (text could not be translated)" << std::endl;
            }
            else if (e.Result->Reason == ResultReason::NoMatch)
            {
                cout << "NOMATCH: Speech could not be recognized." << std::endl;
            }

            for (const auto& it : e.Result->Translations)
            {
                cout << "  Translated into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
            }
        });

    recognizer->Canceled.Connect([&recognitionEnd](const TranslationRecognitionCanceledEventArgs& e)
        {
            cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
            if (e.Reason == CancellationReason::Error)
            {
                cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << e.ErrorDetails << std::endl;
                cout << "CANCELED: Did you update the subscription info?" << std::endl;

                recognitionEnd.set_value();
            }
        });

    recognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
        {
            auto size = e.Result->Audio.size();
            cout << "Translation synthesis result: size of audio data: " << size
                << (size == 0 ? "(END)" : "");
        });

    recognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
        {
            cout << "Session stopped.";
            recognitionEnd.set_value();
        });

    // Starts continuos recognition. Use StopContinuousRecognitionAsync() to stop recognition.
    recognizer->StartContinuousRecognitionAsync().get();
    recognitionEnd.get_future().get();
    recognizer->StopContinuousRecognitionAsync().get();
}

En av huvudfunktionerna i Taltjänsten är möjligheten att känna igen mänskligt tal och översätta det till andra språk. I den här snabbstarten lär du dig hur du använder Speech SDK i dina appar och produkter för att utföra talöversättning av hög kvalitet. I den här snabbstarten går vi bland annat:

  • Översätta tal till text
  • Översätta tal till flera målspråk
  • Utföra direkt tal till tal-översättning

Gå vidare till exempel på GitHub

Om du vill hoppa direkt till exempelkod kan du se Java-snabbstartsexempel på GitHub.

Förutsättningar

Den här artikeln förutsätter att du har ett Azure-konto och en prenumeration på Speech-tjänsten. Om du inte har ett konto och en prenumeration kan du prova Speech-tjänsten utan kostnad.

Installera Speech SDK

Innan du kan göra något måste du installera Speech SDK. Beroende på din plattform följer du anvisningarna i avsnittet Hämta Speech SDK i artikeln Om Speech SDK.

Importera beroenden

Om du vill köra exemplen i den här artikeln inkluderar import du följande -instruktioner överst i *. Java-kodfil.

package speech;

import java.io.*;
import java.util.*;
import java.util.concurrent.*;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.*;
import com.microsoft.cognitiveservices.speech.translation.*;

Känsliga data och miljövariabler

Exempelkällkoden i den här artikeln beror på miljövariabler för lagring av känsliga data, till exempel prenumerationsnyckeln för Speech-resursen och regionen. Java-kodfilen innehåller två static final String värden som tilldelas från värddatorerna miljövariabler, SPEECH__SUBSCRIPTION__KEY nämligen och SPEECH__SERVICE__REGION . Båda dessa fält finns i klassomfånget, vilket gör dem tillgängliga i metodens text i klassen. Mer information om miljövariabler finns i miljövariabler och programkonfiguration.

public class App {

    static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SUBSCRIPTION__KEY");
    static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");

    public static void main(String[] args) { }
}

Skapa en talöversättningskonfiguration

Om du vill anropa Speech-tjänsten med hjälp av Speech SDK måste du skapa en SpeechTranslationConfig . Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Tips

Oavsett om du utför taligenkänning, talsyntes, översättning eller avsiktsigenkänning skapar du alltid en konfiguration.

Det finns några olika sätt att initiera en SpeechTranslationConfig :

  • Med en prenumeration: skicka in en nyckel och den associerade regionen.
  • Med en slutpunkt: skicka in en speech-tjänstslutpunkt. En nyckel eller auktoriseringstoken är valfri.
  • Med en värd: skicka in en värdadress. En nyckel eller auktoriseringstoken är valfri.
  • Med en auktoriseringstoken: skicka en auktoriseringstoken och den associerade regionen.

Låt oss ta en titt på hur en SpeechTranslationConfig skapas med hjälp av en nyckel och region. Hämta dessa autentiseringsuppgifter genom att följa stegen i Prova Speech-tjänsten kostnadsfritt.

public class App {

    static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SERVICE__KEY");
    static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");

    public static void main(String[] args) {
        try {
            translateSpeech();
            System.exit(0);
        } catch (Exception ex) {
            System.out.println(ex);
            System.exit(1);
        }
    }

    static void translateSpeech() {
        SpeechTranslationConfig config = SpeechTranslationConfig.fromSubscription(
            SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

Ändra källspråk

En vanlig uppgift för talöversättning är att ange indataspråket (eller källan). Låt oss ta en titt på hur du skulle ändra indataspråket till italienska. Interagera med -instansen i SpeechTranslationConfig koden och anropa metoden setSpeechRecognitionLanguage .

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    // Source (input) language
    translationConfig.setSpeechRecognitionLanguage("it-IT");
}

Funktionen setSpeechRecognitionLanguage förväntar sig en språkspråkssträng. Du kan ange ett värde i kolumnen Språk i listan över språk som stöds.

Lägga till översättningsspråk

En annan vanlig uppgift för talöversättning är att ange målöversättningsspråk, minst ett krävs men multiplar stöds. Följande kodfragment anger både franska och tyska som mål för översättningsspråket.

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    translationConfig.setSpeechRecognitionLanguage("it-IT");

    // Translate to languages. See, https://aka.ms/speech/sttt-languages
    translationConfig.addTargetLanguage("fr");
    translationConfig.addTargetLanguage("de");
}

Vid varje anrop addTargetLanguage till anges ett nytt målöversättningsspråk. När tal identifieras från källspråket är med andra ord varje målöversättning tillgänglig som en del av den resulterande översättningsåtgärden.

Initiera en översättnings igen kännare

När du har skapat en SpeechTranslationConfig är nästa steg att initiera en TranslationRecognizer . När du TranslationRecognizer initierar en måste du skicka den till translationConfig . Konfigurationsobjektet tillhandahåller de autentiseringsuppgifter som speech-tjänsten kräver för att verifiera din begäran.

Om du känner igen tal med enhetens standardmi mikrofon ska du se ut så TranslationRecognizer här:

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
    }
}

Om du vill ange enheten för ljudinspelning måste du skapa en och ange AudioConfig audioConfig parametern när du initierar TranslationRecognizer din .

Först refererar du till AudioConfig -objektet på följande sätt:

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig, audioConfig)) {
        
    }
}

Om du vill tillhandahålla en ljudfil i stället för att använda en mikrofon måste du fortfarande ange en audioConfig . Men när du skapar en AudioConfig , i stället för att anropa , fromDefaultMicrophoneInput anropar du och skickar fromWavFileInput filename parametern .

static void translateSpeech() {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig, audioConfig)) {
        
    }
}

Översätt tal

För att översätta tal förlitar sig Speech SDK på en mikrofon eller en ljudfilsinmatning. Taligenkänning sker före talöversättning. När alla objekt har initierats anropar du funktionen recognize-once och hämtar resultatet.

static void translateSpeech() throws ExecutionException, InterruptedException {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                System.out.printf("Translated into '%s': %s\n", pair.getKey(), pair.getValue());
            }
        }
    }
}

Mer information om tal till text finns i grunderna för taligenkänning.

Syntetisera översättningar

Efter en lyckad taligenkänning och översättning innehåller resultatet alla översättningar i en ordlista. Funktionen getTranslations returnerar en ordlista med nyckeln som målöversättningsspråk och värdet är den översatta texten. Identifierat tal kan översättas och sedan syntetiseras på ett annat språk (tal till tal).

Händelsebaserad syntes

Objektet TranslationRecognizer exponerar en synthesizing händelse. Händelsen utbrandas flera gånger och ger en mekanism för att hämta det syntetiserade ljudet från översättningsigenkänningsresultatet. Om du översätter till flera språk kan du läsa manuell syntes. Ange syntesrösten genom att tilldela setVoiceName en och tillhandahålla en händelsehanterare för händelsen och hämta synthesizing ljudet. I följande exempel sparas det översatta ljudet som en WAV-fil.

Viktigt

Den händelsebaserade syntesen fungerar bara med en enda översättning, lägg inte till flera målöversättningsspråk. Dessutom bör vara setVoiceName samma språk som målöversättningsspråket, till exempel; kan "de" mappas till "de-DE-Hedda" .

static void translateSpeech() throws ExecutionException, FileNotFoundException, InterruptedException, IOException {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    String fromLanguage = "en-US";
    String toLanguage = "de";
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    translationConfig.addTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translationConfig.setVoiceName("de-DE-Hedda");

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
        recognizer.synthesizing.addEventListener((s, e) -> {
            byte[] audio = e.getResult().getAudio();
            int size = audio.length;
            System.out.println("Audio synthesized: " + size + " byte(s)" + (size == 0 ? "(COMPLETE)" : ""));

            if (size > 0) {
                try (FileOutputStream file = new FileOutputStream("translation.wav")) {
                    file.write(audio);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });

        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);
            }
        }
    }
}

Manuell syntes

Funktionen getTranslations returnerar en ordlista som kan användas för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera översättningen. När du SpeechSynthesizer skapar en -instans måste objektet ha egenskapen SpeechConfig inställd på önskad setSpeechSynthesisVoiceName röst. Följande exempel översätts till fem språk, och varje översättning syntetiseras sedan till en ljudfil på motsvarande neurala språk.

static void translateSpeech() throws ExecutionException, InterruptedException {
    SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
    translationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        translationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
            Map<String, String> languageToVoiceMap = new HashMap<String, String>();
            languageToVoiceMap.put("de", "de-DE-KatjaNeural");
            languageToVoiceMap.put("en", "en-US-AriaNeural");
            languageToVoiceMap.put("it", "it-IT-ElsaNeural");
            languageToVoiceMap.put("pt", "pt-BR-FranciscaNeural");
            languageToVoiceMap.put("zh-Hans", "zh-CN-XiaoxiaoNeural");

            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);

                SpeechConfig speechConfig =
                    SpeechConfig.fromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
                speechConfig.setSpeechSynthesisVoiceName(languageToVoiceMap.get(language));

                AudioConfig audioConfig = AudioConfig.fromWavFileOutput(language + "-translation.wav");
                try (SpeechSynthesizer synthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
                    synthesizer.SpeakTextAsync(translation).get();
                }
            }
        }
    }
}

Mer information om talsyntes finns i grunderna i talsyntes.

En av de viktigaste funktionerna i tal tjänsten är möjligheten att identifiera mänskligt tal och översätta den till andra språk. I den här snabb starten lär du dig hur du använder tal-SDK i dina appar och produkter för att utföra högkvalitativ tal översättning. Den här snabb starten behandlar ämnen, inklusive:

  • Översättning av tal till text
  • Översätta tal till flera mål språk
  • Utföra direkt tal-till-tal-Översättning

Hoppa till exempel på GitHub

Om du vill hoppa över direkt till exempel kod kan du läsa snabb starts exemplen för Java Script på GitHub.

Förutsättningar

Den här artikeln förutsätter att du har ett Azure-konto och en röst tjänst prenumeration. Om du inte har ett konto och en prenumeration kan du prova att använda tal tjänsten kostnads fritt.

Installera Speech SDK

Innan du kan göra något måste du installera Speech SDK för Java Script . Använd följande instruktioner, beroende på plattform:

Beroende på mål miljön använder du dessutom något av följande:

Hämta och extrahera talet SDK för java script microsoft.cognitiveservices.speech.sdk.bundle.js -filen och placera den i en mapp som är tillgänglig för HTML-filen.

<script src="microsoft.cognitiveservices.speech.sdk.bundle.js"></script>;

Tips

Om du är mål för en webbläsare och använder <script> taggen, sdk behövs inte prefixet. sdkPrefixet är ett alias som används för att namnge require modulen.

Skapa en översättnings konfiguration

Om du vill anropa översättnings tjänsten med hjälp av tal-SDK måste du skapa en SpeechTranslationConfig . Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhör ande region, slut punkt, värd eller token för auktorisering.

Anteckning

Oavsett om du utför tal igenkänning, tal syntes, översättning eller avsikts igenkänning, skapar du alltid en konfiguration. Det finns några sätt som du kan initiera en SpeechTranslationConfig :

  • Med en prenumeration: skicka i en nyckel och tillhör ande region.
  • Med en slut punkt: skicka i en röst tjänst slut punkt. En nyckel eller autentiseringstoken är valfri.
  • Med en värd: skicka in en värd adress. En nyckel eller autentiseringstoken är valfri.
  • Med en autentiseringstoken: skicka in en autentiseringstoken och den associerade regionen.

Låt oss ta en titt på hur en SpeechTranslationConfig har skapats med hjälp av en nyckel och region. Hämta dessa autentiseringsuppgifter genom att följa stegen i testa tal tjänsten kostnads fritt.

const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");

Initiera en översättare

När du har skapat en SpeechTranslationConfig är nästa steg att initiera en TranslationRecognizer . När du initierar en måste TranslationRecognizer du skicka den speechTranslationConfig . Detta ger de autentiseringsuppgifter som översättnings tjänsten behöver för att verifiera din begäran.

Om du översätter tal som tillhandahålls via enhetens standard mikrofon TranslationRecognizer ska du se vad som ska se ut så här:

const translator = new TranslationRecognizer(speechTranslationConfig);

Om du vill ange enheten för ljud inspelning måste du skapa en AudioConfig och ange audioConfig parametern när du initierar TranslationRecognizer .

Tips

Lär dig hur du hämtar enhets-ID: t för din enhet för ljud inspelning. Referera till AudioConfig objektet enligt följande:

const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const recognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);

Om du vill ange en ljudfil i stället för att använda en mikrofon måste du ändå ange en audioConfig . Detta kan dock endast göras när mål Node.js och när du skapar en AudioConfig , i stället för att anropa fromDefaultMicrophoneInput , anropar fromWavFileOutput och skickar filename parametern.

const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const recognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);

Översätt tal

TranslationRecognizer-klassen för tal-SDK för Java Script visar några metoder som du kan använda för tal översättning.

  • Översättning av enskild bild (async) – utför översättning i ett icke-blockerande (asynkront) läge. Detta översätter en enskild uttryck. Slutet på en enskild uttryck bestäms genom att lyssna efter tystnad i slutet eller tills maximalt 15 sekunders ljud bearbetas.
  • Kontinuerlig översättning (asynkron) – initierar en kontinuerlig översättnings åtgärd asynkront. Användaren registrerar sig för händelser och hanterar olika program tillstånd. Anropa för att stoppa asynkron kontinuerlig översättning stopContinuousRecognitionAsync .

Anteckning

Läs mer om hur du väljer ett tal igenkännings läge.

Ange ett mål språk

För att översätta måste du ange både ett käll språk och minst ett mål språk. Du kan välja ett käll språk med hjälp av ett språk som anges i tal översättnings tabellen. Hitta dina alternativ för översatt språk på samma länk. Alternativen för mål språken skiljer sig när du vill visa text eller vill höra syntetiskt översatt tal. Om du vill översätta från engelska till tyska ändrar du översättnings konfigurations objekt:

speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");

Igenkänning av enstaka bild

Här är ett exempel på en asynkron översättning av en enskild bild med recognizeOnceAsync :

recognizer.recognizeOnceAsync(result => {
    // Interact with result
});

Du måste skriva kod för att hantera resultatet. Det här exemplet utvärderar result.reason för översättning till tyska:

recognizer.recognizeOnceAsync(
  function (result) {
    let translation = result.translations.get("de");
    window.console.log(translation);
    recognizer.close();
  },
  function (err) {
    window.console.log(err);
    recognizer.close();
});

Din kod kan också hantera uppdateringar som tillhandahålls medan översättningen bearbetas. Du kan använda de här uppdateringarna för att ge visuell feedback om översättnings förloppet. I det här JavaScript-Node.js exemplet på exempel kod som visar uppdateringar under översättnings processen. Följande kod visar även information som skapas under översättnings processen.

recognizer.recognizing = function (s, e) {
    var str = ("(recognizing) Reason: " + SpeechSDK.ResultReason[e.result.reason] +
            " Text: " +  e.result.text +
            " Translation:");
    str += e.result.translations.get("de");
    console.log(str);
};
recognizer.recognized = function (s, e) {
    var str = "\r\n(recognized)  Reason: " + SpeechSDK.ResultReason[e.result.reason] +
            " Text: " + e.result.text +
            " Translation:";
    str += e.result.translations.get("de");
    str += "\r\n";
    console.log(str);
};

Kontinuerlig översättning

Kontinuerlig översättning är lite mer engagerande än igenkänning av enstaka steg. Det kräver att du prenumererar på recognizing -, recognized -och- canceled händelserna för att få igenkännings resultatet. Om du vill stoppa översättningen måste du anropa stopContinuousRecognitionAsync . Här är ett exempel på hur kontinuerlig översättning utförs på en fil för ljud inspelning.

Vi börjar med att definiera indatamängden och initiera en TranslationRecognizer :

const translator = new TranslationRecognizer(speechTranslationConfig);

Vi kommer att prenumerera på de händelser som skickas från TranslationRecognizer .

  • recognizing: Signal för händelser som innehåller mellanliggande översättnings resultat.
  • recognized: Signal för händelser som innehåller slutgiltiga översättnings resultat (indikerar ett lyckad översättnings försök).
  • sessionStopped: Signal för händelser som indikerar slutet på en översättnings session (åtgärd).
  • canceled: Signal för händelser som innehåller avbrutna översättnings resultat (som anger ett översättnings försök som avbrutits på grund av ett resultat eller en direkt uppsägnings förfrågan eller, även ett transport-eller protokoll haveri).
recognizer.recognizing = (s, e) => {
    console.log(`TRANSLATING: Text=${e.result.text}`);
};
recognizer.recognized = (s, e) => {
    if (e.result.reason == ResultReason.RecognizedSpeech) {
        console.log(`TRANSLATED: Text=${e.result.text}`);
    }
    else if (e.result.reason == ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be translated.");
    }
};
recognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);
    if (e.reason == CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you update the subscription info?");
    }
    recognizer.stopContinuousRecognitionAsync();
};
recognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    recognizer.stopContinuousRecognitionAsync();
};

Med allt konfigurerat kan vi anropa startContinuousRecognitionAsync .

// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
recognizer.startContinuousRecognitionAsync();
// Something later can call, stops recognition.
// recognizer.StopContinuousRecognitionAsync();

Välj ett käll språk

En vanlig uppgift för tal översättning är att ange språk för indata (eller källa). Låt oss ta en titt på hur du ändrar indatamängds språk till italienska. Leta upp din kod i koden SpeechTranslationConfig och Lägg sedan till följande rad direkt under den.

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

speechRecognitionLanguageEgenskapen förväntar sig en språk språks format sträng. Du kan ange valfritt värde i kolumnen språk i listan över språk som stöds.

Välj ett eller flera mål språk

Talet SDK kan översätta till flera mål språk parallellt. Vilka språk som är tillgängliga skiljer sig något från käll språk listan och du anger mål språk med hjälp av en språkkod i stället för en språk kod. Se en lista över språk koder för text mål i tabellen för tal översättning på sidan språk stöd. Du kan också hitta information om översättning till syntetiskt språk där.

Följande kod lägger till tyska som mål språk:

translationConfig.addTargetLanguage("de");

Eftersom det är möjligt med flera översättningar av mål språket, måste din kod ange mål språket när du undersöker resultatet. Följande kod hämtar översättnings resultat för tyska.

recognizer.recognized = function (s, e) {
    var str = "\r\n(recognized)  Reason: " +
            sdk.ResultReason[e.result.reason] +
            " Text: " + e.result.text + " Translations:";
    var language = "de";
    str += " [" + language + "] " + e.result.translations.get(language);
    str += "\r\n";
    // show str somewhere
};

En av huvudfunktionerna i Taltjänsten är möjligheten att känna igen mänskligt tal och översätta det till andra språk. I den här snabbstarten lär du dig hur du använder Speech SDK i dina appar och produkter för att utföra talöversättning av hög kvalitet. I den här snabbstarten går vi bland annat:

  • Översätta tal till text
  • Översätta tal till flera målspråk
  • Utföra direkt tal till tal-översättning

Gå vidare till exempel på GitHub

Om du vill hoppa direkt till exempelkoden kan du se Python-snabbstartsexempel på GitHub.

Förutsättningar

Den här artikeln förutsätter att du har ett Azure-konto och en prenumeration på Speech-tjänsten. Om du inte har ett konto och en prenumeration kan du prova Speech-tjänsten utan kostnad.

Installera Speech SDK

Innan du kan göra något måste du installera Speech SDK. Beroende på din plattform följer du anvisningarna i avsnittet Hämta Speech SDK i artikeln Om Speech SDK.

Importera beroenden

Om du vill köra exemplen i den här artikeln inkluderar import du följande -instruktioner överst i Python-kodfilen.

import os
import azure.cognitiveservices.speech as speechsdk

Känsliga data och miljövariabler

Exempelkällkoden i den här artikeln beror på miljövariabler för lagring av känsliga data, till exempel prenumerationsnyckeln för Speech-resursen och regionen. Python-kodfilen innehåller två värden som tilldelas från värddatorerna miljövariabler, SPEECH__SUBSCRIPTION__KEY nämligen och SPEECH__SERVICE__REGION . Båda dessa variabler finns i det globala omfånget, vilket gör dem tillgängliga inom funktionsdefinitionen för kodfilen. Mer information om miljövariabler finns i miljövariabler och programkonfiguration.

speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']

Skapa en talöversättningskonfiguration

Om du vill anropa Speech-tjänsten med hjälp av Speech SDK måste du skapa en SpeechTranslationConfig . Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Tips

Oavsett om du utför taligenkänning, talsyntes, översättning eller avsiktsigenkänning skapar du alltid en konfiguration.

Det finns några olika sätt att initiera en SpeechTranslationConfig :

  • Med en prenumeration: skicka in en nyckel och den associerade regionen.
  • Med en slutpunkt: skicka in en speech-tjänstslutpunkt. En nyckel eller auktoriseringstoken är valfri.
  • Med en värd: skicka in en värdadress. En nyckel eller auktoriseringstoken är valfri.
  • Med en auktoriseringstoken: skicka en auktoriseringstoken och den associerade regionen.

Låt oss ta en titt på hur en SpeechTranslationConfig skapas med hjälp av en nyckel och region. Hämta dessa autentiseringsuppgifter genom att följa stegen i Prova Speech-tjänsten kostnadsfritt.

from_language, to_language = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

Ändra källspråk

En vanlig uppgift för talöversättning är att ange indataspråket (eller källan). Låt oss ta en titt på hur du skulle ändra indataspråket till italienska. Interagera med instansen i SpeechTranslationConfig koden och tilldela den till egenskapen speech_recognition_language .

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    # Source (input) language
    translation_config.speech_recognition_language = from_language

Egenskapen speech_recognition_language förväntar sig en språkspråkssträng. Du kan ange ett värde i kolumnen Språk i listan över språk som stöds.

Lägga till översättningsspråk

En annan vanlig uppgift för talöversättning är att ange målöversättningsspråk, minst ett krävs men multiplar stöds. Följande kodfragment anger både franska och tyska som mål för översättningsspråket.

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = "it-IT"

    # Translate to languages. See, https://aka.ms/speech/sttt-languages
    translation_config.add_target_language("fr")
    translation_config.add_target_language("de")

Vid varje anrop add_target_language till anges ett nytt målöversättningsspråk. När tal identifieras från källspråket är med andra ord varje målöversättning tillgänglig som en del av den resulterande översättningsåtgärden.

Initiera en översättnings igen kännare

När du har skapat en SpeechTranslationConfig är nästa steg att initiera en TranslationRecognizer . När du TranslationRecognizer initierar en måste du skicka den till translation_config . Konfigurationsobjektet tillhandahåller de autentiseringsuppgifter som speech-tjänsten kräver för att verifiera din begäran.

Om du känner igen tal med enhetens standardmi mikrofon ska du se ut så TranslationRecognizer här:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)

Om du vill ange enheten för ljudinspelning måste du skapa en och ange AudioConfig audio_config parametern när du initierar TranslationRecognizer din .

Först refererar du till AudioConfig -objektet på följande sätt:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Om du vill tillhandahålla en ljudfil i stället för att använda en mikrofon måste du fortfarande ange en audioConfig . Men när du skapar en AudioConfig , i stället för att anropa med , use_default_microphone=True anropar du med och anger filename="path-to-file.wav" filename parametern .

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    audio_config = speechsdk.audio.AudioConfig(filename="path-to-file.wav")
    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Översätt tal

För att översätta tal förlitar sig Speech SDK på en mikrofon eller en ljudfilsinmatning. Taligenkänning sker före talöversättning. När alla objekt har initierats anropar du funktionen recognize-once och hämtar resultatet.

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = recognizer.recognize_once()
    print(get_result_text(reason=result.reason, result=result))

def get_result_text(reason, result):
    reason_format = {
        speechsdk.ResultReason.TranslatedSpeech:
            f'RECOGNIZED "{from_language}": {result.text}\n' +
            f'TRANSLATED into "{to_language}"": {result.translations[to_language]}',
        speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
        speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
        speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
    }
    return reason_format.get(reason, 'Unable to recognize speech')

translate_speech_to_text()

Mer information om tal till text finns i grunderna för taligenkänning.

Syntetisera översättningar

Efter en lyckad taligenkänning och översättning innehåller resultatet alla översättningar i en ordlista. translationsOrdlistenyckeln är målöversättningsspråket och värdet är den översatta texten. Identifierat tal kan översättas och sedan syntetiseras på ett annat språk (tal till tal).

Händelsebaserad syntes

Objektet TranslationRecognizer exponerar en Synthesizing händelse. Händelsen utbrandas flera gånger och ger en mekanism för att hämta det syntetiserade ljudet från översättningsigenkänningsresultatet. Om du översätter till flera språk kan du läsa manuell syntes. Ange syntesrösten genom att tilldela voice_name en och tillhandahålla en händelsehanterare för händelsen och hämta Synthesizing ljudet. I följande exempel sparas det översatta ljudet som en WAV-fil.

Viktigt

Den händelsebaserade syntesen fungerar bara med en enda översättning, lägg inte till flera målöversättningsspråk. Dessutom bör vara voice_name samma språk som målöversättningsspråket, till exempel; kan "de" mappas till "de-DE-Hedda" .

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_language = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    # See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translation_config.voice_name = "de-DE-Hedda"

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)

    def synthesis_callback(evt):
        size = len(evt.result.audio)
        print(f'Audio synthesized: {size} byte(s) {"(COMPLETED)" if size == 0 else ""}')

        if size > 0:
            file = open('translation.wav', 'wb+')
            file.write(evt.result.audio)
            file.close()

    recognizer.synthesizing.connect(synthesis_callback)

    print(f'Say something in "{from_language}" and we\'ll translate into "{to_language}".')

    result = recognizer.recognize_once()
    print(get_result_text(reason=result.reason, result=result))

def get_result_text(reason, result):
    reason_format = {
        speechsdk.ResultReason.TranslatedSpeech:
            f'Recognized "{from_language}": {result.text}\n' +
            f'Translated into "{to_language}"": {result.translations[to_language]}',
        speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
        speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
        speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
    }
    return reason_format.get(reason, 'Unable to recognize speech')

translate_speech_to_text()

Manuell syntes

Ordlistan translations kan användas för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera översättningen. När du SpeechSynthesizer skapar en -instans måste objektet ha egenskapen SpeechConfig inställd på önskad speech_synthesis_voice_name röst. Följande exempel översätts till fem språk, och varje översättning syntetiseras sedan till en ljudfil på motsvarande neurala språk.

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', [ 'de', 'en', 'it', 'pt', 'zh-Hans' ]

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = recognizer.recognize_once()
    synthesize_translations(result=result)

def synthesize_translations(result):
    language_to_voice_map = {
        "de": "de-DE-KatjaNeural",
        "en": "en-US-AriaNeural",
        "it": "it-IT-ElsaNeural",
        "pt": "pt-BR-FranciscaNeural",
        "zh-Hans": "zh-CN-XiaoxiaoNeural"
    }
    print(f'Recognized: "{result.text}"')

    for language in result.translations:
        translation = result.translations[language]
        print(f'Translated into "{language}": {translation}')

        speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
        speech_config.speech_synthesis_voice_name = language_to_voice_map.get(language)
        
        audio_config = speechsdk.audio.AudioOutputConfig(filename=f'{language}-translation.wav')
        speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
        speech_synthesizer.speak_text_async(translation).get()

translate_speech_to_text()

Mer information om talsyntes finns i grunderna i talsyntes.

En av de viktigaste funktionerna i tal tjänsten är möjligheten att identifiera mänskligt tal och översätta den till andra språk. I den här snabb starten lär du dig hur du använder tal-SDK i dina appar och produkter för att utföra högkvalitativ tal översättning. Den här snabb starten översätter tal från mikrofonen till text på ett annat språk.

Förutsättningar

Den här artikeln förutsätter att du har ett Azure-konto och en röst tjänst prenumeration. Om du inte har ett konto och en prenumeration kan du prova att använda tal tjänsten kostnads fritt.

Hämta och installera

Följ dessa steg för att installera Speech CLI på Windows:

  1. På Windows behöver du Microsoft Visual C++ Redistributable för Visual Studio 2019 för din plattform. Det kan krävas en omstart för att installera detta för första gången.

  2. Installera .NET Core 3.1 SDK.

  3. Installera Speech CLI med NuGet genom att ange följande kommando:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    

Skriv spx för att se hjälpen för Speech CLI.

Anteckning

Som ett alternativ till NuGet kan du ladda ned och extrahera Speech CLI för Windows som en zip-fil.

Teckensnittsbegränsningar

På Windows kan Speech CLI bara visa teckensnitt som är tillgängliga för kommandotolken på den lokala datorn. Windows-terminal stöder alla teckensnitt som skapas interaktivt av Speech CLI.

Om du matar ut till en fil kan en textredigerare som Anteckningar eller en webbläsare som Microsoft Edge också visa alla teckensnitt.

Skapa prenumerationskonfiguration

Om du vill börja använda Speech CLI måste du ange din speech-prenumerationsnyckel och regionsidentifierare. Hämta dessa autentiseringsuppgifter genom att följa stegen i Prova Speech-tjänsten kostnadsfritt. När du har din prenumerationsnyckel och regionsidentifierare (t.ex. eastus, westus ), kör följande kommandon.

spx config @key --set SUBSCRIPTION-KEY
spx config @region --set REGION

Din prenumerationsautentisering lagras nu för framtida SPX-begäranden. Om du behöver ta bort något av dessa lagrade värden kör spx config @region --clear du eller spx config @key --clear .

Ange käll-och mål språk

Det här kommandot anropar tal-CLI för att översätta tal från mikrofonen från italienska till franska.

 spx translate --microphone --source it-IT --target fr

Nästa steg