Share via


Så här identifierar och översätter du tal

Referensdokumentation Paket (NuGet) | Ytterligare exempel på GitHub |

I den här guiden lär du dig att känna igen mänskligt tal och översätta det till ett annat språk.

Mer information om finns i översikten över talöversättning:

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

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 talresursens nyckel och region. Klassen Program innehåller två static readonly string värden som tilldelas från värddatorns miljövariabler: SPEECH__SUBSCRIPTION__KEY och SPEECH__SERVICE__REGION. Båda dessa fält finns i klassomfånget, så de är tillgängliga i klassens metodkroppar:

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

Mer information om miljövariabler finns i Miljövariabler och programkonfiguration.

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 instans. Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Dricks

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

Du kan initiera SpeechTranslationConfig på några sätt:

  • 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 in en auktoriseringstoken och den associerade regionen.

Nu ska vi titta på hur du skapar en SpeechTranslationConfig instans med hjälp av en nyckel och region. Hämta resursnyckeln och regionen Speech i Azure-portalen.

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 speechTranslationConfig =
            SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

Ändra källspråket

En vanlig uppgift med talöversättning är att ange indataspråket (eller källspråket). I följande exempel visas hur du ändrar indataspråket till italienska. I koden interagerar du med instansen SpeechTranslationConfig genom att tilldela den till SpeechRecognitionLanguage egenskapen:

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

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

Egenskapen SpeechRecognitionLanguage förväntar sig en språkspråksformatsträng. Se listan över språkvarianter för talöversättning som stöds.

Lägga till ett översättningsspråk

En annan vanlig uppgift med talöversättning är att ange målöversättningsspråk. Minst en krävs, men multiplar stöds. Följande kodfragment anger både franska och tyska som översättningsspråkmål:

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

    speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
    
    speechTranslationConfig.AddTargetLanguage("fr");
    speechTranslationConfig.AddTargetLanguage("de");
}

Med varje anrop till AddTargetLanguageanges 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ättningsigenkänning

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

Om du känner igen tal med hjälp av enhetens standardmikrofon bör instansen TranslationRecognizer se ut så här:

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

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

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
}

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

Referera först till objektet enligt AudioConfig följande:

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

    using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}

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

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

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

Översätt tal

Vid översättning av 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 får resultatet:

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

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

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

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

Händelsebaserad översättning

Objektet TranslationRecognizer exponerar en Recognizing händelse. Händelsen utlöses flera gånger och tillhandahåller en mekanism för att hämta mellanliggande översättningsresultat.

Kommentar

Mellanliggande översättningsresultat är inte tillgängliga när du använder flerspråkig talöversättning.

I följande exempel skrivs mellanliggande översättningsresultat ut till konsolen:

using (var audioInput = AudioConfig.FromWavFileInput(@"whatstheweatherlike.wav"))
{
    using (var translationRecognizer = new TranslationRecognizer(config, audioInput))
    {
        // Subscribes to events.
        translationRecognizer.Recognizing += (s, e) =>
        {
            Console.WriteLine($"RECOGNIZING in '{fromLanguage}': Text={e.Result.Text}");
            foreach (var element in e.Result.Translations)
            {
                Console.WriteLine($"    TRANSLATING into '{element.Key}': {element.Value}");
            }
        };

        translationRecognizer.Recognized += (s, e) => {
            if (e.Result.Reason == ResultReason.TranslatedSpeech)
            {
                Console.WriteLine($"RECOGNIZED in '{fromLanguage}': 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.");
            }
        };

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

        // Waits for completion.
        // Use Task.WaitAny to keep the task rooted.
        Task.WaitAny(new[] { stopTranslation.Task });

        // Stops translation.
        await translationRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
    }
}

Syntetisera översättningar

Efter en lyckad taligenkänning och översättning innehåller resultatet alla översättningar i en ordlista. Ordlistenyckeln Translations är målöversättningsspråket och värdet är den översatta texten. Tolkat 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 utlöses flera gånger och tillhandahåller 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 en VoiceName instans och ange en händelsehanterare för händelsen för Synthesizing att hämta 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 VoiceName bör värdet vara samma språk som målöversättningsspråket. Kan till exempel "de" mappa till "de-DE-Hedda".

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

    speechTranslationConfig.VoiceName = "de-DE-Hedda";

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

    translationRecognizer.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 translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\"");
        Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
    }
}

