Konuşmayı tanıma ve çevirme

GitHub'da Başvuru belgeleri | Paketi (NuGet) | Ek Örnekler

Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.

Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:

  • Konuşmayı metne çevirme
  • Konuşmayı birden çok hedef dile çevirme
  • Konuşma çevirisine doğrudan konuşma gerçekleştirme

Hassas veriler ve ortam değişkenleri

Bu makaledeki örnek kaynak kodu, Konuşma kaynağının anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. sınıfı, Program konak makinenin ortam değişkenlerinden atanan iki static readonly string değer içerir: SPEECH__SUBSCRIPTION__KEY ve SPEECH__SERVICE__REGION. Bu alanların her ikisi de sınıf kapsamında olduğundan, sınıfın yöntem gövdeleri içinde erişilebilir:

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

Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.

Konuşma çevirisi yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.

İpucu

Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.

Birkaç yolla başlatabilirsiniz SpeechTranslationConfig :

  • Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
  • Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.

Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.

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

Kaynak dili değiştirme

Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda, özelliğine SpeechTranslationConfig atayarak örnekle etkileşim kurun SpeechRecognitionLanguage :

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

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

SpeechRecognitionLanguage özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.

Çeviri dili ekleme

Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:

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

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

için yapılan her çağrıda AddTargetLanguageyeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.

Çeviri tanıyıcıyı başlatma

Bir SpeechTranslationConfig örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer. uygulamasını başlatırken TranslationRecognizerörneğinizi geçirmeniz speechTranslationConfig gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.

Konuşmaları cihazınızın varsayılan mikrofonunu kullanarak tanıyorsanız örneğin TranslationRecognizer şu şekilde görünmesi gerekir:

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

Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizerparametresini audioConfig sağlamanız gerekir.

İpucu

Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.

İlk olarak, nesnesine AudioConfig aşağıdaki gibi başvurun:

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

Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig parametre sağlamanız gerekir. Ancak, bir AudioConfig sınıf örneği oluşturduğunuzda çağırmak FromDefaultMicrophoneInputyerine öğesini çağırıp FromWavFileInput parametresini filename geçirirsiniz:

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

Konuşmayı çevirme

Konuşma SDK’sının konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine ihtiyacı vardır. Konuşma tanıma, konuşma çevirisinden önce gerçekleşir. Tüm nesneler başlatıldıktan sonra recognize-once işlevini çağırın ve sonucu alın:

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

Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.

Çevirileri sentezle

Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. Translations Sözlük anahtarı hedef çeviri dili, değer ise çevrilmiş metindir. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.

Olay tabanlı sentez

TranslationRecognizer nesnesi bir Synthesizing olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.

Bir VoiceName örnek atayarak sentez sesini belirtin ve sesi almak için olay için Synthesizing bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.

Önemli

Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin VoiceName hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de" ile eşlenebilir "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]}");
    }
}

El ile sentez

Çeviri metninden Translations ses sentezlemek için sözlüğü kullanabilirsiniz. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer örnek oluştururken nesnenin özelliğinin SpeechConfig istenen sese ayarlanmış olması gerekir SpeechSynthesisVoiceName .

Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.

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

Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.

Dil belirleme ile çok dilli çeviri

Birçok senaryoda, hangi giriş dillerini belirtebileceğinizi bilmiyor olabilirsiniz. Dil belirlemeyi kullanarak en fazla 10 olası giriş dili algılayabilir ve otomatik olarak hedef dillerinize çevirebilirsiniz.

Aşağıdaki örnek, içinde tanımlandığı AutoDetectSourceLanguageConfigiçin veya zh-CN algılanması gerektiğini tahmin ederen-US. Daha sonra konuşma, öğesine yapılan çağrılarda belirtildiği gibi ve fr öğesine çevrilir.AddTargetLanguage()de

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

Eksiksiz bir kod örneği için bkz . dil belirleme.

