Como reconhecer e traduzir a fala
Pacote de documentação | de referência (NuGet) | Exemplos adicionais no GitHub
Neste guia de instruções, você aprende a reconhecer a fala humana e traduzi-la para outro idioma.
Consulte a visão geral da tradução de fala para obter mais informações sobre:
- Traduzir fala em texto
- Tradução de fala para vários idiomas de destino
- Realizar tradução direta de fala para fala
Dados confidenciais e variáveis de ambiente
O código-fonte de exemplo neste artigo depende de variáveis de ambiente para armazenar dados confidenciais, como a chave e a região do recurso de fala. A Program
classe contém dois static readonly string
valores atribuídos a partir das variáveis de ambiente da máquina host: SPEECH__SUBSCRIPTION__KEY
e SPEECH__SERVICE__REGION
. Ambos os campos estão no escopo da classe, portanto, são acessíveis dentro dos corpos de método da classe:
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;
}
Para obter mais informações sobre variáveis de ambiente, consulte Variáveis de ambiente e configuração de aplicativos.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
Criar uma configuração de tradução de fala
Para chamar o serviço de Fala usando o SDK de Fala, você precisa criar uma SpeechTranslationConfig
instância. Essa classe inclui informações sobre sua assinatura, como sua chave e região associada, ponto de extremidade, host ou token de autorização.
Gorjeta
Independentemente de você estar executando reconhecimento de fala, síntese de fala, tradução ou reconhecimento de intenção, você sempre criará uma configuração.
Você pode inicializar SpeechTranslationConfig
de algumas maneiras:
- Com uma assinatura: passe uma chave e a região associada.
- Com um ponto de extremidade: passe em um ponto de extremidade do serviço de fala. Uma chave ou token de autorização é opcional.
- Com um anfitrião: passe em um endereço de host. Uma chave ou token de autorização é opcional.
- Com um token de autorização: passe um token de autorização e a região associada.
Vamos ver como você cria uma SpeechTranslationConfig
instância usando uma chave e uma região. Obtenha a chave de recurso de Fala e a região no portal do Azure.
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);
}
}
Alterar o idioma de partida
Uma tarefa comum da tradução de fala é especificar o idioma de entrada (ou fonte). O exemplo a seguir mostra como você alteraria o idioma de entrada para italiano. Em seu código, interaja com a SpeechTranslationConfig
instância atribuindo-a SpeechRecognitionLanguage
à propriedade:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
}
A SpeechRecognitionLanguage
propriedade espera uma cadeia de caracteres de formato de localidade de idioma. Consulte a lista de localidades de tradução de fala suportadas.
Adicionar um idioma de tradução
Outra tarefa comum da tradução de fala é especificar os idiomas de tradução de destino. Pelo menos um é necessário, mas múltiplos são suportados. O trecho de código a seguir define o francês e o alemão como destinos de idioma de tradução:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
speechTranslationConfig.AddTargetLanguage("fr");
speechTranslationConfig.AddTargetLanguage("de");
}
A cada chamada para AddTargetLanguage
o , um novo idioma de tradução de destino é especificado. Por outras palavras, quando a fala é reconhecida a partir da língua de partida, cada tradução de destino está disponível como parte da operação de tradução resultante.
Inicializar um reconhecedor de tradução
Depois de criar uma SpeechTranslationConfig
instância, a próxima etapa é inicializar TranslationRecognizer
o . Ao inicializar TranslationRecognizer
o , você precisa passar sua speechTranslationConfig
instância. O objeto de configuração fornece as credenciais que o serviço de Fala requer para validar sua solicitação.
Se você estiver reconhecendo a fala usando o microfone padrão do dispositivo, veja como a TranslationRecognizer
ocorrência deve parecer:
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);
}
Se você quiser especificar o dispositivo de entrada de áudio, precisará criar uma instância de AudioConfig
classe e fornecer o audioConfig
parâmetro ao inicializar TranslationRecognizer
o .
Gorjeta
Saiba como obter o ID do dispositivo para o seu dispositivo de entrada de áudio.
Primeiro, faça referência ao AudioConfig
objeto da seguinte forma:
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);
}
Se você quiser fornecer um arquivo de áudio em vez de usar um microfone, ainda precisará fornecer um audioConfig
parâmetro. No entanto, quando você cria uma AudioConfig
instância de classe, em vez de chamar FromDefaultMicrophoneInput
, você chama FromWavFileInput
e passa o filename
parâmetro:
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);
}
Traduzir voz
Para traduzir voz, o SDK de Voz recorre a uma entrada de ficheiro áudio ou microfone. O reconhecimento de voz ocorre antes da tradução de voz. Depois que todos os objetos forem inicializados, chame a função recognize-once e obtenha o resultado:
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}");
}
}
}
Para obter mais informações sobre conversão de fala em texto, consulte as noções básicas de reconhecimento de fala.
Tradução baseada em eventos
O TranslationRecognizer
objeto expõe um Recognizing
evento. O evento é acionado várias vezes e fornece um mecanismo para recuperar os resultados de tradução intermediários.
Nota
Os resultados da tradução intermédia não estão disponíveis quando utiliza a tradução de voz multilingue.
O exemplo a seguir imprime os resultados de tradução intermediários no console:
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);
}
}
Sintetizar traduções
Após um reconhecimento de voz bem-sucedido e respetiva tradução, o resultado contém todas as traduções num dicionário. A Translations
chave do dicionário é o idioma de tradução de destino e o valor é o texto traduzido. A fala reconhecida pode ser traduzida e, em seguida, sintetizada em um idioma diferente (speech-to-speech).
Síntese baseada em eventos
O TranslationRecognizer
objeto expõe um Synthesizing
evento. O evento é acionado várias vezes e fornece um mecanismo para recuperar o áudio sintetizado do resultado do reconhecimento de tradução. Se estiver a traduzir para vários idiomas, consulte Síntese manual.
Especifique a voz de síntese atribuindo uma VoiceName
instância e forneça um manipulador de eventos para que o Synthesizing
evento obtenha o áudio. O exemplo a seguir salva o áudio traduzido como um arquivo .wav.
Importante
A síntese baseada em eventos funciona apenas com uma única tradução. Não adicione vários idiomas de tradução de destino. Além disso, o VoiceName
valor deve ser o mesmo idioma que o idioma de tradução de destino. Por exemplo, "de"
poderia mapear para "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]}");
}
}
Síntese manual
Você pode usar o Translations
dicionário para sintetizar o áudio do texto de tradução. Itere através de cada tradução e sintetize-a. Quando você está criando uma SpeechSynthesizer
instância, o SpeechConfig
objeto precisa ter sua SpeechSynthesisVoiceName
propriedade definida para a voz desejada.
O exemplo a seguir se traduz para cinco idiomas. Cada tradução é então sintetizada em um arquivo de áudio na linguagem neural correspondente.
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);
}
}
}
Para obter mais informações sobre síntese de fala, consulte as noções básicas de síntese de fala.
Tradução multilingue com identificação linguística
Em muitos cenários, talvez você não saiba quais idiomas de entrada especificar. Usando a identificação de idioma, você pode detetar até 10 idiomas de entrada possíveis e traduzir automaticamente para seus idiomas de destino.
O exemplo a seguir antecipa isso en-US
ou zh-CN
deve ser detetado porque eles são definidos em AutoDetectSourceLanguageConfig
. Em seguida, o discurso é traduzido para de
e fr
conforme especificado nas chamadas para AddTargetLanguage()
.
speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Para obter um exemplo de código completo, consulte Identificação de idioma.
Tradução de fala multilingue sem candidatos à língua de partida
A tradução de fala multilíngue implementa um novo nível de tecnologia de tradução de fala que desbloqueia vários recursos, incluindo não ter um idioma de entrada especificado e lidar com comutadores de idioma dentro da mesma sessão. Esses recursos permitem um novo nível de poderes de tradução de fala que podem ser implementados em seus produtos.
Atualmente, quando você usa Language ID com tradução de fala, você deve criar o SpeechTranslationConfig
objeto a partir do ponto de extremidade v2. Substitua a cadeia de caracteres "YourServiceRegion" pela região de recurso de Fala (como "westus"). Substitua "YourSubscriptionKey" pela sua chave de recurso de fala.
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");
Especificar as línguas de chegada da tradução. Substitua por idiomas de sua escolha. Você pode adicionar mais linhas.
config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");
Um dos principais diferenciais da tradução de fala multilíngue é que você não precisa especificar o idioma de origem. Isso ocorre porque o serviço detetará automaticamente o idioma de origem. Crie o AutoDetectSourceLanguageConfig
objeto com o fromOpenRange
método para informar ao serviço que você deseja usar tradução de fala multilíngue sem idioma de origem especificado.
AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange();
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Para obter um exemplo de código completo com o SDK de fala, consulte Exemplos de tradução de fala no GitHub.
Usando a tradução personalizada na tradução de fala
A funcionalidade de tradução personalizada na tradução de voz integra-se perfeitamente com o serviço de Tradução Personalizada do Azure, permitindo-lhe obter traduções mais precisas e personalizadas. Como a integração aproveita diretamente os recursos do serviço de tradução personalizada do Azure, você precisa usar um recurso multisserviço para garantir o funcionamento correto do conjunto completo de recursos. Para obter instruções detalhadas, consulte o guia sobre Criar um recurso multisserviço para serviços de IA do Azure.
Além disso, para treinamento offline de um tradutor personalizado e obtenção de uma "ID de categoria", consulte o script passo a passo fornecido no Guia de início rápido: compilar, implantar e usar um modelo personalizado - Tradutor personalizado.
// Creates an instance of a translation recognizer using speech translation configuration
// You should use the same subscription key, which you used to generate the custom model before.
// V2 endpoint is required for the “Custom Translation” feature. Example: "wss://westcentralus.stt.speech.microsoft.com/speech/universal/v2"
try (SpeechTranslationConfig config = SpeechTranslationConfig.fromEndpoint(URI.create(endpointUrl), speechSubscriptionKey)) {
// Sets source and target language(s).
….
// Set the category id
config.setCustomModelCategoryId("yourCategoryId");
….
}
Pacote de documentação | de referência (NuGet) | Exemplos adicionais no GitHub
Neste guia de instruções, você aprende a reconhecer a fala humana e traduzi-la para outro idioma.
Consulte a visão geral da tradução de fala para obter mais informações sobre:
- Traduzir fala em texto
- Tradução de fala para vários idiomas de destino
- Realizar tradução direta de fala para fala
Dados confidenciais e variáveis de ambiente
O código-fonte de exemplo neste artigo depende de variáveis de ambiente para armazenar dados confidenciais, como a chave e a região do recurso de fala. O arquivo de código C++ contém dois valores de cadeia de caracteres atribuídos a partir das variáveis de ambiente da máquina host: SPEECH__SUBSCRIPTION__KEY
e SPEECH__SERVICE__REGION
. Ambos os campos estão no escopo da classe, portanto, são acessíveis dentro dos corpos de método da classe:
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
Para obter mais informações sobre variáveis de ambiente, consulte Variáveis de ambiente e configuração de aplicativos.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
Criar uma configuração de tradução de fala
Para chamar o serviço de Fala usando o SDK de Fala, você precisa criar uma SpeechTranslationConfig
instância. Essa classe inclui informações sobre sua assinatura, como sua chave e região associada, ponto de extremidade, host ou token de autorização.
Gorjeta
Independentemente de você estar executando reconhecimento de fala, síntese de fala, tradução ou reconhecimento de intenção, você sempre criará uma configuração.
Você pode inicializar SpeechTranslationConfig
de algumas maneiras:
- Com uma assinatura: passe uma chave e a região associada.
- Com um ponto de extremidade: passe em um ponto de extremidade do serviço de fala. Uma chave ou token de autorização é opcional.
- Com um anfitrião: passe em um endereço de host. Uma chave ou token de autorização é opcional.
- Com um token de autorização: passe um token de autorização e a região associada.
Vamos ver como você cria uma SpeechTranslationConfig
instância usando uma chave e uma região. Obtenha a chave de recurso de Fala e a região no portal do Azure.
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;
}
Alterar o idioma de partida
Uma tarefa comum da tradução de fala é especificar o idioma de entrada (ou fonte). O exemplo a seguir mostra como você alteraria o idioma de entrada para italiano. Em seu código, interaja com a SpeechTranslationConfig
instância chamando o SetSpeechRecognitionLanguage
método.
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
}
A SpeechRecognitionLanguage
propriedade espera uma cadeia de caracteres de formato de localidade de idioma. Consulte a lista de localidades de tradução de fala suportadas.
Adicionar um idioma de tradução
Outra tarefa comum da tradução de fala é especificar os idiomas de tradução de destino. Pelo menos um é necessário, mas múltiplos são suportados. O trecho de código a seguir define o francês e o alemão como destinos de idioma de tradução:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
speechTranslationConfig->AddTargetLanguage("fr");
speechTranslationConfig->AddTargetLanguage("de");
}
A cada chamada para AddTargetLanguage
o , um novo idioma de tradução de destino é especificado. Por outras palavras, quando a fala é reconhecida a partir da língua de partida, cada tradução de destino está disponível como parte da operação de tradução resultante.
Inicializar um reconhecedor de tradução
Depois de criar uma SpeechTranslationConfig
instância, a próxima etapa é inicializar TranslationRecognizer
o . Ao inicializar TranslationRecognizer
o , você precisa passar sua translationConfig
instância. O objeto de configuração fornece as credenciais que o serviço de Fala requer para validar sua solicitação.
Se você estiver reconhecendo a fala usando o microfone padrão do seu dispositivo, veja como TranslationRecognizer
deve ser:
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);
}
Se você quiser especificar o dispositivo de entrada de áudio, precisará criar uma instância de AudioConfig
classe e fornecer o audioConfig
parâmetro ao inicializar TranslationRecognizer
o .
Gorjeta
Saiba como obter o ID do dispositivo para o seu dispositivo de entrada de áudio.
Primeiro, faça referência ao AudioConfig
objeto da seguinte forma:
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);
}
Se você quiser fornecer um arquivo de áudio em vez de usar um microfone, ainda precisará fornecer um audioConfig
parâmetro. No entanto, quando você cria uma AudioConfig
instância de classe, em vez de chamar FromDefaultMicrophoneInput
, você chama FromWavFileInput
e passa o filename
parâmetro:
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);
}
Traduzir voz
Para traduzir voz, o SDK de Voz recorre a uma entrada de ficheiro áudio ou microfone. O reconhecimento de voz ocorre antes da tradução de voz. Depois que todos os objetos forem inicializados, chame a função recognize-once e obtenha o resultado:
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;
}
}
}
Para obter mais informações sobre conversão de fala em texto, consulte as noções básicas de reconhecimento de fala.
Sintetizar traduções
Após um reconhecimento de voz bem-sucedido e respetiva tradução, o resultado contém todas as traduções num dicionário. A Translations
chave do dicionário é o idioma de tradução de destino e o valor é o texto traduzido. A fala reconhecida pode ser traduzida e, em seguida, sintetizada em um idioma diferente (speech-to-speech).
Síntese baseada em eventos
O TranslationRecognizer
objeto expõe um Synthesizing
evento. O evento é acionado várias vezes e fornece um mecanismo para recuperar o áudio sintetizado do resultado do reconhecimento de tradução. Se estiver a traduzir para vários idiomas, consulte Síntese manual.
Especifique a voz de síntese atribuindo uma SetVoiceName
instância e forneça um manipulador de eventos para que o Synthesizing
evento obtenha o áudio. O exemplo a seguir salva o áudio traduzido como um arquivo .wav.
Importante
A síntese baseada em eventos funciona apenas com uma única tradução. Não adicione vários idiomas de tradução de destino. Além disso, o SetVoiceName
valor deve ser o mesmo idioma que o idioma de tradução de destino. Por exemplo, "de"
poderia mapear para "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;
}
}
}
Síntese manual
Você pode usar o Translations
dicionário para sintetizar o áudio do texto de tradução. Itere através de cada tradução e sintetize-a. Quando você está criando uma SpeechSynthesizer
instância, o SpeechConfig
objeto precisa ter sua SetSpeechSynthesisVoiceName
propriedade definida para a voz desejada.
O exemplo a seguir se traduz para cinco idiomas. Cada tradução é então sintetizada em um arquivo de áudio na linguagem neural correspondente.
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();
}
}
}
Para obter mais informações sobre síntese de fala, consulte as noções básicas de síntese de fala.
Tradução multilingue com identificação linguística
Em muitos cenários, talvez você não saiba quais idiomas de entrada especificar. Usando a identificação de idioma, você pode detetar até 10 idiomas de entrada possíveis e traduzir automaticamente para seus idiomas de destino.
O exemplo a seguir antecipa isso en-US
ou zh-CN
deve ser detetado porque eles são definidos em AutoDetectSourceLanguageConfig
. Em seguida, o discurso será traduzido para de
e fr
conforme especificado nas chamadas para AddTargetLanguage()
.
speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Para obter um exemplo de código completo, consulte Identificação de idioma.
Pacote de documentação | de referência (Go) | Amostras adicionais no GitHub
O SDK de Fala para Go não oferece suporte à tradução de fala. Selecione outra linguagem de programação ou a referência Go e exemplos vinculados desde o início deste artigo.
Documentação | de referência Exemplos adicionais no GitHub
Neste guia de instruções, você aprende a reconhecer a fala humana e traduzi-la para outro idioma.
Consulte a visão geral da tradução de fala para obter mais informações sobre:
- Traduzir fala em texto
- Tradução de fala para vários idiomas de destino
- Realizar tradução direta de fala para fala
Dados confidenciais e variáveis de ambiente
O código-fonte de exemplo neste artigo depende de variáveis de ambiente para armazenar dados confidenciais, como a chave e a região do recurso de fala. O arquivo de código Java contém dois static final String
valores que são atribuídos a partir das variáveis de ambiente da máquina host: SPEECH__SUBSCRIPTION__KEY
e SPEECH__SERVICE__REGION
. Ambos os campos estão no escopo da classe, portanto, são acessíveis dentro dos corpos de método da classe:
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) { }
}
Para obter mais informações sobre variáveis de ambiente, consulte Variáveis de ambiente e configuração de aplicativos.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
Criar uma configuração de tradução de fala
Para chamar o serviço de Fala usando o SDK de Fala, você precisa criar uma SpeechTranslationConfig
instância. Essa classe inclui informações sobre sua assinatura, como sua chave e região associada, ponto de extremidade, host ou token de autorização.
Gorjeta
Independentemente de você estar executando reconhecimento de fala, síntese de fala, tradução ou reconhecimento de intenção, você sempre criará uma configuração.
Você pode inicializar uma SpeechTranslationConfig
instância de algumas maneiras:
- Com uma assinatura: passe uma chave e a região associada.
- Com um ponto de extremidade: passe em um ponto de extremidade do serviço de fala. Uma chave ou token de autorização é opcional.
- Com um anfitrião: passe em um endereço de host. Uma chave ou token de autorização é opcional.
- Com um token de autorização: passe um token de autorização e a região associada.
Vamos ver como você cria uma SpeechTranslationConfig
instância usando uma chave e uma região. Obtenha a chave de recurso de Fala e a região no portal do Azure.
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);
}
}
Alterar o idioma de partida
Uma tarefa comum da tradução de fala é especificar o idioma de entrada (ou fonte). O exemplo a seguir mostra como você alteraria o idioma de entrada para italiano. Em seu código, interaja com a SpeechTranslationConfig
instância chamando o setSpeechRecognitionLanguage
método:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
}
A setSpeechRecognitionLanguage
função espera uma cadeia de caracteres de formato idioma-localidade. Consulte a lista de localidades de tradução de fala suportadas.
Adicionar um idioma de tradução
Outra tarefa comum da tradução de fala é especificar os idiomas de tradução de destino. Pelo menos um é necessário, mas múltiplos são suportados. O trecho de código a seguir define o francês e o alemão como destinos de idioma de tradução:
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");
}
A cada chamada para addTargetLanguage
o , um novo idioma de tradução de destino é especificado. Por outras palavras, quando a fala é reconhecida a partir da língua de partida, cada tradução de destino está disponível como parte da operação de tradução resultante.
Inicializar um reconhecedor de tradução
Depois de criar uma SpeechTranslationConfig
instância, a próxima etapa é inicializar TranslationRecognizer
o . Ao inicializar TranslationRecognizer
o , você precisa passar sua speechTranslationConfig
instância. O objeto de configuração fornece as credenciais que o serviço de Fala requer para validar sua solicitação.
Se você estiver reconhecendo a fala usando o microfone padrão do seu dispositivo, veja como TranslationRecognizer
deve ser:
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)) {
}
}
Se você quiser especificar o dispositivo de entrada de áudio, precisará criar uma instância de AudioConfig
classe e fornecer o audioConfig
parâmetro ao inicializar TranslationRecognizer
o .
Gorjeta
Saiba como obter o ID do dispositivo para o seu dispositivo de entrada de áudio.
Primeiro, faça referência ao AudioConfig
objeto da seguinte forma:
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)) {
}
}
Se você quiser fornecer um arquivo de áudio em vez de usar um microfone, ainda precisará fornecer um audioConfig
parâmetro. No entanto, quando você cria uma AudioConfig
instância de classe, em vez de chamar fromDefaultMicrophoneInput
, você chama fromWavFileInput
e passa o filename
parâmetro:
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)) {
}
}
Traduzir voz
Para traduzir voz, o SDK de Voz recorre a uma entrada de ficheiro áudio ou microfone. O reconhecimento de voz ocorre antes da tradução de voz. Depois que todos os objetos forem inicializados, chame a função recognize-once e obtenha o resultado:
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 translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
System.out.printf("Translated into '%s': %s\n", pair.getKey(), pair.getValue());
}
}
}
}
Para obter mais informações sobre conversão de fala em texto, consulte as noções básicas de reconhecimento de fala.
Sintetizar traduções
Após um reconhecimento de voz bem-sucedido e respetiva tradução, o resultado contém todas as traduções num dicionário. A getTranslations
função retorna um dicionário com a chave como o idioma de tradução de destino e o valor como o texto traduzido. A fala reconhecida pode ser traduzida e, em seguida, sintetizada em um idioma diferente (speech-to-speech).
Síntese baseada em eventos
O TranslationRecognizer
objeto expõe um synthesizing
evento. O evento é acionado várias vezes e fornece um mecanismo para recuperar o áudio sintetizado do resultado do reconhecimento de tradução. Se estiver a traduzir para vários idiomas, consulte Síntese manual.
Especifique a voz de síntese atribuindo uma setVoiceName
instância e forneça um manipulador de eventos para que o synthesizing
evento obtenha o áudio. O exemplo a seguir salva o áudio traduzido como um arquivo .wav.
Importante
A síntese baseada em eventos funciona apenas com uma única tradução. Não adicione vários idiomas de tradução de destino. Além disso, o setVoiceName
valor deve ser o mesmo idioma que o idioma de tradução de destino. Por exemplo, "de"
poderia mapear para "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 translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
String language = pair.getKey();
String translation = pair.getValue();
System.out.printf("Translated into '%s': %s\n", language, translation);
}
}
}
}
Síntese manual
A getTranslations
função retorna um dicionário que você pode usar para sintetizar o áudio do texto de tradução. Itere através de cada tradução e sintetize-a. Quando você está criando uma SpeechSynthesizer
instância, o SpeechConfig
objeto precisa ter sua setSpeechSynthesisVoiceName
propriedade definida para a voz desejada.
O exemplo a seguir se traduz para cinco idiomas. Cada tradução é então sintetizada em um arquivo de áudio na linguagem neural correspondente.
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 translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
if (translationRecognitionResult.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", translationRecognitionResult.getText());
for (Map.Entry<String, String> pair : translationRecognitionResult.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();
}
}
}
}
}
Para obter mais informações sobre síntese de fala, consulte as noções básicas de síntese de fala.
Pacote de documentação | de referência (npm) | Exemplos adicionais no código-fonte da Biblioteca GitHub |
Neste guia de instruções, você aprende a reconhecer a fala humana e traduzi-la para outro idioma.
Consulte a visão geral da tradução de fala para obter mais informações sobre:
- Traduzir fala em texto
- Tradução de fala para vários idiomas de destino
- Realizar tradução direta de fala para fala
Criar uma configuração de tradução
Para chamar o serviço de tradução usando o SDK de fala, você precisa criar uma SpeechTranslationConfig
instância. Essa classe inclui informações sobre sua assinatura, como sua chave e região associada, ponto de extremidade, host ou token de autorização.
Nota
Independentemente de você estar executando reconhecimento de fala, síntese de fala, tradução ou reconhecimento de intenção, você sempre criará uma configuração.
Você pode inicializar SpeechTranslationConfig
de algumas maneiras:
- Com uma assinatura: passe uma chave e a região associada.
- Com um ponto de extremidade: passe em um ponto de extremidade do serviço de fala. Uma chave ou token de autorização é opcional.
- Com um anfitrião: passe em um endereço de host. Uma chave ou token de autorização é opcional.
- Com um token de autorização: passe um token de autorização e a região associada.
Vamos ver como você cria uma SpeechTranslationConfig
instância usando uma chave e uma região. Obtenha a chave de recurso de Fala e a região no portal do Azure.
const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
Inicializar um tradutor
Depois de criar uma SpeechTranslationConfig
instância, a próxima etapa é inicializar TranslationRecognizer
o . Ao inicializar TranslationRecognizer
o , você precisa passar sua speechTranslationConfig
instância. O objeto de configuração fornece as credenciais que o serviço de tradução requer para validar sua solicitação.
Se estiver a traduzir a voz fornecida através do microfone predefinido do seu dispositivo, eis o aspeto TranslationRecognizer
que deve ter:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Se você quiser especificar o dispositivo de entrada de áudio, precisará criar uma instância de AudioConfig
classe e fornecer o audioConfig
parâmetro ao inicializar TranslationRecognizer
o .
Gorjeta
Saiba como obter o ID do dispositivo para o seu dispositivo de entrada de áudio.
Faça referência ao AudioConfig
objeto da seguinte forma:
const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Se você quiser fornecer um arquivo de áudio em vez de usar um microfone, ainda precisará fornecer um audioConfig
parâmetro. No entanto, você pode fazer isso apenas quando estiver segmentando Node.js. Quando você cria uma AudioConfig
instância de classe, em vez de chamar fromDefaultMicrophoneInput
, você chama fromWavFileOutput
e passa o filename
parâmetro:
const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Traduzir voz
A classe TranslationRecognizer para o SDK de fala para JavaScript expõe métodos que você pode usar para tradução de fala:
- Tradução de captura única (assíncrona): Executa a tradução em um modo sem bloqueio (assíncrono). Traduz um único enunciado. Determina o fim de um único enunciado ouvindo o silêncio no final ou até que um máximo de 15 segundos de áudio seja processado.
- Tradução contínua (assíncrona): Inicia de forma assíncrona uma operação de tradução contínua. O usuário se registra em eventos e lida com vários estados do aplicativo. Para interromper a tradução contínua assíncrona, chame
stopContinuousRecognitionAsync
.
Para saber mais sobre como escolher um modo de reconhecimento de voz, consulte Introdução à conversão de voz em texto.
Especificar uma língua de chegada
Para traduzir, tem de especificar uma língua de partida e, pelo menos, uma língua de chegada.
Você pode escolher um idioma de origem usando uma localidade listada na tabela Tradução de fala. Encontre as suas opções de idioma traduzido no mesmo link.
Suas opções para os idiomas de destino diferem quando você deseja visualizar texto ou ouvir fala traduzida sintetizada. Para traduzir do inglês para o alemão, modifique o objeto de configuração da tradução:
speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");
Reconhecimento de tiro único
Aqui está um exemplo de tradução assíncrona de captura única via recognizeOnceAsync
:
translationRecognizer.recognizeOnceAsync(result => {
// Interact with result
});
Você precisa escrever algum código para lidar com o resultado. Este exemplo avalia result.reason
uma tradução para alemão:
translationRecognizer.recognizeOnceAsync(
function (result) {
let translation = result.translations.get("de");
window.console.log(translation);
translationRecognizer.close();
},
function (err) {
window.console.log(err);
translationRecognizer.close();
});
Seu código também pode lidar com atualizações fornecidas enquanto a tradução está sendo processada. Você pode usar essas atualizações para fornecer feedback visual sobre o progresso da tradução. Este exemplo de Node.js JavaScript mostra esses tipos de atualizações. O código a seguir também exibe detalhes produzidos durante o processo de tradução:
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);
};
Tradução contínua
A tradução contínua é um pouco mais envolvida do que o reconhecimento de uma única foto. Ele requer que você se inscreva no recognizing
, recognized
e canceled
eventos para obter os resultados de reconhecimento. Para interromper a tradução, você deve ligar para stopContinuousRecognitionAsync
.
Aqui está um exemplo de como a tradução contínua é realizada em um arquivo de entrada de áudio. Vamos começar definindo a entrada e inicializando TranslationRecognizer
:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
No código a seguir, você se inscreve nos eventos enviados de TranslationRecognizer
:
recognizing
: Sinal para eventos que contêm resultados de tradução intermediários.recognized
: Sinal para eventos que contêm resultados finais de tradução. Estes resultados indicam uma tentativa de tradução bem-sucedida.sessionStopped
: Sinal para eventos que indicam o fim de uma sessão de tradução (operação).canceled
: Sinal para eventos que contêm resultados de tradução cancelados. Esses eventos indicam uma tentativa de tradução que foi cancelada como resultado de um cancelamento direto. Como alternativa, indicam uma falha de transporte ou protocolo.
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();
};
Com tudo configurado, você pode chamar startContinuousRecognitionAsync
:
// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();
Escolha uma língua de partida
Uma tarefa comum para a tradução de fala é especificar o idioma de entrada (ou fonte). O exemplo a seguir mostra como você alteraria o idioma de entrada para italiano. Em seu código, localize sua SpeechTranslationConfig
instância e adicione a seguinte linha diretamente abaixo dela:
speechTranslationConfig.speechRecognitionLanguage = "it-IT";
A speechRecognitionLanguage
propriedade espera uma cadeia de caracteres de formato de localidade de idioma. Consulte a lista de localidades de tradução de fala suportadas.
Escolha uma ou mais línguas de chegada
O SDK de fala pode traduzir para vários idiomas de destino em paralelo. As línguas de chegada disponíveis são um pouco diferentes da lista de línguas de partida. Você especifica os idiomas de destino usando um código de idioma, em vez de uma localidade.
Para obter uma lista de códigos de idioma para destinos de texto, consulte a tabela de tradução de fala na página de suporte a idiomas. Você também pode encontrar detalhes sobre a tradução para idiomas sintetizados lá.
O código a seguir adiciona o alemão como idioma de destino:
speechTranslationConfig.addTargetLanguage("de");
Como várias traduções no idioma de destino são possíveis, seu código deve especificar o idioma de destino ao examinar o resultado. O código a seguir obtém resultados de tradução para alemão:
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
};
Pacote de documentação | de referência (download) | Exemplos adicionais no GitHub
O SDK de fala para Objective-C suporta tradução de fala, mas ainda não incluímos um guia aqui. Selecione outra linguagem de programação para começar e aprender sobre os conceitos, ou veja a referência Objective-C e exemplos vinculados desde o início deste artigo.
Pacote de documentação | de referência (download) | Exemplos adicionais no GitHub
O Speech SDK for Swift suporta tradução de fala, mas ainda não incluímos um guia aqui. Selecione outra linguagem de programação para começar e aprender sobre os conceitos, ou veja a referência Swift e exemplos vinculados desde o início deste artigo.
Pacote de documentação | de referência (PyPi) | Amostras adicionais no GitHub
Neste guia de instruções, você aprende a reconhecer a fala humana e traduzi-la para outro idioma.
Consulte a visão geral da tradução de fala para obter mais informações sobre:
- Traduzir fala em texto
- Tradução de fala para vários idiomas de destino
- Realizar tradução direta de fala para fala
Dados confidenciais e variáveis de ambiente
O código-fonte de exemplo neste artigo depende de variáveis de ambiente para armazenar dados confidenciais, como a chave de assinatura e a região do recurso de fala. O arquivo de código Python contém dois valores que são atribuídos a partir das variáveis de ambiente da máquina host: SPEECH__SUBSCRIPTION__KEY
e SPEECH__SERVICE__REGION
. Ambas as variáveis estão no escopo global, portanto, estão acessíveis dentro da definição de função do arquivo de código:
speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']
Para obter mais informações sobre variáveis de ambiente, consulte Variáveis de ambiente e configuração de aplicativos.
Importante
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Cofre de Chaves do Azure. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança de serviços de IA, consulte Autenticar solicitações para serviços de IA do Azure.
Criar uma configuração de tradução de fala
Para chamar o serviço de Fala usando o SDK de Fala, você precisa criar uma SpeechTranslationConfig
instância. Essa classe inclui informações sobre sua assinatura, como sua chave e região associada, ponto de extremidade, host ou token de autorização.
Gorjeta
Independentemente de você estar executando reconhecimento de fala, síntese de fala, tradução ou reconhecimento de intenção, você sempre criará uma configuração.
Você pode inicializar SpeechTranslationConfig
de algumas maneiras:
- Com uma assinatura: passe uma chave e a região associada.
- Com um ponto de extremidade: passe em um ponto de extremidade do serviço de fala. Uma chave ou token de autorização é opcional.
- Com um anfitrião: passe em um endereço de host. Uma chave ou token de autorização é opcional.
- Com um token de autorização: passe um token de autorização e a região associada.
Vamos ver como você pode criar uma SpeechTranslationConfig
instância usando uma chave e uma região. Obtenha a chave de recurso de Fala e a região no portal do Azure.
from_language, to_language = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
Alterar o idioma de partida
Uma tarefa comum da tradução de fala é especificar o idioma de entrada (ou fonte). O exemplo a seguir mostra como você alteraria o idioma de entrada para italiano. Em seu código, interaja com a SpeechTranslationConfig
instância atribuindo-a speech_recognition_language
à propriedade.
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
A speech_recognition_language
propriedade espera uma cadeia de caracteres de formato de localidade de idioma. Consulte a lista de localidades de tradução de fala suportadas.
Adicionar um idioma de tradução
Outra tarefa comum da tradução de fala é especificar os idiomas de tradução de destino. Pelo menos um é necessário, mas múltiplos são suportados. O trecho de código a seguir define o francês e o alemão como destinos de idioma de tradução:
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")
A cada chamada para add_target_language
o , um novo idioma de tradução de destino é especificado. Por outras palavras, quando a fala é reconhecida a partir da língua de partida, cada tradução de destino está disponível como parte da operação de tradução resultante.
Inicializar um reconhecedor de tradução
Depois de criar uma SpeechTranslationConfig
instância, a próxima etapa é inicializar TranslationRecognizer
o . Ao inicializar TranslationRecognizer
o , você precisa passar sua translation_config
instância. O objeto de configuração fornece as credenciais que o serviço de Fala requer para validar sua solicitação.
Se você estiver reconhecendo a fala usando o microfone padrão do seu dispositivo, veja como TranslationRecognizer
deve ser:
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)
Se você quiser especificar o dispositivo de entrada de áudio, precisará criar uma instância de AudioConfig
classe e fornecer o audio_config
parâmetro ao inicializar TranslationRecognizer
o .
Gorjeta
Saiba como obter o ID do dispositivo para o seu dispositivo de entrada de áudio.
Primeiro, faça referência ao AudioConfig
objeto da seguinte forma:
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)
Se você quiser fornecer um arquivo de áudio em vez de usar um microfone, ainda precisará fornecer um audioConfig
parâmetro. No entanto, quando você cria uma AudioConfig
instância de classe, em vez de chamar com use_default_microphone=True
, você chama com filename="path-to-file.wav"
e fornece o filename
parâmetro:
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)
Traduzir voz
Para traduzir voz, o SDK de Voz recorre a uma entrada de ficheiro áudio ou microfone. O reconhecimento de voz ocorre antes da tradução de voz. Depois que todos os objetos forem inicializados, chame a função recognize-once e obtenha o resultado:
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...')
translation_recognition_result = translation_recognizer.recognize_once()
print(get_result_text(reason=translation_recognition_result.reason, result=translation_recognition_result))
def get_result_text(reason, translation_recognition_result):
reason_format = {
speechsdk.ResultReason.TranslatedSpeech:
f'RECOGNIZED "{from_language}": {translation_recognition_result.text}\n' +
f'TRANSLATED into "{to_language}"": {translation_recognition_result.translations[to_language]}',
speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{translation_recognition_result.text}"',
speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {translation_recognition_result.no_match_details}',
speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {translation_recognition_result.cancellation_details}'
}
return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()
Para obter mais informações sobre conversão de fala em texto, consulte as noções básicas de reconhecimento de fala.
Sintetizar traduções
Após um reconhecimento de voz bem-sucedido e respetiva tradução, o resultado contém todas as traduções num dicionário. A translations
chave do dicionário é o idioma de tradução de destino e o valor é o texto traduzido. A fala reconhecida pode ser traduzida e, em seguida, sintetizada em um idioma diferente (speech-to-speech).
Síntese baseada em eventos
O TranslationRecognizer
objeto expõe um Synthesizing
evento. O evento é acionado várias vezes e fornece um mecanismo para recuperar o áudio sintetizado do resultado do reconhecimento de tradução. Se estiver a traduzir para vários idiomas, consulte Síntese manual.
Especifique a voz de síntese atribuindo uma voice_name
instância e forneça um manipulador de eventos para que o Synthesizing
evento obtenha o áudio. O exemplo a seguir salva o áudio traduzido como um arquivo .wav.
Importante
A síntese baseada em eventos funciona apenas com uma única tradução. Não adicione vários idiomas de tradução de destino. Além disso, o voice_name
valor deve ser o mesmo idioma que o idioma de tradução de destino. Por exemplo, "de"
poderia mapear para "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}".')
translation_recognition_result = translation_recognizer.recognize_once()
print(get_result_text(reason=translation_recognition_result.reason, result=translation_recognition_result))
def get_result_text(reason, translation_recognition_result):
reason_format = {
speechsdk.ResultReason.TranslatedSpeech:
f'Recognized "{from_language}": {translation_recognition_result.text}\n' +
f'Translated into "{to_language}"": {translation_recognition_result.translations[to_language]}',
speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{translation_recognition_result.text}"',
speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {translation_recognition_result.no_match_details}',
speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {translation_recognition_result.cancellation_details}'
}
return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()
Síntese manual
Você pode usar o translations
dicionário para sintetizar o áudio do texto de tradução. Itere através de cada tradução e sintetize-a. Quando você está criando uma SpeechSynthesizer
instância, o SpeechConfig
objeto precisa ter sua speech_synthesis_voice_name
propriedade definida para a voz desejada.
O exemplo a seguir se traduz para cinco idiomas. Cada tradução é então sintetizada em um arquivo de áudio na linguagem neural correspondente.
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...')
translation_recognition_result = translation_recognizer.recognize_once()
synthesize_translations(result=translation_recognition_result)
def synthesize_translations(translation_recognition_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: "{translation_recognition_result.text}"')
for language in translation_recognition_result.translations:
translation = translation_recognition_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()
Para obter mais informações sobre síntese de fala, consulte as noções básicas de síntese de fala.
Tradução multilingue com identificação linguística
Em muitos cenários, talvez você não saiba quais idiomas de entrada especificar. Usando a identificação de idioma, você pode detetar até 10 idiomas de entrada possíveis e traduzir automaticamente para seus idiomas de destino.
Para obter um exemplo de código completo, consulte Identificação de idioma.
Referência | da API REST de fala para texto API REST de fala para texto para referência | de áudio curta Exemplos adicionais no GitHub
Você pode usar a API REST para tradução de fala, mas ainda não incluímos um guia aqui. Selecione outra linguagem de programação para começar e aprender sobre os conceitos.
Neste guia de instruções, você aprende a reconhecer a fala humana e traduzi-la para outro idioma.
Consulte a visão geral da tradução de fala para obter mais informações sobre:
- Traduzir fala em texto
- Tradução de fala para vários idiomas de destino
- Realizar tradução direta de fala para fala
Pré-requisitos
- Uma subscrição do Azure. Você pode criar um gratuitamente.
- Crie um recurso de Fala no portal do Azure.
- Obtenha a chave de recurso de Fala e a região. Depois que o recurso de Fala for implantado, selecione Ir para o recurso para exibir e gerenciar chaves.
Transferir e instalar
Siga estas etapas e consulte o início rápido da CLI de fala para obter outros requisitos para sua plataforma.
Execute o seguinte comando da CLI do .NET para instalar a CLI de fala:
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
Execute os comandos a seguir para configurar sua chave de recurso de fala e região. Substitua
SUBSCRIPTION-KEY
pela chave de recurso de Fala e substituaREGION
pela região de recurso de Fala.spx config @key --set SUBSCRIPTION-KEY spx config @region --set REGION
Definir idiomas de origem e de chegada
Este comando chama a CLI de Fala para traduzir a fala do microfone do italiano para o francês:
spx translate --microphone --source it-IT --target fr