Manuell syntes

Du kan använda Translations ordlistan för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera den. När du skapar en SpeechSynthesizer instans SpeechConfig måste objektet ha sin SpeechSynthesisVoiceName egenskap inställd på önskad röst.

I följande exempel översätts till fem språk. Varje översättning syntetiseras sedan till en ljudfil på motsvarande neurala språk.

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

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

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

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

    var result = await translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        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 speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
            
            await speechSynthesizer.SpeakTextAsync(translation);
        }
    }
}

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 identifiera upp till 10 möjliga indataspråk och automatiskt översätta till målspråken.

I följande exempel förutses att en-US eller zh-CN bör identifieras eftersom de definieras i AutoDetectSourceLanguageConfig. Sedan översätts talet till de och fr enligt anropen till AddTargetLanguage().

speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

Ett fullständigt kodexempel finns i språkidentifiering.

Flerspråkig talöversättning utan källspråkskandidater

Flerspråkig talöversättning implementerar en ny nivå av talöversättningsteknik som låser upp olika funktioner, inklusive att inte ha något angivet indataspråk och hantera språkväxlar inom samma session. Dessa funktioner möjliggör en ny nivå av talöversättningskrafter som kan implementeras i dina produkter.

För närvarande när du använder språk-ID med talöversättning måste du skapa SpeechTranslationConfig objektet från v2-slutpunkten. Ersätt strängen "YourServiceRegion" med din Speech-resursregion (till exempel "westus"). Ersätt "YourSubscriptionKey" med din Speech-resursnyckel.

var v2EndpointInString = String.Format("wss://{0}.stt.speech.microsoft.com/speech/universal/v2", "YourServiceRegion");
var v2EndpointUrl = new Uri(v2EndpointInString);
var speechTranslationConfig = SpeechTranslationConfig.FromEndpoint(v2EndpointUrl, "YourSubscriptionKey");

Ange översättningsmålspråken. Ersätt med valfria språk. Du kan lägga till fler rader.

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

En viktig differentiering med flerspråkig talöversättning är att du inte behöver ange källspråket. Det beror på att tjänsten automatiskt identifierar källspråket. AutoDetectSourceLanguageConfig Skapa objektet med fromOpenRange metoden för att låta tjänsten veta att du vill använda flerspråkig talöversättning utan angivet källspråk.

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange(); 
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

Ett fullständigt kodexempel med Speech SDK finns i exempel på talöversättning på GitHub.

Referensdokumentation Paket (NuGet) | Ytterligare exempel på GitHub |

I den här guiden lär du dig att känna igen mänskligt tal och översätta det till ett annat språk.

Mer information om finns i översikten över talöversättning:

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

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 talresursens nyckel och region. C++-kodfilen innehåller två strängvärden som har tilldelats från värddatorns miljövariabler: SPEECH__SUBSCRIPTION__KEY och SPEECH__SERVICE__REGION. Båda dessa fält finns i klassomfånget, så de är tillgängliga i klassens metodkroppar:

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

Mer information om miljövariabler finns i Miljövariabler och programkonfiguration.

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 instans. Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Dricks

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

Du kan initiera SpeechTranslationConfig på några sätt:

  • 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 in en auktoriseringstoken och den associerade regionen.

Nu ska vi titta på hur du skapar en SpeechTranslationConfig instans med hjälp av en nyckel och region. Hämta resursnyckeln och regionen Speech i Azure-portalen.

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

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

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

Ändra källspråket

En vanlig uppgift med talöversättning är att ange indataspråket (eller källspråket). I följande exempel visas hur du ändrar indataspråket till italienska. I koden interagerar du med instansen SpeechTranslationConfig genom att anropa SetSpeechRecognitionLanguage metoden.

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

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

Egenskapen SpeechRecognitionLanguage förväntar sig en språkspråksformatsträng. Se listan över språkvarianter för talöversättning som stöds.

Lägga till ett översättningsspråk