GitHub'da Başvuru belgeleri | Paketi (NuGet) | Ek Örnekler

Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.

Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:

  • Konuşmayı metne çevirme
  • Konuşmayı birden çok hedef dile çevirme
  • Konuşma çevirisine doğrudan konuşma gerçekleştirme

Hassas veriler ve ortam değişkenleri

Bu makaledeki örnek kaynak kodu, Konuşma kaynağının anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. C++ kod dosyası, konak makinenin ortam değişkenlerinden atanan iki dize değeri içerir: SPEECH__SUBSCRIPTION__KEY ve SPEECH__SERVICE__REGION. Bu alanların her ikisi de sınıf kapsamında olduğundan, sınıfın yöntem gövdeleri içinde erişilebilir:

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

Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.

Konuşma çevirisi yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.

İpucu

Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.

Birkaç yolla başlatabilirsiniz SpeechTranslationConfig :

  • Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
  • Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.

Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.

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

Kaynak dili değiştirme

Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda yöntemini çağırarak örnekle SpeechTranslationConfig etkileşime geçin SetSpeechRecognitionLanguage .

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

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

SpeechRecognitionLanguage özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.

Çeviri dili ekleme

Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:

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

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

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

için yapılan her çağrıda AddTargetLanguageyeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.

Çeviri tanıyıcıyı başlatma

Bir SpeechTranslationConfig örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer. uygulamasını başlatırken TranslationRecognizerörneğinizi geçirmeniz translationConfig gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.

Konuşmaları cihazınızın varsayılan mikrofonuyla TranslationRecognizer tanıyorsanız şu şekilde görünmelidir:

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

Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizerparametresini audioConfig sağlamanız gerekir.

İpucu

Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.

İlk olarak, nesnesine AudioConfig aşağıdaki gibi başvurun:

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

Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig parametre sağlamanız gerekir. Ancak, bir AudioConfig sınıf örneği oluşturduğunuzda çağırmak FromDefaultMicrophoneInputyerine öğesini çağırıp FromWavFileInput parametresini filename geçirirsiniz:

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

Konuşmayı çevirme

Konuşma SDK’sının konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine ihtiyacı vardır. Konuşma tanıma, konuşma çevirisinden önce gerçekleşir. Tüm nesneler başlatıldıktan sonra recognize-once işlevini çağırın ve sonucu alın:

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

Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.

Çevirileri sentezle

Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. Translations Sözlük anahtarı hedef çeviri dili, değer ise çevrilmiş metindir. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.

Olay tabanlı sentez

TranslationRecognizer nesnesi bir Synthesizing olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.

Bir SetVoiceName örnek atayarak sentez sesini belirtin ve sesi almak için olay için Synthesizing bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.

Önemli

Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin SetVoiceName hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de" ile eşlenebilir "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;
        }
    }
}

El ile sentez

Çeviri metninden Translations ses sentezlemek için sözlüğü kullanabilirsiniz. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer örnek oluştururken nesnenin özelliğinin SpeechConfig istenen sese ayarlanmış olması gerekir SetSpeechSynthesisVoiceName .

Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.

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

Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.

Dil belirleme ile çok dilli çeviri

Birçok senaryoda, hangi giriş dillerini belirtebileceğinizi bilmiyor olabilirsiniz. Dil belirlemeyi kullanarak en fazla 10 olası giriş dili algılayabilir ve otomatik olarak hedef dillerinize çevirebilirsiniz.

Aşağıdaki örnek, içinde tanımlandığı AutoDetectSourceLanguageConfigiçin veya zh-CN algılanması gerektiğini tahmin ederen-US. Daha sonra konuşma, öğesine yapılan çağrılarda belirtildiği gibi ve fr öğesine çevrilir.deAddTargetLanguage()

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

Eksiksiz bir kod örneği için bkz . dil belirleme.

GitHub'da Başvuru belgeleri | Paketi (Go) | Ek Örnekler

