音声を認識して翻訳する方法
リファレンス ドキュメント | パッケージ (NuGet) | GitHub 上のその他のサンプル
この攻略ガイドでは、人間の音声を認識し、別の言語に翻訳する方法について学習します。
以下に関する詳細については、音声翻訳の概要を参照してください。
- 音声テキスト変換の翻訳
- 音声を複数のターゲット言語に翻訳する
- 音声間翻訳を直接実行する
機微なデータと環境変数
この記事のソース コードの例は、Speech リソースのキーやリージョンなどの機微なデータを格納する環境変数に依存します。 Program
クラスには、ホスト コンピューター環境変数から割り当てられた 2 つの static readonly string
値 (SPEECH__SUBSCRIPTION__KEY
と SPEECH__SERVICE__REGION
) が含まれています。 これらのフィールドはどちらもクラス スコープにあるので、クラスのメソッド本体内でアクセスできます。
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;
}
環境変数の詳細については、「環境変数とアプリケーション構成」を参照してください。
重要
API キーを使用する場合は、それを Azure Key Vault などの別の場所に安全に保存します。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
音声翻訳構成を作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechTranslationConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
ヒント
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
いくつかの方法で SpeechTranslationConfig
を初期化できます。
- サブスクリプションの場合: キーと、それに関連付けられたリージョンを渡します。
- エンドポイントの場合: Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストの場合: ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- 認証トークンの場合: 認証トークンと、それに関連付けられたリージョンを渡します。
キーとリージョンを使用して SpeechTranslationConfig
インスタンスを作成する方法を見てみましょう。 Azure portal で Speech リソース キーとリージョンを取得します。
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);
}
}
ソース言語を変更する
音声翻訳の一般的なタスクの 1 つは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コードで、SpeechRecognitionLanguage
プロパティに割り当て、SpeechTranslationConfig
インスタンスと対話します。
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
}
SpeechRecognitionLanguage
プロパティには、言語ロケールの書式指定文字列が必要です。 サポートされている音声翻訳ロケールの一覧を参照してください。
翻訳言語を追加する
音声翻訳のもう 1 つの一般的なタスクは、ターゲット翻訳言語を指定する方法です。 少なくとも 1 つが必要ですが、複数がサポートされています。 次のコード スニペットでは、フランス語とドイツ語の両方が翻訳言語ターゲットとして設定されています。
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
speechTranslationConfig.AddTargetLanguage("fr");
speechTranslationConfig.AddTargetLanguage("de");
}
AddTargetLanguage
を呼び出すたびに、新しいターゲット翻訳言語が指定されます。 つまり、音声がソース言語から認識される場合は、各ターゲット翻訳を結果の翻訳操作の一部として利用できます。
翻訳認識エンジンを初期化する
SpeechTranslationConfig
インスタンスを作成したら、次の手順として、TranslationRecognizer
を初期化します。 TranslationRecognizer
を初期化する場合は、それを自分の speechTranslationConfig
インスタンスに渡す必要があります。 構成オブジェクトにより、Speech Service がお客様の要求を検証するために必要な資格情報が提供されます。
ご利用のデバイスの既定のマイクを使用して音声を認識している場合、TranslationRecognizer
インスタンスは次のようになります。
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);
}
オーディオ入力デバイスを指定する場合は、AudioConfig
クラス インスタンスを作成し、TranslationRecognizer
を初期化するときに audioConfig
パラメーターを指定する必要があります。
まず、AudioConfig
オブジェクトを次のように参照します。
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);
}
マイクを使用するのでなくオーディオ ファイルを提供する場合でも、audioConfig
パラメーターを指定する必要があります。 ただし、FromDefaultMicrophoneInput
を呼び出さずに、AudioConfig
クラス インスタンスを作成する場合は、FromWavFileInput
を呼び出して filename
パラメーターを渡します。
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}
音声を翻訳する
音声を翻訳するために、Speech SDK はマイクまたはオーディオ ファイル入力に依存します。 音声認識は、音声翻訳の前に行われます。 すべてのオブジェクトが初期化されたら、recognize-once 関数を呼び出して結果を取得します。
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}");
}
}
}
音声テキスト変換の詳細については、音声認識の基礎に関する記事を参照してください。
イベント ベースの変換
TranslationRecognizer
オブジェクトによって Recognizing
イベントが公開されます。 イベントは複数回発生し、中間変換結果を取得するメカニズムを提供します。
Note
多言語音声翻訳を使用する場合、中間翻訳の結果使用できません。
次の例では、中間翻訳結果をコンソールに出力します:
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);
}
}
翻訳の合成
音声認識と翻訳が正常に完了すると、結果にはディクショナリ内のすべての翻訳が含まれます。 Translations
ディクショナリ キーはターゲットの翻訳言語で、値は翻訳されたテキストです。 認識された音声は翻訳可能で、別の言語で合成できます (音声間)。
イベントベースの合成
TranslationRecognizer
オブジェクトによって Synthesizing
イベントが公開されます。 イベントは複数回発生し、合成されたオーディオを翻訳認識結果から取得するためのメカニズムが提供されます。 複数の言語に翻訳する場合は、「手動合成」を参照してください。
合成音声を指定するには、VoiceName
インスタンスを割り当て、Synthesizing
イベントのイベント ハンドラーを提供して、オーディオを取得します。 次の例では、翻訳されたオーディオを .wav ファイルとして保存します。
重要
イベントベースの合成は、1 つの翻訳でのみ機能します。 複数のターゲット翻訳言語を追加しないでください。 また、VoiceName
値は、ターゲット翻訳言語と同じ言語である必要があります。 たとえば、"de"
は "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]}");
}
}
手動合成
Translations
ディクショナリを使用すると、翻訳テキストからオーディオを合成できます。 各翻訳を反復処理し、合成します。 SpeechSynthesizer
インスタンスを作成する場合、SpeechConfig
オブジェクトの SpeechSynthesisVoiceName
プロパティを目的の音声に設定する必要があります。
次の例では、5 つの言語に変換します。 各翻訳は、対応するニューラル言語のオーディオ ファイルに合成されます。
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);
}
}
}
音声合成の詳細については、音声合成の基礎に関する記事を参照してください。
言語 ID による多言語翻訳
多くの場合、指定する入力言語がわからないことがあります。 言語識別を使用すると、最大 10 個の入力言語を検出し、自動的に対象言語に翻訳できます。
次の例では、en-US
または zh-CN
が AutoDetectSourceLanguageConfig
で定義されているため、それらが検出されると想定しています。 その後、スピーチは AddTargetLanguage()
の呼び出しに指定されているとおり、de
および fr
に翻訳されます。
speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
完全なコード サンプルについては、言語識別に関するページを参照してください。
ソース言語候補のない多言語音声翻訳
多言語音声翻訳は、入力言語を指定しない、同じセッション内での言語切り替えへの対応など、さまざまな機能を新たに提供する新しいレベルの音声翻訳テクノロジを実装します。 これらの機能により、強力な新しいレベルの音声翻訳機能を製品に実装することが可能になります。
現在、音声翻訳で言語 ID を使用する場合は、v2 エンドポイントから SpeechTranslationConfig
オブジェクトを作成する必要があります。 文字列 "YourServiceRegion" を音声リソース リージョン ("westus" など) に置き換えます。 "YourSubscriptionKey" を音声リソース キーに置き換えます。
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");
翻訳ターゲット言語を指定します。 選択した言語に置き換えます。 行を追加できます。
config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");
多言語音声翻訳の主な差別化要因は、ソース言語を指定する必要がないということです。 これは、サービスがソース言語を自動的に検出するためです。 fromOpenRange
メソッドを使用して AutoDetectSourceLanguageConfig
オブジェクトを作成し、指定したソース言語を持たない多言語音声翻訳を使用することをサービスに通知します。
AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange();
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
音声 SDK の完全なコード サンプルについては、「GitHub の音声翻訳サンプル」を参照してください。
音声翻訳でのカスタム翻訳の使用
音声翻訳でのカスタム翻訳機能は、Azure カスタム翻訳サービスとシームレスに統合され、より正確でカスタマイズされた翻訳の実現を可能にします。 統合では Azure カスタム翻訳サービスの機能が直接利用されるため、マルチサービス リソースを使用して、完全な機能のセットが正しく機能できるようにする必要があります。 詳細な手順については、「Azure AI サービス用のマルチサービス リソースの作成」のガイドを参照してください。
さらに、カスタム翻訳ツールのオフライン トレーニングと "カテゴリ ID" の取得については、「クイックスタート: カスタム モデルのビルド、デプロイ、使用 - カスタム翻訳ツール」で提供されているステップ バイ ステップ スクリプトを参照してください。
// 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");
….
}
リファレンス ドキュメント | パッケージ (NuGet) | GitHub 上のその他のサンプル
この攻略ガイドでは、人間の音声を認識し、別の言語に翻訳する方法について学習します。
以下に関する詳細については、音声翻訳の概要を参照してください。
- 音声テキスト変換の翻訳
- 音声を複数のターゲット言語に翻訳する
- 音声間翻訳を直接実行する
機微なデータと環境変数
この記事のソース コードの例は、Speech リソースのキーやリージョンなどの機微なデータを格納する環境変数に依存します。 C++ コード ファイルには、ホスト コンピューター環境変数から割り当てられた 2 つの文字列値 (SPEECH__SUBSCRIPTION__KEY
と SPEECH__SERVICE__REGION
) が含まれています。 これらのフィールドはどちらもクラス スコープにあるので、クラスのメソッド本体内でアクセスできます。
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
環境変数の詳細については、「環境変数とアプリケーション構成」を参照してください。
重要
API キーを使用する場合は、それを Azure Key Vault などの別の場所に安全に保存します。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
音声翻訳構成を作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechTranslationConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
ヒント
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
いくつかの方法で SpeechTranslationConfig
を初期化できます。
- サブスクリプションの場合: キーと、それに関連付けられたリージョンを渡します。
- エンドポイントの場合: Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストの場合: ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- 認証トークンの場合: 認証トークンと、それに関連付けられたリージョンを渡します。
キーとリージョンを使用して SpeechTranslationConfig
インスタンスを作成する方法を見てみましょう。 Azure portal で Speech リソース キーとリージョンを取得します。
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;
}
ソース言語を変更する
音声翻訳の一般的なタスクの 1 つは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コードで、SetSpeechRecognitionLanguage
メソッドを呼び出し、SpeechTranslationConfig
インスタンスと対話します。
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
}
SpeechRecognitionLanguage
プロパティには、言語ロケールの書式指定文字列が必要です。 サポートされている音声翻訳ロケールの一覧を参照してください。
翻訳言語を追加する
音声翻訳のもう 1 つの一般的なタスクは、ターゲット翻訳言語を指定する方法です。 少なくとも 1 つが必要ですが、複数がサポートされています。 次のコード スニペットでは、フランス語とドイツ語の両方が翻訳言語ターゲットとして設定されています。
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
speechTranslationConfig->AddTargetLanguage("fr");
speechTranslationConfig->AddTargetLanguage("de");
}
AddTargetLanguage
を呼び出すたびに、新しいターゲット翻訳言語が指定されます。 つまり、音声がソース言語から認識される場合は、各ターゲット翻訳を結果の翻訳操作の一部として利用できます。
翻訳認識エンジンを初期化する
SpeechTranslationConfig
インスタンスを作成したら、次の手順として、TranslationRecognizer
を初期化します。 TranslationRecognizer
を初期化する場合は、それを自分の translationConfig
インスタンスに渡す必要があります。 構成オブジェクトにより、Speech Service がお客様の要求を検証するために必要な資格情報が提供されます。
ご利用のデバイスの既定のマイクを使用して音声を認識している場合、TranslationRecognizer
は次のようになります。
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
}
オーディオ入力デバイスを指定する場合は、AudioConfig
クラス インスタンスを作成し、TranslationRecognizer
を初期化するときに audioConfig
パラメーターを指定する必要があります。
まず、AudioConfig
オブジェクトを次のように参照します。
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);
}
マイクを使用するのでなくオーディオ ファイルを提供する場合でも、audioConfig
パラメーターを指定する必要があります。 ただし、FromDefaultMicrophoneInput
を呼び出さずに、AudioConfig
クラス インスタンスを作成する場合は、FromWavFileInput
を呼び出して filename
パラメーターを渡します。
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}
音声を翻訳する
音声を翻訳するために、Speech SDK はマイクまたはオーディオ ファイル入力に依存します。 音声認識は、音声翻訳の前に行われます。 すべてのオブジェクトが初期化されたら、recognize-once 関数を呼び出して結果を取得します。
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;
}
}
}
音声テキスト変換の詳細については、音声認識の基礎に関する記事を参照してください。
翻訳の合成
音声認識と翻訳が正常に完了すると、結果にはディクショナリ内のすべての翻訳が含まれます。 Translations
ディクショナリ キーはターゲットの翻訳言語で、値は翻訳されたテキストです。 認識された音声は翻訳可能で、別の言語で合成できます (音声間)。
イベントベースの合成
TranslationRecognizer
オブジェクトによって Synthesizing
イベントが公開されます。 イベントは複数回発生し、合成されたオーディオを翻訳認識結果から取得するためのメカニズムが提供されます。 複数の言語に翻訳する場合は、「手動合成」を参照してください。
合成音声を指定するには、SetVoiceName
インスタンスを割り当て、Synthesizing
イベントのイベント ハンドラーを提供して、オーディオを取得します。 次の例では、翻訳されたオーディオを .wav ファイルとして保存します。
重要
イベントベースの合成は、1 つの翻訳でのみ機能します。 複数のターゲット翻訳言語を追加しないでください。 また、SetVoiceName
値は、ターゲット翻訳言語と同じ言語である必要があります。 たとえば、"de"
は "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;
}
}
}
手動合成
Translations
ディクショナリを使用すると、翻訳テキストからオーディオを合成できます。 各翻訳を反復処理し、合成します。 SpeechSynthesizer
インスタンスを作成する場合、SpeechConfig
オブジェクトの SetSpeechSynthesisVoiceName
プロパティを目的の音声に設定する必要があります。
次の例では、5 つの言語に変換します。 各翻訳は、対応するニューラル言語のオーディオ ファイルに合成されます。
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();
}
}
}
音声合成の詳細については、音声合成の基礎に関する記事を参照してください。
言語 ID による多言語翻訳
多くの場合、指定する入力言語がわからないことがあります。 言語識別を使用すると、最大 10 個の入力言語を検出し、自動的に対象言語に翻訳できます。
次の例では、en-US
または zh-CN
が AutoDetectSourceLanguageConfig
で定義されているため、それらが検出されると想定しています。 その後、スピーチは AddTargetLanguage()
の呼び出しに指定されているとおり、de
および fr
に翻訳されます。
speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
完全なコード サンプルについては、言語識別に関するページを参照してください。
リファレンス ドキュメント | パッケージ (Go) | GitHub 上のその他のサンプル
Speech SDK for Go では、音声翻訳はサポートされていません。 別のプログラミング言語を選択するか、この記事の冒頭でリンクされている、Go のリファレンスとサンプルを使用してください。
リファレンス ドキュメント | GitHub 上のその他のサンプル
この攻略ガイドでは、人間の音声を認識し、別の言語に翻訳する方法について学習します。
以下に関する詳細については、音声翻訳の概要を参照してください。
- 音声テキスト変換の翻訳
- 音声を複数のターゲット言語に翻訳する
- 音声間翻訳を直接実行する
機微なデータと環境変数
この記事のソース コードの例は、Speech リソースのキーやリージョンなどの機微なデータを格納する環境変数に依存します。 Java コード ファイルには、ホスト コンピューター環境変数から割り当てられた 2 つの static final String
値 (SPEECH__SUBSCRIPTION__KEY
と SPEECH__SERVICE__REGION
) が含まれています。 これらのフィールドはどちらもクラス スコープにあるので、クラスのメソッド本体内でアクセスできます。
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) { }
}
環境変数の詳細については、「環境変数とアプリケーション構成」を参照してください。
重要
API キーを使用する場合は、それを Azure Key Vault などの別の場所に安全に保存します。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
音声翻訳構成を作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechTranslationConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
ヒント
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
いくつかの方法で SpeechTranslationConfig
インスタンスを初期化できます。
- サブスクリプションの場合: キーと、それに関連付けられたリージョンを渡します。
- エンドポイントの場合: Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストの場合: ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- 認証トークンの場合: 認証トークンと、それに関連付けられたリージョンを渡します。
キーとリージョンを使用して SpeechTranslationConfig
インスタンスを作成する方法を見てみましょう。 Azure portal で Speech リソース キーとリージョンを取得します。
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);
}
}
ソース言語を変更する
音声翻訳の一般的なタスクの 1 つは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コードで、setSpeechRecognitionLanguage
メソッドを呼び出し、SpeechTranslationConfig
インスタンスと対話します。
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
}
setSpeechRecognitionLanguage
関数には、言語ロケールの書式指定文字列が必要です。 サポートされている音声翻訳ロケールの一覧を参照してください。
翻訳言語を追加する
音声翻訳のもう 1 つの一般的なタスクは、ターゲット翻訳言語を指定する方法です。 少なくとも 1 つが必要ですが、複数がサポートされています。 次のコード スニペットでは、フランス語とドイツ語の両方が翻訳言語ターゲットとして設定されています。
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");
}
addTargetLanguage
を呼び出すたびに、新しいターゲット翻訳言語が指定されます。 つまり、音声がソース言語から認識される場合は、各ターゲット翻訳を結果の翻訳操作の一部として利用できます。
翻訳認識エンジンを初期化する
SpeechTranslationConfig
インスタンスを作成したら、次の手順として、TranslationRecognizer
を初期化します。 TranslationRecognizer
を初期化する場合は、それを自分の speechTranslationConfig
インスタンスに渡す必要があります。 構成オブジェクトにより、Speech Service がお客様の要求を検証するために必要な資格情報が提供されます。
ご利用のデバイスの既定のマイクを使用して音声を認識している場合、TranslationRecognizer
は次のようになります。
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
}
}
オーディオ入力デバイスを指定する場合は、AudioConfig
クラス インスタンスを作成し、TranslationRecognizer
を初期化するときに audioConfig
パラメーターを指定する必要があります。
まず、AudioConfig
オブジェクトを次のように参照します。
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)) {
}
}
マイクを使用するのでなくオーディオ ファイルを提供する場合でも、audioConfig
パラメーターを指定する必要があります。 ただし、fromDefaultMicrophoneInput
を呼び出さずに、AudioConfig
クラス インスタンスを作成する場合は、fromWavFileInput
を呼び出して filename
パラメーターを渡します。
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
}
}
音声を翻訳する
音声を翻訳するために、Speech SDK はマイクまたはオーディオ ファイル入力に依存します。 音声認識は、音声翻訳の前に行われます。 すべてのオブジェクトが初期化されたら、recognize-once 関数を呼び出して結果を取得します。
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());
}
}
}
}
音声テキスト変換の詳細については、音声認識の基礎に関する記事を参照してください。
翻訳の合成
音声認識と翻訳が正常に完了すると、結果にはディクショナリ内のすべての翻訳が含まれます。 getTranslations
関数はキー付きのディクショナリをターゲットの翻訳言語として返し、値は翻訳されたテキストとして返します。 認識された音声は翻訳可能で、別の言語で合成できます (音声間)。
イベントベースの合成
TranslationRecognizer
オブジェクトによって synthesizing
イベントが公開されます。 イベントは複数回発生し、合成されたオーディオを翻訳認識結果から取得するためのメカニズムが提供されます。 複数の言語に翻訳する場合は、「手動合成」を参照してください。
合成音声を指定するには、setVoiceName
インスタンスを割り当て、synthesizing
イベントのイベント ハンドラーを提供して、オーディオを取得します。 次の例では、翻訳されたオーディオを .wav ファイルとして保存します。
重要
イベントベースの合成は、1 つの翻訳でのみ機能します。 複数のターゲット翻訳言語を追加しないでください。 また、setVoiceName
値は、ターゲット翻訳言語と同じ言語である必要があります。 たとえば、"de"
は "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);
}
}
}
}
手動合成
getTranslations
関数は、翻訳テキストからオーディオを合成するために使用できるディクショナリを返します。 各翻訳を反復処理し、合成します。 SpeechSynthesizer
インスタンスを作成する場合、SpeechConfig
オブジェクトの setSpeechSynthesisVoiceName
プロパティを目的の音声に設定する必要があります。
次の例では、5 つの言語に変換します。 各翻訳は、対応するニューラル言語のオーディオ ファイルに合成されます。
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();
}
}
}
}
}
音声合成の詳細については、音声合成の基礎に関する記事を参照してください。
リファレンスドキュメント | パッケージ (npm) | GitHub 上のその他のサンプル | ライブラリのソース コード
この攻略ガイドでは、人間の音声を認識し、別の言語に翻訳する方法について学習します。
以下に関する詳細については、音声翻訳の概要を参照してください。
- 音声テキスト変換の翻訳
- 音声を複数のターゲット言語に翻訳する
- 音声間翻訳を直接実行する
翻訳構成を作成する
Speech SDK を使用して翻訳サービスを呼び出すには、SpeechTranslationConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
Note
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
いくつかの方法で SpeechTranslationConfig
を初期化できます。
- サブスクリプションの場合: キーと、それに関連付けられたリージョンを渡します。
- エンドポイントの場合: Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストの場合: ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- 認証トークンの場合: 認証トークンと、それに関連付けられたリージョンを渡します。
キーとリージョンを使用して SpeechTranslationConfig
インスタンスを作成する方法を見てみましょう。 Azure portal で Speech リソース キーとリージョンを取得します。
const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
翻訳ツールを初期化する
SpeechTranslationConfig
インスタンスを作成したら、次の手順として、TranslationRecognizer
を初期化します。 TranslationRecognizer
を初期化する場合は、それを自分の speechTranslationConfig
インスタンスに渡す必要があります。 構成オブジェクトにより、翻訳サービスがお客様の要求を検証するために必要な資格情報が提供されます。
ご利用のデバイスの既定のマイクから提供された音声を翻訳している場合、TranslationRecognizer
は次のようになります。
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
オーディオ入力デバイスを指定する場合は、AudioConfig
クラス インスタンスを作成し、TranslationRecognizer
を初期化するときに audioConfig
パラメーターを指定する必要があります。
AudioConfig
オブジェクトを次のように参照します。
const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
マイクを使用するのでなくオーディオ ファイルを提供する場合でも、audioConfig
パラメーターを指定する必要があります。 ただし、これは、Node.js をターゲットにしている場合にのみ実行できます。 fromDefaultMicrophoneInput
を呼び出さずに、AudioConfig
クラス インスタンスを作成する場合は、fromWavFileOutput
を呼び出して filename
パラメーターを渡します。
const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
音声を翻訳する
Speech SDK for JavaScript の TranslationRecognizer クラスでは、音声翻訳に使用できる手法が公開されています。
- 単発の翻訳 (非同期): 非ブロッキング (非同期) モードで翻訳を実行します。 1 つの発話が翻訳されます。 1 つの発話の終わりは、終了時の無音状態をリッスンするか、最大 15 秒のオーディオが処理されるまで待機することによって決定されます。
- 継続的翻訳 (非同期): 継続的な翻訳操作を非同期に開始します。 ユーザーはイベントに登録し、さまざまなアプリケーションの状態を処理します。 非同期の継続的翻訳を停止するには、
stopContinuousRecognitionAsync
を呼び出します。
音声認識モードを選択する方法の詳細については、音声テキスト変換の概要に関するページを参照してください。
対象言語を指定する
翻訳するには、ソース言語と少なくとも 1 つのターゲット言語の両方を指定する必要があります。
音声翻訳の一覧表に記載されたロケールを使用して、ソース言語を選択できます。 同じリンクで、翻訳対象言語のオプションを探します。
テキストを表示する場合、または合成された翻訳対象の音声を再生する場合には、ターゲット言語のオプションが異なります。 英語からドイツ語に翻訳するには、翻訳の構成オブジェクトを次のように変更します。
speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");
単発の認識
recognizeOnceAsync
を使用した非同期の単発翻訳の例を次に示します。
translationRecognizer.recognizeOnceAsync(result => {
// Interact with result
});
結果を処理するコードを記述する必要があります。 このサンプルでは、ドイツ語に翻訳するための result.reason
を評価しています。
translationRecognizer.recognizeOnceAsync(
function (result) {
let translation = result.translations.get("de");
window.console.log(translation);
translationRecognizer.close();
},
function (err) {
window.console.log(err);
translationRecognizer.close();
});
コードでは、翻訳が処理されている間に提供される更新情報を扱うこともできます。 これらの更新情報を利用して、翻訳の進行状況についての視覚的なフィードバックを提供できます。 この JavaScript Node.js の例に、以下の種類の更新を示します。 次のコードでは、翻訳の処理中に生成された詳細情報も表示されています。
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);
};
継続的翻訳
継続的翻訳は、単発の認識よりも少し複雑です。 この場合は、認識結果を取得するために、recognizing
、recognized
、canceled
の各イベントをサブスクライブする必要があります。 翻訳を停止するには、stopContinuousRecognitionAsync
を呼び出す必要があります。
オーディオ入力ファイルに対して継続的翻訳を実行する方法の例を次に示します。 入力を定義し、TranslationRecognizer
を初期化することから始めましょう。
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
次のコードで、TranslationRecognizer
から送信されたイベントをサブスクライブします。
recognizing
: 中間的な翻訳結果を含むイベントのシグナル。recognized
: 最終的な翻訳結果を含むイベントのシグナル。 これらの結果は、翻訳の試行が成功したことを示しています。sessionStopped
: 翻訳セッション (操作) の終了を示すイベントのシグナル。canceled
: キャンセルされた翻訳結果を含むイベントのシグナル。 これらのイベントは、結果としてキャンセルされた翻訳試行または直接的なキャンセルを示します。 または、転送またはプロトコルのエラーを示します。
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();
};
すべてが設定されると、startContinuousRecognitionAsync
を呼び出すことができます。
// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();
ソース言語を選択する
音声翻訳の 1 つの一般的なタスクに、入力 (またはソース) 言語の指定があります。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コード内で、SpeechTranslationConfig
インスタンスを見つけて、そのすぐ下に次の行を追加します。
speechTranslationConfig.speechRecognitionLanguage = "it-IT";
speechRecognitionLanguage
プロパティには、言語ロケールの書式指定文字列が必要です。 サポートされている音声翻訳ロケールの一覧を参照してください。
1 つ以上のターゲット言語を選択する
Speech SDK によって、複数のターゲット言語を並列で翻訳することができます。 利用可能なターゲット言語は、ソース言語の一覧とはやや異なります。 ロケールではなく言語コードを使用して、ターゲット言語を指定します。
テキストのターゲットに対応する言語コードの一覧については、言語サポートのページにある音声翻訳の一覧を確認してください。 合成された言語への翻訳についても、そこで詳細を確認できます。
次のコードでは、ターゲット言語としてドイツ語を追加しています。
speechTranslationConfig.addTargetLanguage("de");
複数のターゲット言語への翻訳が可能なので、コード上では、結果を検証するときのターゲット言語を指定する必要があります。 次のコードでは、ドイツ語の翻訳結果を取得しています。
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
};
リファレンス ドキュメント | パッケージ (ダウンロード) | GitHub 上のその他のサンプル
Speech SDK for Objective-C では音声翻訳がサポートされますが、そのガイドはまだ、ここには含まれていません。 作業を開始するには別のプログラミング言語を選択して概念について学ぶか、この記事の冒頭でリンクされている Objective-C のリファレンスとサンプルを参照してください。
リファレンス ドキュメント | パッケージ (ダウンロード) | GitHub 上のその他のサンプル
Speech SDK for Swift では音声翻訳がサポートされますが、そのガイドはまだ、ここには含まれていません。 作業を開始するには、別のプログラミング言語を選択して概念について学ぶか、この記事の冒頭でリンクされている、Swift のリファレンスとサンプルを参照してください。
リファレンス ドキュメント | パッケージ (PyPi) | GitHub 上のその他のサンプル
この攻略ガイドでは、人間の音声を認識し、別の言語に翻訳する方法について学習します。
以下に関する詳細については、音声翻訳の概要を参照してください。
- 音声テキスト変換の翻訳
- 音声を複数のターゲット言語に翻訳する
- 音声間翻訳を直接実行する
機微なデータと環境変数
この記事のソース コードの例は、Speech リソースのサブスクリプション キーやリージョンなどの機微なデータを格納する環境変数に依存します。 Python コード ファイルには、ホスト コンピューター環境変数から割り当てられた 2 つの値 (SPEECH__SUBSCRIPTION__KEY
と SPEECH__SERVICE__REGION
) が含まれています。 これらの変数はどちらもグローバル スコープにあるので、コード ファイルの関数定義内でアクセスできます。
speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']
環境変数の詳細については、「環境変数とアプリケーション構成」を参照してください。
重要
API キーを使用する場合は、それを Azure Key Vault などの別の場所に安全に保存します。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
音声翻訳構成を作成する
Speech SDK を使用して Speech Service を呼び出すには、SpeechTranslationConfig
インスタンスを作成する必要があります。 このクラスには、キー、関連付けられたリージョン、エンドポイント、ホスト、または認証トークンなど、ご利用のサブスクリプションに関する情報が含まれています。
ヒント
音声認識、音声合成、翻訳、またはインテント認識のどれを実行するのかに関係なく、必ず構成を作成します。
いくつかの方法で SpeechTranslationConfig
を初期化できます。
- サブスクリプションの場合: キーと、それに関連付けられたリージョンを渡します。
- エンドポイントの場合: Speech Service エンドポイントを渡します。 キーまたは認証トークンは省略可能です。
- ホストの場合: ホスト アドレスを渡します。 キーまたは認証トークンは省略可能です。
- 認証トークンの場合: 認証トークンと、それに関連付けられたリージョンを渡します。
キーとリージョンを使用して SpeechTranslationConfig
インスタンスを作成する方法を見てみましょう。 Azure portal で Speech リソース キーとリージョンを取得します。
from_language, to_language = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
ソース言語を変更する
音声翻訳の一般的なタスクの 1 つは、入力 (またはソース) 言語を指定することです。 次の例では、入力言語をイタリア語に変更する方法を示しています。 コードで、speech_recognition_language
プロパティに割り当て、SpeechTranslationConfig
インスタンスと対話します。
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
プロパティには、言語ロケールの書式指定文字列が必要です。 サポートされている音声翻訳ロケールの一覧を参照してください。
翻訳言語を追加する
音声翻訳のもう 1 つの一般的なタスクは、ターゲット翻訳言語を指定する方法です。 少なくとも 1 つが必要ですが、複数がサポートされています。 次のコード スニペットでは、フランス語とドイツ語の両方が翻訳言語ターゲットとして設定されています。
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")
add_target_language
を呼び出すたびに、新しいターゲット翻訳言語が指定されます。 つまり、音声がソース言語から認識される場合は、各ターゲット翻訳を結果の翻訳操作の一部として利用できます。
翻訳認識エンジンを初期化する
SpeechTranslationConfig
インスタンスを作成したら、次の手順として、TranslationRecognizer
を初期化します。 TranslationRecognizer
を初期化する場合は、それを自分の translation_config
インスタンスに渡す必要があります。 構成オブジェクトにより、Speech Service がお客様の要求を検証するために必要な資格情報が提供されます。
ご利用のデバイスの既定のマイクを使用して音声を認識している場合、TranslationRecognizer
は次のようになります。
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
translation_config.add_target_language(to_language)
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
オーディオ入力デバイスを指定する場合は、AudioConfig
クラス インスタンスを作成し、TranslationRecognizer
を初期化するときに audio_config
パラメーターを指定する必要があります。
まず、AudioConfig
オブジェクトを次のように参照します。
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)
マイクを使用するのでなくオーディオ ファイルを提供する場合でも、audioConfig
パラメーターを指定する必要があります。 ただし、AudioConfig
クラス インスタンスを作成する場合は、use_default_microphone=True
を呼び出す代わりに filename="path-to-file.wav"
を呼び出して filename
パラメーターを提供します。
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
for lang in to_languages:
translation_config.add_target_language(lang)
audio_config = speechsdk.audio.AudioConfig(filename="path-to-file.wav")
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config, audio_config=audio_config)
音声を翻訳する
音声を翻訳するために、Speech SDK はマイクまたはオーディオ ファイル入力に依存します。 音声認識は、音声翻訳の前に行われます。 すべてのオブジェクトが初期化されたら、recognize-once 関数を呼び出して結果を取得します。
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()
音声テキスト変換の詳細については、音声認識の基礎に関する記事を参照してください。
翻訳の合成
音声認識と翻訳が正常に完了すると、結果にはディクショナリ内のすべての翻訳が含まれます。 translations
ディクショナリ キーはターゲットの翻訳言語で、値は翻訳されたテキストです。 認識された音声は翻訳可能で、別の言語で合成できます (音声間)。
イベントベースの合成
TranslationRecognizer
オブジェクトによって Synthesizing
イベントが公開されます。 イベントは複数回発生し、合成されたオーディオを翻訳認識結果から取得するためのメカニズムが提供されます。 複数の言語に翻訳する場合は、「手動合成」を参照してください。
合成音声を指定するには、voice_name
インスタンスを割り当て、Synthesizing
イベントのイベント ハンドラーを提供して、オーディオを取得します。 次の例では、翻訳されたオーディオを .wav ファイルとして保存します。
重要
イベントベースの合成は、1 つの翻訳でのみ機能します。 複数のターゲット翻訳言語を追加しないでください。 また、voice_name
値は、ターゲット翻訳言語と同じ言語である必要があります。 たとえば、"de"
は "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()
手動合成
translations
ディクショナリを使用すると、翻訳テキストからオーディオを合成できます。 各翻訳を反復処理し、合成します。 SpeechSynthesizer
インスタンスを作成する場合、SpeechConfig
オブジェクトの speech_synthesis_voice_name
プロパティを目的の音声に設定する必要があります。
次の例では、5 つの言語に変換します。 各翻訳は、対応するニューラル言語のオーディオ ファイルに合成されます。
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()
音声合成の詳細については、音声合成の基礎に関する記事を参照してください。
言語 ID による多言語翻訳
多くの場合、指定する入力言語がわからないことがあります。 言語識別を使用すると、最大 10 個の入力言語を検出し、自動的に対象言語に翻訳できます。
完全なコード サンプルについては、言語識別に関するページを参照してください。
Speech to Text REST API リファレンス | Speech to Text REST API for short audio リファレンス | GitHub 上のその他のサンプル
音声翻訳には REST API を使用できますが、そのガイドはまだ、ここには含まれていません。 使用を開始して概念について学ぶには、別のプログラミング言語を選択してください。
この攻略ガイドでは、人間の音声を認識し、別の言語に翻訳する方法について学習します。
以下に関する詳細については、音声翻訳の概要を参照してください。
- 音声テキスト変換の翻訳
- 音声を複数のターゲット言語に翻訳する
- 音声間翻訳を直接実行する
前提条件
- Azure サブスクリプション。 無料で作成できます。
- Azure ポータルで、音声リソースを作成します。
- Speech リソース キーとリージョンを取得します。 音声リソースがデプロイされたら、[リソースに移動] を選択して、キーを表示および管理します。
Management Studio のダウンロードとインストールは、
次の手順を実行し、対象プラットフォームに対する他の要件を Azure Cognitive Service for Speech CLI クイックスタートで確認します。
次の .NET CLI コマンドを実行して、Speech CLI をインストールします。
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
次のコマンドを実行して、Azure Cognitive Service for Speech リソースのキーとリージョンを構成します。
SUBSCRIPTION-KEY
は Speech リソースのキーに、REGION
は Speech リソースのリージョンに置き換えます。spx config @key --set SUBSCRIPTION-KEY spx config @region --set REGION
ソース言語とターゲット言語を設定する
このコマンドにより、Speech CLI が呼び出されて、マイクからの音声がイタリア語からフランス語に翻訳されます。
spx translate --microphone --source it-IT --target fr