En annan vanlig uppgift med talöversättning är att ange målöversättningsspråk. Minst en krävs, men multiplar stöds. Följande kodfragment anger både franska och tyska som översättningsspråkmål:

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

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

    speechTranslationConfig->AddTargetLanguage("fr");
    speechTranslationConfig->AddTargetLanguage("de");
}

Med varje anrop till AddTargetLanguageanges 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ättningsigenkänning

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

Om du känner igen tal med hjälp av enhetens standardmikrofon bör du se ut så här TranslationRecognizer :

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

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

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

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

Referera först till objektet enligt AudioConfig följande:

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

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

    auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
    auto translationRecognizer = 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 parameter. Men när du skapar en AudioConfig klassinstans i stället för att anropa FromDefaultMicrophoneInputanropar FromWavFileInput du och skickar parametern filename :

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

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

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

Översätt tal

Vid översättning av 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 får resultatet:

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

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

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

    auto result = translationRecognizer->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. Ordlistenyckeln Translations är målöversättningsspråket och värdet är den översatta texten. Tolkat 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 utlöses flera gånger och tillhandahåller 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 en SetVoiceName instans och ange en händelsehanterare för händelsen för Synthesizing att hämta 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 SetVoiceName bör värdet vara samma språk som målöversättningsspråket. Kan till exempel "de" mappa till "de-DE-Hedda".

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

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

    speechTranslationConfig->SetVoiceName("de-DE-Hedda");

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
    translationRecognizer->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 = translationRecognizer->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

Du kan använda Translations ordlistan för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera den. När du skapar en SpeechSynthesizer instans SpeechConfig måste objektet ha sin SetSpeechSynthesisVoiceName egenskap inställd på önskad röst.

I följande exempel översätts till fem språk. Varje översättning syntetiseras sedan till en ljudfil på motsvarande neurala språk.

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

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

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);

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

    auto result = translationRecognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        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 speechConfig =
                SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
            speechConfig->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);

            auto audioConfig = AudioConfig::FromWavFileOutput(language + "-translation.wav");
            auto speechSynthesizer = SpeechSynthesizer::FromConfig(speechConfig, audioConfig);

            speechSynthesizer->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 identifiera upp till 10 möjliga indataspråk och automatiskt översätta till målspråken.

I följande exempel förutses att en-US eller zh-CN bör identifieras eftersom de definieras i AutoDetectSourceLanguageConfig. Sedan översätts talet till de och fr enligt anropen till AddTargetLanguage().

speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

Ett fullständigt kodexempel finns i språkidentifiering.

Referensdokumentation Paket (Go) | Ytterligare exempel på GitHub |

Speech SDK för Go stöder inte talöversättning. Välj ett annat programmeringsspråk eller Go-referensen och exempel som är länkade från början av den här artikeln.

Referensdokumentation | Ytterligare exempel på GitHub

I den här guiden lär du dig att känna igen mänskligt tal och översätta det till ett annat språk.

Mer information om finns i översikten över talöversättning:

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

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 talresursens nyckel och region. Java-kodfilen innehåller två static final String värden som har tilldelats från värddatorns miljövariabler: SPEECH__SUBSCRIPTION__KEY och SPEECH__SERVICE__REGION. Båda dessa fält finns i klassomfånget, så de är tillgängliga i klassens metodkroppar:

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

Mer information om miljövariabler finns i Miljövariabler och programkonfiguration.

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 instans. Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Dricks

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

Du kan initiera en SpeechTranslationConfig instans på några sätt:

  • 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 in en auktoriseringstoken och den associerade regionen.

Nu ska vi titta på hur du skapar en SpeechTranslationConfig instans med hjälp av en nyckel och region. Hämta resursnyckeln och regionen Speech i Azure-portalen.

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 speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
            SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

Ändra källspråket

En vanlig uppgift med talöversättning är att ange indataspråket (eller källspråket). I följande exempel visas hur du ändrar indataspråket till italienska. I koden interagerar du med instansen SpeechTranslationConfig genom att anropa setSpeechRecognitionLanguage metoden:

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

Funktionen setSpeechRecognitionLanguage förväntar sig en språkspråksformatsträng. Se listan över språkvarianter för talöversättning som stöds.