Go için Konuşma SDK'sı konuşma çevirisini desteklemez. Lütfen bu makalenin başından itibaren başka bir programlama dili veya Go başvurusu ve bağlantılı örnekler seçin.

Başvuru belgeleri | GitHub'da Ek Örnekler

Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.

Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:

  • Konuşmayı metne çevirme
  • Konuşmayı birden çok hedef dile çevirme
  • Konuşma çevirisine doğrudan konuşma gerçekleştirme

Hassas veriler ve ortam değişkenleri

Bu makaledeki örnek kaynak kodu, Konuşma kaynağının anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. Java kod dosyası, konak makinenin ortam değişkenlerinden atanan iki static final String değer içerir: SPEECH__SUBSCRIPTION__KEY ve SPEECH__SERVICE__REGION. Bu alanların her ikisi de sınıf kapsamında olduğundan, sınıfın yöntem gövdeleri içinde erişilebilir:

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

Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.

Konuşma çevirisi yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.

İpucu

Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.

Örneği SpeechTranslationConfig birkaç yolla başlatabilirsiniz:

  • Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
  • Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.

Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.

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

Kaynak dili değiştirme

Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda yöntemini çağırarak örnekle SpeechTranslationConfig etkileşim kurun setSpeechRecognitionLanguage :

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

setSpeechRecognitionLanguage işlevi bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.

Çeviri dili ekleme

Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:

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

için yapılan her çağrıda addTargetLanguageyeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.

Çeviri tanıyıcıyı başlatma

Bir SpeechTranslationConfig örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer. uygulamasını başlatırken TranslationRecognizerörneğinizi geçirmeniz speechTranslationConfig gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.

Konuşmaları cihazınızın varsayılan mikrofonuyla TranslationRecognizer tanıyorsanız şu şekilde görünmelidir:

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

Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizerparametresini audioConfig sağlamanız gerekir.

İpucu

Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.

İlk olarak, nesnesine AudioConfig aşağıdaki gibi başvurun:

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

Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig parametre sağlamanız gerekir. Ancak, bir AudioConfig sınıf örneği oluşturduğunuzda çağırmak fromDefaultMicrophoneInputyerine öğesini çağırıp fromWavFileInput parametresini filename geçirirsiniz:

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

Konuşmayı çevirme

Konuşma SDK’sının konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine ihtiyacı vardır. Konuşma tanıma, konuşma çevirisinden önce gerçekleşir. Tüm nesneler başlatıldıktan sonra recognize-once işlevini çağırın ve sonucu alın:

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

Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.

Çevirileri sentezle

Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. İşlev, getTranslations anahtarı hedef çeviri dili ve değeri çevrilmiş metin olarak içeren bir sözlük döndürür. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.

Olay tabanlı sentez

TranslationRecognizer nesnesi bir synthesizing olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.

Bir setVoiceName örnek atayarak sentez sesini belirtin ve sesi almak için olay için synthesizing bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.

Önemli

Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin setVoiceName hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de" ile eşlenebilir "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);
            }
        }
    }
}

El ile sentez

İşlev, getTranslations çeviri metninden ses sentezlemek için kullanabileceğiniz bir sözlük döndürür. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer örnek oluştururken nesnenin özelliğinin SpeechConfig istenen sese ayarlanmış olması gerekir setSpeechSynthesisVoiceName .

Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.

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

Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.

Başvuru belgeleri | Paketi (npm) | GitHub | Kitaplığı kaynak kodunda ek örnekler

Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.

Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:

  • Konuşmayı metne çevirme
  • Konuşmayı birden çok hedef dile çevirme
  • Konuşma çevirisine doğrudan konuşma gerçekleştirme

Çeviri yapılandırması oluşturma

Konuşma SDK'sını kullanarak çeviri hizmetini çağırmak için bir SpeechTranslationConfig örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.

Not

Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.

Birkaç yolla başlatabilirsiniz SpeechTranslationConfig :

  • Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
  • Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.

Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.

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