Lägga till ett översättningsspråk

En annan vanlig uppgift med talöversättning är att ange målöversättningsspråk. Minst en krävs, men multiplar stöds. Följande kodfragment anger både franska och tyska som översättningsspråkmål:

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

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

Med varje anrop till addTargetLanguageanges 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ättningsigenkänning

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

Om du känner igen tal med hjälp av enhetens standardmikrofon bör du se ut så här TranslationRecognizer :

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

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
    }
}

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

Referera först till objektet enligt AudioConfig följande:

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

    AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
        
    }
}

Om du vill ange en ljudfil i stället för att använda en mikrofon måste du fortfarande ange en audioConfig parameter. Men när du skapar en AudioConfig klassinstans i stället för att anropa fromDefaultMicrophoneInputanropar fromWavFileInput du och skickar parametern filename :

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

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

Översätt tal

Vid översättning av 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 får resultatet:

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

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

        TranslationRecognitionResult result = translationRecognizer.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 som översatt text. Tolkat 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 utlöses flera gånger och tillhandahåller 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 en setVoiceName instans och ange en händelsehanterare för händelsen för synthesizing att hämta 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 setVoiceName bör värdet vara samma språk som målöversättningsspråket. Kan till exempel "de" mappa till "de-DE-Hedda".

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

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

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

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
        translationRecognizer.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 = translationRecognizer.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 du kan använda för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera den. När du skapar en SpeechSynthesizer instans SpeechConfig måste objektet ha sin setSpeechSynthesisVoiceName egenskap inställd på önskad röst.

I följande exempel översätts till fem språk. Varje översättning syntetiseras sedan till en ljudfil på motsvarande neurala språk.

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

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

        TranslationRecognitionResult result = translationRecognizer.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 speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
                    speechSynthesizer.SpeakTextAsync(translation).get();
                }
            }
        }
    }
}

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

Referensdokumentation Paket (npm) | Ytterligare exempel på GitHub-bibliotekets källkod | |

I den här guiden lär du dig att känna igen mänskligt tal och översätta det till ett annat språk.

Mer information om finns i översikten över talöversättning:

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

Skapa en översättningskonfiguration

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

Kommentar

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

Du kan initiera SpeechTranslationConfig på några sätt:

  • 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 in en auktoriseringstoken och den associerade regionen.

Nu ska vi titta på hur du skapar en SpeechTranslationConfig instans med hjälp av en nyckel och region. Hämta resursnyckeln och regionen Speech i Azure-portalen.

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

Initiera en översättare

När du har skapat en SpeechTranslationConfig instans är nästa steg att initiera TranslationRecognizer. När du initierar TranslationRecognizermåste du skicka den till din speechTranslationConfig instans. Konfigurationsobjektet innehåller de autentiseringsuppgifter som översättningstjänsten kräver för att verifiera din begäran.

Om du översätter tal som tillhandahålls via enhetens standardmikrofon bör du se ut så här TranslationRecognizer :

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

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

Referera till objektet på AudioConfig följande sätt:

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

Om du vill ange en ljudfil i stället för att använda en mikrofon måste du fortfarande ange en audioConfig parameter. Du kan dock bara göra detta när du riktar in dig på Node.js. När du skapar en AudioConfig klassinstans anropar fromWavFileOutput och skickar du parametern filename i stället för att anropafromDefaultMicrophoneInput:

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

Översätt tal

Klassen TranslationRecognizer för Speech SDK för JavaScript visar metoder som du kan använda för talöversättning:

  • Enkelriktad översättning (asynkron): Utför översättning i ett icke-blockerande (asynkront) läge. Det översätter ett enda yttrande. Den avgör slutet av ett enskilt yttrande genom att lyssna efter tystnad i slutet eller tills högst 15 sekunders ljud bearbetas.
  • Kontinuerlig översättning (async): Initierar asynkront en kontinuerlig översättningsåtgärd. Användaren registrerar sig för händelser och hanterar olika programtillstånd. Om du vill stoppa asynkron kontinuerlig översättning anropar du stopContinuousRecognitionAsync.

Mer information om hur du väljer ett taligenkänningsläge finns i Komma igång med tal till text.

Ange ett målspråk

Om du vill översätta måste du ange både ett källspråk och minst ett målspråk.

Du kan välja ett källspråk med hjälp av ett språk som anges i tabellen Talöversättning. Hitta dina alternativ för översatt språk på samma länk.

Alternativen för målspråk skiljer sig åt när du vill visa text eller om du vill höra syntetiserat översatt tal. Om du vill översätta från engelska till tyska ändrar du översättningskonfigurationsobjektet:

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

Enkel igenkänning

Här är ett exempel på asynkron enkelbildsöversättning via recognizeOnceAsync:

translationRecognizer.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 en översättning till tyska:

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

Koden kan också hantera uppdateringar som tillhandahålls medan översättningen bearbetas. Du kan använda dessa uppdateringar för att ge visuell feedback om översättningsförloppet. Det här JavaScript-Node.js exemplet visar den här typen av uppdateringar. Följande kod visar också information som produceras under översättningsprocessen:

translationRecognizer.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);
};
translationRecognizer.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 involverat än enkel igenkänning. Det kräver att du prenumererar på recognizinghändelserna , recognizedoch canceled för att få igenkänningsresultatet. 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 ljudinmatningsfil. Vi börjar med att definiera indata och initiera TranslationRecognizer:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

I följande kod prenumererar du på de händelser som skickas från TranslationRecognizer:

  • recognizing: Signal för händelser som innehåller mellanliggande översättningsresultat.
  • recognized: Signal för händelser som innehåller slutliga översättningsresultat. Dessa resultat indikerar ett lyckat översättningsförsök.
  • sessionStopped: Signal för händelser som anger slutet på en översättningssession (åtgärd).
  • canceled: Signal för händelser som innehåller avbrutna översättningsresultat. Dessa händelser indikerar ett översättningsförsök som avbröts till följd av en direkt annullering. Alternativt anger de ett transport- eller protokollfel.
translationRecognizer.recognizing = (s, e) => {
    console.log(`TRANSLATING: Text=${e.result.text}`);
};
translationRecognizer.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.");
    }
};
translationRecognizer.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 set the speech resource key and region values?");
    }
    translationRecognizer.stopContinuousRecognitionAsync();
};
translationRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    translationRecognizer.stopContinuousRecognitionAsync();
};

Med allt konfigurerat kan du anropa startContinuousRecognitionAsync:

// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();

Välj ett källspråk

En vanlig uppgift för talöversättning är att ange indataspråket (eller källspråket). I följande exempel visas hur du ändrar indataspråket till italienska. Leta upp din SpeechTranslationConfig instans i koden och lägg till följande rad direkt under den:

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

Egenskapen speechRecognitionLanguage förväntar sig en språkspråksformatsträng. Se listan över språkvarianter för talöversättning som stöds.

Välj ett eller flera målspråk

Speech SDK kan översättas till flera målspråk parallellt. De tillgängliga målspråken skiljer sig något från källspråklistan. Du anger målspråk med hjälp av en språkkod i stället för en språkvariant.

En lista över språkkoder för textmål finns i talöversättningstabellen på språkstödsidan. Du kan också hitta information om översättning till syntetiserade språk där.

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

speechTranslationConfig.addTargetLanguage("de");

Eftersom flera målspråköversättningar är möjliga måste koden ange målspråket när resultatet undersöks. Följande kod hämtar översättningsresultat för tyska:

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

Referensdokumentationspaket (ladda ned) | Ytterligare exempel på GitHub |

Speech SDK för Objective-C stöder talöversättning, men vi har ännu inte tagit med någon guide här. Välj ett annat programmeringsspråk för att komma igång och lära dig mer om begreppen, eller se Objective-C-referensen och exemplen som är länkade från början av den här artikeln.

Referensdokumentationspaket (ladda ned) | Ytterligare exempel på GitHub |

Speech SDK för Swift stöder talöversättning, men vi har ännu inte tagit med någon guide här. Välj ett annat programmeringsspråk för att komma igång och lära dig mer om begreppen, eller se Swift-referensen och exemplen som är länkade från början av den här artikeln.