Çeviriyi başlatma

Bir SpeechTranslationConfig örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer. uygulamasını başlatırken TranslationRecognizerörneğinizi geçirmeniz speechTranslationConfig gerekir. Yapılandırma nesnesi, çeviri hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.

Cihazınızın varsayılan mikrofonu aracılığıyla sağlanan konuşmayı çeviriyorsanız şu TranslationRecognizer şekilde görünmelidir:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizerparametresini audioConfig sağlamanız gerekir.

İpucu

Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.

Nesneye AudioConfig aşağıdaki gibi başvurun:

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

Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig parametre sağlamanız gerekir. Ancak, bunu yalnızca Node.js hedeflediğinizde yapabilirsiniz. Bir AudioConfig sınıf örneği oluşturduğunuzda, çağırmak fromDefaultMicrophoneInputyerine öğesini çağırıp fromWavFileOutput parametresini filename geçirirsiniz:

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

Konuşmayı çevirme

JavaScript için Konuşma SDK'sının TranslationRecognizer sınıfı , konuşma çevirisi için kullanabileceğiniz yöntemleri kullanıma sunar:

  • Tek seferlik çeviri (zaman uyumsuz): Çeviriyi engelleyici olmayan (zaman uyumsuz) modda gerçekleştirir. Tek bir konuşmayı çevirir. Tek bir konuşmanın sonunu, en fazla 15 saniye ses işlenene kadar veya sonundaki sessizliği dinleyerek belirler.
  • Sürekli çeviri (zaman uyumsuz):Zaman uyumsuz olarak sürekli çeviri işlemi başlatır. Kullanıcı olaylara kaydolup çeşitli uygulama durumlarını işler. Zaman uyumsuz sürekli çeviriyi durdurmak için çağrısında bulunur stopContinuousRecognitionAsync.

Konuşma tanıma modunu seçme hakkında daha fazla bilgi edinmek için bkz . Konuşmayı metne dönüştürmeye başlama.

Hedef dil belirtme

Çevirmek için hem kaynak dili hem de en az bir hedef dil belirtmeniz gerekir.

Konuşma çevirisi tablosunda listelenen bir yerel ayarı kullanarak kaynak dil seçebilirsiniz. Çevrilmiş dil seçeneklerinizi aynı bağlantıda bulabilirsiniz.

Hedef diller için seçenekleriniz, metni görüntülemek veya sentezlenmiş çevrilmiş konuşmayı duymak istediğinizde farklılık gösterir. İngilizceden Almancaya çevirmek için çeviri yapılandırma nesnesini değiştirin:

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

Tek seferlik tanıma

Aşağıda aracılığıyla zaman uyumsuz tek seferlik çeviri örneği verilmiştir recognizeOnceAsync:

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

Sonucu işlemek için kod yazmanız gerekir. Bu örnek, result.reason Almancaya çeviriyi değerlendirir:

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

Kodunuz, çeviri işlenirken sağlanan güncelleştirmeleri de işleyebilir. Çeviri ilerleme durumu hakkında görsel geri bildirim sağlamak için bu güncelleştirmeleri kullanabilirsiniz. Bu JavaScript Node.js örneği bu tür güncelleştirmeleri gösterir. Aşağıdaki kod, çeviri işlemi sırasında oluşturulan ayrıntıları da görüntüler:

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

Sürekli çeviri

Sürekli çeviri, tek seferlik tanımadan biraz daha önemlidir. Tanıma sonuçlarını almak için recognizing, recognizedve canceled olaylarına abone olmanız gerekir. Çeviriyi durdurmak için öğesini çağırmanız stopContinuousRecognitionAsyncgerekir.