Referensdokumentation Paket (PyPi) | Ytterligare exempel på GitHub |

I den här guiden lär du dig att känna igen mänskligt tal och översätta det till ett annat språk.

Mer information om finns i översikten över talöversättning:

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

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 Speech-resursens prenumerationsnyckel och region. Python-kodfilen innehåller två värden som har tilldelats från värddatorns miljövariabler: SPEECH__SUBSCRIPTION__KEY och SPEECH__SERVICE__REGION. Båda dessa variabler finns i det globala omfånget, så de är tillgängliga i funktionsdefinitionen för kodfilen:

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

Mer information om miljövariabler finns i Miljövariabler och programkonfiguration.

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 instans. Den här klassen innehåller information om din prenumeration, till exempel din nyckel och tillhörande region, slutpunkt, värd eller auktoriseringstoken.

Dricks

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

Du kan initiera SpeechTranslationConfig på några sätt:

  • 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 in en auktoriseringstoken och den associerade regionen.

Nu ska vi titta på hur du kan skapa en SpeechTranslationConfig instans med hjälp av en nyckel och region. Hämta resursnyckeln och regionen Speech i Azure-portalen.

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åket

En vanlig uppgift med talöversättning är att ange indataspråket (eller källspråket). I följande exempel visas hur du ändrar indataspråket till italienska. I koden interagerar du med instansen SpeechTranslationConfig genom att tilldela den till speech_recognition_language egenskapen.

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

    # Source (input) language
    from_language = "it-IT"
    translation_config.speech_recognition_language = from_language

Egenskapen speech_recognition_language förväntar sig en språkspråksformatsträng. Se listan över språkvarianter för talöversättning som stöds.

Lägga till ett översättningsspråk

En annan vanlig uppgift med talöversättning är att ange målöversättningsspråk. Minst en krävs, men multiplar stöds. Följande kodfragment anger både franska och tyska som översättningsspråkmål:

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")

Med varje anrop till add_target_languageanges 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ättningsigenkänning

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

Om du känner igen tal med hjälp av enhetens standardmikrofon bör du se ut så här TranslationRecognizer :

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)

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

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

Referera först till objektet enligt AudioConfig följande:

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)
    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

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

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")
    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Översätt tal

Vid översättning av 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 får 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)

    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = translation_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. Ordlistenyckeln translations är målöversättningsspråket och värdet är den översatta texten. Tolkat 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 utlöses flera gånger och tillhandahåller 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 en voice_name instans och ange en händelsehanterare för händelsen för Synthesizing att hämta 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 voice_name bör värdet vara samma språk som målöversättningsspråket. Kan till exempel "de" mappa 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"

    translation_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()

    translation_recognizer.synthesizing.connect(synthesis_callback)

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

    result = translation_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

Du kan använda translations ordlistan för att syntetisera ljud från översättningstexten. Iterera genom varje översättning och syntetisera den. När du skapar en SpeechSynthesizer instans SpeechConfig måste objektet ha sin speech_synthesis_voice_name egenskap inställd på önskad röst.

I följande exempel översätts till fem språk. 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 = translation_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 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 identifiera upp till 10 möjliga indataspråk och automatiskt översätta till målspråken.

Ett fullständigt kodexempel finns i språkidentifiering.

REST API för tal till text refererar | till REST API för tal till text för kort ljudreferens | Ytterligare exempel på GitHub

Du kan använda REST-API:et för talöversättning, men vi har ännu inte tagit med någon guide här. Välj ett annat programmeringsspråk för att komma igång och lära dig mer om begreppen.

I den här guiden lär du dig att känna igen mänskligt tal och översätta det till ett annat språk.

Mer information om finns i översikten över talöversättning:

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

Förutsättningar

Ladda ned och installera

Följ de här stegen och se snabbstarten för Speech CLI för andra krav för din plattform.

  1. Kör följande .NET CLI-kommando för att installera Speech CLI:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    
  2. Kör följande kommandon för att konfigurera din Speech-resursnyckel och -region. Ersätt SUBSCRIPTION-KEY med din Speech-resursnyckel och ersätt REGION med din Speech-resursregion.

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

Ange käll- och målspråk

Det här kommandot anropar Speech 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