Aşağıda, bir ses giriş dosyasında sürekli çevirinin nasıl gerçekleştirildiğini gösteren bir örnek verilmiştir. Giriş tanımlayıp başlatarak TranslationRecognizerbaşlayalım:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Aşağıdaki kodda, öğesinden TranslationRecognizergönderilen olaylara abone olacaksınız:

  • recognizing: Ara çeviri sonuçları içeren olaylar için sinyal.
  • recognized: Son çeviri sonuçlarını içeren olaylar için sinyal. Bu sonuçlar başarılı bir çeviri girişimi olduğunu gösterir.
  • sessionStopped: Çeviri oturumunun (işlem) sonunu gösteren olaylar için sinyal.
  • canceled: İptal edilen çeviri sonuçlarını içeren olaylar için sinyal. Bu olaylar, doğrudan iptal sonucu iptal edilen bir çeviri girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
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();
};

Her şey ayarlandıysa öğesini çağırabilirsiniz startContinuousRecognitionAsync:

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

Kaynak dil seçin

Konuşma çevirisi için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda örneğinizi SpeechTranslationConfig bulun ve hemen altına aşağıdaki satırı ekleyin:

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

speechRecognitionLanguage özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.

Bir veya daha fazla hedef dil seçme

Konuşma SDK'sı birden çok hedef dile paralel olarak çevrilebilir. Kullanılabilir hedef diller, kaynak dil listesinden biraz farklıdır. Hedef dilleri yerel ayar yerine bir dil kodu kullanarak belirtirsiniz.

Metin hedeflerinin dil kodlarının listesi için dil destek sayfasındaki konuşma çevirisi tablosuna bakın. Sentezlenmiş dillerin çevirisi hakkındaki ayrıntıları da burada bulabilirsiniz.

Aşağıdaki kod, hedef dil olarak Almanca ekler:

speechTranslationConfig.addTargetLanguage("de");

Birden çok hedef dil çevirisi mümkün olduğundan, sonucu incelerken kodunuzun hedef dili belirtmesi gerekir. Aşağıdaki kod Almanca için çeviri sonuçlarını alır:

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

Başvuru belgeleri | Paketi (İndir) | GitHub'da Ek Örnekler

Objective-C için Konuşma SDK'sı konuşma çevirisini destekler, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin veya bu makalenin başındaki Objective-C başvurusuna ve bağlantılı örneklere bakın.

Başvuru belgeleri | Paketi (İndir) | GitHub'da Ek Örnekler

Swift için Konuşma SDK'sı konuşma çevirisini destekler, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin veya bu makalenin başından itibaren bağlantılı Swift başvurusuna ve örneklerine bakın.

GitHub'da Başvuru belgeleri | Paketi (PyPi) | Ek Örnekler

Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.

Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:

  • Konuşmayı metne çevirme
  • Konuşmayı birden çok hedef dile çevirme
  • Konuşma çevirisine doğrudan konuşma gerçekleştirme

Hassas veriler ve ortam değişkenleri

Bu makaledeki örnek kaynak kodu, Konuşma kaynağının abonelik anahtarı ve bölgesi gibi hassas verileri depolamaya yönelik ortam değişkenlerine bağlıdır. Python kod dosyası, konak makinenin ortam değişkenlerinden atanan iki değer içerir: SPEECH__SUBSCRIPTION__KEY ve SPEECH__SERVICE__REGION. Bu değişkenlerin her ikisi de genel kapsamda olduğundan kod dosyasının işlev tanımından erişilebilir:

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

Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.

Konuşma çevirisi yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.

İpucu

Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.

Birkaç yolla başlatabilirsiniz SpeechTranslationConfig :

  • Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
  • Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
  • Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.

Şimdi bir anahtar ve bölge kullanarak nasıl örnek oluşturabileceğinize SpeechTranslationConfig bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.

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

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

Kaynak dili değiştirme

Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda, özelliğine SpeechTranslationConfig atayarak örnekle etkileşim kurun speech_recognition_language .

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

speech_recognition_language özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.

Çeviri dili ekleme

Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:

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

için yapılan her çağrıda add_target_languageyeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.

Çeviri tanıyıcıyı başlatma

Bir SpeechTranslationConfig örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer. uygulamasını başlatırken TranslationRecognizerörneğinizi geçirmeniz translation_config gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.

Konuşmaları cihazınızın varsayılan mikrofonuyla TranslationRecognizer tanıyorsanız şu şekilde görünmelidir:

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)

Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizerparametresini audio_config sağlamanız gerekir.

İpucu

Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.

İlk olarak, nesnesine AudioConfig aşağıdaki gibi başvurun:

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)

Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig parametre sağlamanız gerekir. Ancak, ile çağırmak yerine bir AudioConfig sınıf örneği oluşturduğunuzda ile filename="path-to-file.wav" öğesini çağırır ve parametresini filename sağlarsınız:use_default_microphone=True

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)

Konuşmayı çevirme

Konuşma SDK’sının konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine ihtiyacı vardır. Konuşma tanıma, konuşma çevirisinden önce gerçekleşir. Tüm nesneler başlatıldıktan sonra recognize-once işlevini çağırın ve sonucu alın:

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

Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.

Çevirileri sentezle

Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. translations Sözlük anahtarı hedef çeviri dili, değer ise çevrilmiş metindir. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.

Olay tabanlı sentez

TranslationRecognizer nesnesi bir Synthesizing olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.

Bir voice_name örnek atayarak sentez sesini belirtin ve sesi almak için olay için Synthesizing bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.

Önemli

Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin voice_name hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de" ile eşlenebilir "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()

El ile sentez

Çeviri metninden translations ses sentezlemek için sözlüğü kullanabilirsiniz. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer örnek oluştururken nesnenin özelliğinin SpeechConfig istenen sese ayarlanmış olması gerekir speech_synthesis_voice_name .

Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.

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

Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.

Dil belirleme ile çok dilli çeviri

Birçok senaryoda, hangi giriş dillerini belirtebileceğinizi bilmiyor olabilirsiniz. Dil belirlemeyi kullanarak en fazla 10 olası giriş dili algılayabilir ve otomatik olarak hedef dillerinize çevirebilirsiniz.

Eksiksiz bir kod örneği için bkz . dil belirleme.

Konuşmayı metne dönüştürme REST API başvurusu | Kısa ses başvurusu için metin REST API'sine konuşma | GitHub'da Ek Örnekler

Konuşma çevirisi için REST API'yi kullanabilirsiniz, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin.

Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.

Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:

  • Konuşmayı metne çevirme
  • Konuşmayı birden çok hedef dile çevirme
  • Konuşma çevirisine doğrudan konuşma gerçekleştirme

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun.
  • Azure portalında konuşma kaynağı oluşturun.
  • Konuşma kaynak anahtarınız ve bölgeniz. Konuşma kaynağınız dağıtıldıktan sonra anahtarları görüntülemek ve yönetmek için Kaynağa git'i seçin. Azure AI hizmetleri kaynakları hakkında daha fazla bilgi için bkz . Kaynağınızın anahtarlarını alma.

İndirme ve kurma

Bu adımları izleyin ve platformunuzun diğer gereksinimleri için Konuşma CLI'sı hızlı başlangıcına bakın.

  1. Konuşma CLI'sını yüklemek için aşağıdaki .NET CLI komutunu çalıştırın:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    
  2. Konuşma kaynak anahtarınızı ve bölgenizi yapılandırmak için aşağıdaki komutları çalıştırın. değerini SUBSCRIPTION-KEY Konuşma kaynak anahtarınızla, değerini de Konuşma kaynağı bölgenizle değiştirin REGION .

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

Kaynak ve hedef dilleri ayarlama

Bu komut, konuşmayı mikrofondan İtalyancadan Fransızcaya çevirmek için Konuşma CLI'sini çağırır:

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

Sonraki adımlar