リファレンス ドキュメント | パッケージ (NuGet) | GitHub 上のその他のサンプル
このハウツー ガイドでは、Azure AI Speech を使用して、Azure AI Foundry モデルの Azure OpenAI と対話できます。 Speech サービスによって認識されたテキストは、Azure OpenAI に送信されます。 Speech サービスでは、Azure OpenAI からのテキスト応答から音声が合成されます。
マイクに話し込み、Azure OpenAI との会話を開始します。
- Speech サービスは音声を認識し、テキストに変換します (音声テキスト変換)。
- テキストとしての要求が Azure OpenAI に送信されます。
- Speech サービスのテキスト読み上げ機能では、Azure OpenAI からの応答を既定のスピーカーに合成します。
この例のエクスペリエンスはやり取りですが、Azure OpenAI では会話のコンテキストを覚えていません。
前提条件
- Azure サブスクリプション - 無料アカウントを作成します
- Azure portal で Azure AI Foundry Models リソースに Microsoft Azure OpenAI を作成 します。
- Azure OpenAI リソースに モデル をデプロイします。 モデル デプロイの詳細については、 Azure OpenAI リソース デプロイ ガイドを参照してください。
- Azure OpenAI リソース キーとエンドポイントを取得します。 Azure OpenAI リソースがデプロイされたら、[リソースに移動] を選択して、キーを表示および管理します。
- Azure portal で音声用の AI Foundry リソースを作成します。
- Speech リソース キーとリージョンを取得します。 音声リソースがデプロイされたら、[リソースに移動] を選択して、キーを表示および管理します。
環境をセットアップする
Speech SDK は NuGet パッケージとして提供されていて、.NET Standard 2.0 が実装されています。 Azure Cognitive Service for Speech SDK は、このガイドで後でインストールしますが、まず、これ以上要件がないか SDK のインストール ガイドを確認してください。
環境変数の設定
この例では、AZURE_OPENAI_API_KEY
、AZURE_OPENAI_ENDPOINT
、AZURE_OPENAI_CHAT_DEPLOYMENT
、SPEECH_KEY
、SPEECH_REGION
という名前の環境変数が必要です。
Azure AI Foundry リソースにアクセスするには、アプリケーションを認証する必要があります。 この記事では、環境変数を使って資格情報を保存する方法について説明します。 その後、コードから環境変数にアクセスして、アプリケーションを認証できます。 運用環境では、資格情報を保存してそれにアクセスする際に、安全性が高い方法を使用します。
重要
Microsoft Entra 認証と Azure リソースのマネージド ID を併用して、クラウドで実行されるアプリケーションに資格情報を格納しないようにすることをお勧めします。
API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使用する場合は、Azure Key Vault に安全に格納し、キーを定期的にローテーションし、ロールベースのアクセス制御とネットワーク アクセス制限を使用して Azure Key Vault へのアクセスを制限してください。 アプリで API キーを安全に使用する方法の詳細については、Azure Key Vault を使用した API キーに関するページを参照してください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
環境変数を設定するには、コンソール ウィンドウを開き、オペレーティング システムと開発環境の指示に従います。
-
AZURE_OPENAI_API_KEY
環境変数を設定するには、your-openai-key
をリソースのキーの 1 つに置き換えます。 -
AZURE_OPENAI_ENDPOINT
環境変数を設定するには、your-openai-endpoint
をリソースのリージョンの 1 つに置き換えます。 -
AZURE_OPENAI_CHAT_DEPLOYMENT
環境変数を設定するには、your-openai-deployment-name
をリソースのリージョンの 1 つに置き換えます。 -
SPEECH_KEY
環境変数を設定するには、your-speech-key
をリソースのキーの 1 つに置き換えます。 -
SPEECH_REGION
環境変数を設定するには、your-speech-region
をリソースのリージョンの 1 つに置き換えます。
setx AZURE_OPENAI_API_KEY your-openai-key
setx AZURE_OPENAI_ENDPOINT your-openai-endpoint
setx AZURE_OPENAI_CHAT_DEPLOYMENT your-openai-deployment-name
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region
注
現在実行中のコンソール内の環境変数にのみアクセスする必要がある場合は、環境変数を set
の代わりに setx
に設定します。
環境変数を追加した後、コンソール ウィンドウを含め、環境変数を読み取る必要がある実行中のプログラムの再起動が必要になる場合があります。 たとえば、エディターが Visual Studio である場合、サンプルを実行する前に Visual Studio を再起動します。
マイクから音声を認識する
次の手順を実行して、新しいコンソール アプリケーションを作成します。
新しいプロジェクトを作成したいフォルダーでコマンド プロンプト ウィンドウを開きます。 次のコマンドを実行して、.NET CLI でコンソール アプリケーションを作成します。
dotnet new console
このコマンドは、プロジェクト ディレクトリに Program.cs ファイルを作成します。
.NET CLI を使用して、新しいプロジェクトに Speech SDK をインストールします。
dotnet add package Microsoft.CognitiveServices.Speech
.NET CLI を使用して、Azure OpenAI SDK (プレリリース) を新しいプロジェクトにインストールします。
dotnet add package Azure.AI.OpenAI --prerelease
Program.cs
の内容を以下のコードに置き換えます。using System.Text; using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio; using Azure; using Azure.AI.OpenAI; // This example requires environment variables named "AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT" and "AZURE_OPENAI_CHAT_DEPLOYMENT" // Your endpoint should look like the following https://YOUR_OPEN_AI_RESOURCE_NAME.openai.azure.com/ string openAIKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY") ?? throw new ArgumentException("Missing AZURE_OPENAI_API_KEY"); string openAIEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new ArgumentException("Missing AZURE_OPENAI_ENDPOINT"); // Enter the deployment name you chose when you deployed the model. string engine = Environment.GetEnvironmentVariable("AZURE_OPENAI_CHAT_DEPLOYMENT") ?? throw new ArgumentException("Missing AZURE_OPENAI_CHAT_DEPLOYMENT"); // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY") ?? throw new ArgumentException("Missing SPEECH_KEY"); string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION") ?? throw new ArgumentException("Missing SPEECH_REGION"); // Sentence end symbols for splitting the response into sentences. List<string> sentenceSaperators = new() { ".", "!", "?", ";", "。", "!", "?", ";", "\n" }; try { await ChatWithAzureOpenAI(); } catch (Exception ex) { Console.WriteLine(ex); } // Prompts Azure OpenAI with a request and synthesizes the response. async Task AskAzureOpenAI(string prompt) { object consoleLock = new(); var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion); // The language of the voice that speaks. speechConfig.SpeechSynthesisVoiceName = "en-US-JennyMultilingualNeural"; var audioOutputConfig = AudioConfig.FromDefaultSpeakerOutput(); using var speechSynthesizer = new SpeechSynthesizer(speechConfig, audioOutputConfig); speechSynthesizer.Synthesizing += (sender, args) => { lock (consoleLock) { Console.ForegroundColor = ConsoleColor.Yellow; Console.Write($"[Audio]"); Console.ResetColor(); } }; // Ask Azure OpenAI OpenAIClient client = new(new Uri(openAIEndpoint), new AzureKeyCredential(openAIKey)); var completionsOptions = new ChatCompletionsOptions() { DeploymentName = engine, Messages = { new ChatRequestUserMessage(prompt) }, MaxTokens = 100, }; var responseStream = await client.GetChatCompletionsStreamingAsync(completionsOptions); StringBuilder gptBuffer = new(); await foreach (var completionUpdate in responseStream) { var message = completionUpdate.ContentUpdate; if (string.IsNullOrEmpty(message)) { continue; } lock (consoleLock) { Console.ForegroundColor = ConsoleColor.DarkBlue; Console.Write($"{message}"); Console.ResetColor(); } gptBuffer.Append(message); if (sentenceSaperators.Any(message.Contains)) { var sentence = gptBuffer.ToString().Trim(); if (!string.IsNullOrEmpty(sentence)) { await speechSynthesizer.SpeakTextAsync(sentence); gptBuffer.Clear(); } } } } // Continuously listens for speech input to recognize and send as text to Azure OpenAI async Task ChatWithAzureOpenAI() { // Should be the locale for the speaker's language. var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion); speechConfig.SpeechRecognitionLanguage = "en-US"; using var audioConfig = AudioConfig.FromDefaultMicrophoneInput(); using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig); var conversationEnded = false; while (!conversationEnded) { Console.WriteLine("Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation."); // Get audio from the microphone and then send it to the TTS service. var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync(); switch (speechRecognitionResult.Reason) { case ResultReason.RecognizedSpeech: if (speechRecognitionResult.Text == "Stop.") { Console.WriteLine("Conversation ended."); conversationEnded = true; } else { Console.WriteLine($"Recognized speech: {speechRecognitionResult.Text}"); await AskAzureOpenAI(speechRecognitionResult.Text); } break; case ResultReason.NoMatch: Console.WriteLine($"No speech could be recognized: "); break; case ResultReason.Canceled: var cancellationDetails = CancellationDetails.FromResult(speechRecognitionResult); Console.WriteLine($"Speech Recognition canceled: {cancellationDetails.Reason}"); if (cancellationDetails.Reason == CancellationReason.Error) { Console.WriteLine($"Error details={cancellationDetails.ErrorDetails}"); } break; } } }
Azure OpenAI によって返されるトークンの数を増減するには、
MaxTokens
クラス インスタンスでChatCompletionsOptions
プロパティを変更します。 トークンとコストへの影響の詳細については、「 Azure OpenAI トークン と Azure OpenAI の価格」を参照してください。新しいコンソール アプリケーションを実行して、マイクからの音声認識を開始します。
dotnet run
重要
説明どおりに、AZURE_OPENAI_API_KEY
、AZURE_OPENAI_ENDPOINT
、AZURE_OPENAI_CHAT_DEPLOYMENT
、SPEECH_KEY
、SPEECH_REGION
環境変数を設定してください。 これらの変数を設定しない場合、サンプルはエラー メッセージが表示されて失敗します。
指示されたらマイクに向って話します。 コンソール出力には、読み上げを開始するためのプロンプト、テキストとしての要求、次に Azure OpenAI からの応答がテキストとして含まれます。 Azure OpenAI からの応答は、テキストから音声に変換してから、既定のスピーカーに出力する必要があります。
PS C:\dev\openai\csharp> dotnet run
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech:Make a comma separated list of all continents.
Azure OpenAI response:Africa, Antarctica, Asia, Australia, Europe, North America, South America
Speech synthesized to speaker for text [Africa, Antarctica, Asia, Australia, Europe, North America, South America]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech: Make a comma separated list of 1 Astronomical observatory for each continent. A list should include each continent name in parentheses.
Azure OpenAI response:Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)
Speech synthesized to speaker for text [Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Conversation ended.
PS C:\dev\openai\csharp>
解説
いくつかの考慮事項を次に示します。
- 音声認識言語を変更するには、
en-US
を別のen-US
に置き換えます。 たとえば、スペイン語 (スペイン) の場合は、es-ES
を作成します。 既定の言語はen-US
です。 話される可能性のある複数の言語の 1 つを識別する方法の詳細については、言語の識別に関するページを参照してください。 - 読み上げる音声を変更するには、別の
en-US-JennyMultilingualNeural
にを置き換えます。 Azure OpenAIから返されたテキストの言語が音声で読み上げられない場合、Speech サービスでは合成された音声が出力されません。 - テキスト読み上げ出力の待ち時間を短縮するには、テキスト ストリーミング機能を使います。これを使うと、高速オーディオ生成のためのリアルタイム テキスト処理が有効になり、待ち時間が最小限に抑えられて、リアルタイム オーディオ出力の滑らかさと応答性が向上します。 「テキスト ストリーミングの使用方法」をご覧ください。
- 音声出力の視覚的なエクスペリエンスとして TTS アバターを有効にするには、テキスト読み上げアバターのリアルタイム合成に関する記事と、アバターを使用したチャット シナリオのサンプル コードをご覧ください。
- Azure OpenAI では、プロンプト入力と生成された出力に対してコンテンツ モデレーションも実行されます。 有害なコンテンツが検出された場合、プロンプトまたは応答がフィルター処理される可能性があります。 詳しくは、コンテンツ フィルターアーティクルを参照してください。
リソースをクリーンアップする
Azure portal または Azure コマンドライン インターフェイス (CLI) を使用して、作成した音声リソースを削除できます。
リファレンス ドキュメント | パッケージ (PyPi) | GitHub 上のその他のサンプル
このハウツー ガイドでは、Azure AI Speech を使用して、Azure AI Foundry モデルの Azure OpenAI と対話できます。 Speech サービスによって認識されたテキストは、Azure OpenAI に送信されます。 Speech サービスでは、Azure OpenAI からのテキスト応答から音声が合成されます。
マイクに話し込み、Azure OpenAI との会話を開始します。
- Speech サービスは音声を認識し、テキストに変換します (音声テキスト変換)。
- テキストとしての要求が Azure OpenAI に送信されます。
- Speech サービスのテキスト読み上げ機能では、Azure OpenAI からの応答を既定のスピーカーに合成します。
この例のエクスペリエンスはやり取りですが、Azure OpenAI では会話のコンテキストを覚えていません。
前提条件
- Azure サブスクリプション - 無料アカウントを作成します
- Azure portal で Azure AI Foundry Models リソースに Microsoft Azure OpenAI を作成 します。
- Azure OpenAI リソースに モデル をデプロイします。 モデル デプロイの詳細については、 Azure OpenAI リソース デプロイ ガイドを参照してください。
- Azure OpenAI リソース キーとエンドポイントを取得します。 Azure OpenAI リソースがデプロイされたら、[リソースに移動] を選択して、キーを表示および管理します。
- Azure portal で音声用の AI Foundry リソースを作成します。
- Speech リソース キーとリージョンを取得します。 音声リソースがデプロイされたら、[リソースに移動] を選択して、キーを表示および管理します。
環境をセットアップする
Speech SDK Python は、Python パッケージ インデックス (PyPI) モジュールとして入手できます。 Speech SDK for Python は、Windows、Linux、macOS との互換性があります。
- お使いのプラットフォームに対応した Visual Studio 2015、2017、2019、2022 の Microsoft Visual C++ 再頒布可能パッケージをインストールします。 このパッケージを初めてインストールする場合、再起動が必要になる可能性があります。
- Linux では、x64 ターゲット アーキテクチャを使う必要があります。
Python の 3.7 以降のバージョンをインストールします。 最初に、これ以上要件がないか、SDK のインストール ガイドを確認してください。
次の Python ライブラリをインストールします。os
、requests
、json
.
環境変数の設定
この例では、AZURE_OPENAI_API_KEY
、AZURE_OPENAI_ENDPOINT
、AZURE_OPENAI_CHAT_DEPLOYMENT
、SPEECH_KEY
、SPEECH_REGION
という名前の環境変数が必要です。
Azure AI Foundry リソースにアクセスするには、アプリケーションを認証する必要があります。 この記事では、環境変数を使って資格情報を保存する方法について説明します。 その後、コードから環境変数にアクセスして、アプリケーションを認証できます。 運用環境では、資格情報を保存してそれにアクセスする際に、安全性が高い方法を使用します。
重要
Microsoft Entra 認証と Azure リソースのマネージド ID を併用して、クラウドで実行されるアプリケーションに資格情報を格納しないようにすることをお勧めします。
API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使用する場合は、Azure Key Vault に安全に格納し、キーを定期的にローテーションし、ロールベースのアクセス制御とネットワーク アクセス制限を使用して Azure Key Vault へのアクセスを制限してください。 アプリで API キーを安全に使用する方法の詳細については、Azure Key Vault を使用した API キーに関するページを参照してください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
環境変数を設定するには、コンソール ウィンドウを開き、オペレーティング システムと開発環境の指示に従います。
-
AZURE_OPENAI_API_KEY
環境変数を設定するには、your-openai-key
をリソースのキーの 1 つに置き換えます。 -
AZURE_OPENAI_ENDPOINT
環境変数を設定するには、your-openai-endpoint
をリソースのリージョンの 1 つに置き換えます。 -
AZURE_OPENAI_CHAT_DEPLOYMENT
環境変数を設定するには、your-openai-deployment-name
をリソースのリージョンの 1 つに置き換えます。 -
SPEECH_KEY
環境変数を設定するには、your-speech-key
をリソースのキーの 1 つに置き換えます。 -
SPEECH_REGION
環境変数を設定するには、your-speech-region
をリソースのリージョンの 1 つに置き換えます。
setx AZURE_OPENAI_API_KEY your-openai-key
setx AZURE_OPENAI_ENDPOINT your-openai-endpoint
setx AZURE_OPENAI_CHAT_DEPLOYMENT your-openai-deployment-name
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region
注
現在実行中のコンソール内の環境変数にのみアクセスする必要がある場合は、環境変数を set
の代わりに setx
に設定します。
環境変数を追加した後、コンソール ウィンドウを含め、環境変数を読み取る必要がある実行中のプログラムの再起動が必要になる場合があります。 たとえば、エディターが Visual Studio である場合、サンプルを実行する前に Visual Studio を再起動します。
マイクから音声を認識する
次の手順を実行して、新しいコンソール アプリケーションを作成します。
新しいプロジェクトを作成したいフォルダーでコマンド プロンプト ウィンドウを開きます。 新しいプロジェクトを作成するコマンド プロンプトを開き、
azure-openai-speech.py
という名前の新しいファイルを作成します。次のコマンドを実行して、Speech SDK をインストールします。
pip install azure-cognitiveservices-speech
次のコマンドを実行して、 OpenAI SDK をインストールします:
pip install openai
注
このライブラリは、Microsoft Azure ではなく OpenAI によって管理されます。 このライブラリの最新の更新を追跡するには、リリース履歴または version.py のコミット履歴を参照してください。
azure-openai-speech.py という名前のファイルを作成します。 次のコードをそのファイルにコピーします。
import os import azure.cognitiveservices.speech as speechsdk from openai import AzureOpenAI # This example requires environment variables named "AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT" and "AZURE_OPENAI_CHAT_DEPLOYMENT" # Your endpoint should look like the following https://YOUR_OPEN_AI_RESOURCE_NAME.openai.azure.com/ client = AzureOpenAI( azure_endpoint=os.environ.get('AZURE_OPENAI_ENDPOINT'), api_key=os.environ.get('AZURE_OPENAI_API_KEY'), api_version="2023-05-15" ) # This will correspond to the custom name you chose for your deployment when you deployed a model. deployment_id=os.environ.get('AZURE_OPENAI_CHAT_DEPLOYMENT') # This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), region=os.environ.get('SPEECH_REGION')) audio_output_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True) audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True) # Should be the locale for the speaker's language. speech_config.speech_recognition_language="en-US" speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config) # The language of the voice that responds on behalf of Azure OpenAI. speech_config.speech_synthesis_voice_name='en-US-JennyMultilingualNeural' speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_output_config) # tts sentence end mark tts_sentence_end = [ ".", "!", "?", ";", "。", "!", "?", ";", "\n" ] # Prompts Azure OpenAI with a request and synthesizes the response. def ask_azure_openai(prompt): # Ask Azure OpenAI in streaming way response = client.chat.completions.create(model=deployment_id, max_tokens=200, stream=True, messages=[ {"role": "user", "content": prompt} ]) collected_messages = [] last_tts_request = None # iterate through the stream response stream for chunk in response: if len(chunk.choices) > 0: chunk_message = chunk.choices[0].delta.content # extract the message if chunk_message is not None: collected_messages.append(chunk_message) # save the message if chunk_message in tts_sentence_end: # sentence end found text = ''.join(collected_messages).strip() # join the recieved message together to build a sentence if text != '': # if sentence only have \n or space, we could skip print(f"Speech synthesized to speaker for: {text}") last_tts_request = speech_synthesizer.speak_text_async(text) collected_messages.clear() if last_tts_request: last_tts_request.get() # Continuously listens for speech input to recognize and send as text to Azure OpenAI def chat_with_azure_openai(): while True: print("Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.") try: # Get audio from the microphone and then send it to the TTS service. speech_recognition_result = speech_recognizer.recognize_once_async().get() # If speech is recognized, send it to Azure OpenAI and listen for the response. if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech: if speech_recognition_result.text == "Stop.": print("Conversation ended.") break print("Recognized speech: {}".format(speech_recognition_result.text)) ask_azure_openai(speech_recognition_result.text) elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch: print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details)) break elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled: cancellation_details = speech_recognition_result.cancellation_details print("Speech Recognition canceled: {}".format(cancellation_details.reason)) if cancellation_details.reason == speechsdk.CancellationReason.Error: print("Error details: {}".format(cancellation_details.error_details)) except EOFError: break # Main try: chat_with_azure_openai() except Exception as err: print("Encountered exception. {}".format(err))
Azure OpenAI によって返されるトークンの数を増減するには、
max_tokens
パラメーターを変更します。 トークンとコストへの影響の詳細については、「 Azure OpenAI トークン と Azure OpenAI の価格」を参照してください。新しいコンソール アプリケーションを実行して、マイクからの音声認識を開始します。
python azure-openai-speech.py
重要
AZURE_OPENAI_API_KEY
の説明に従って、環境変数 AZURE_OPENAI_ENDPOINT
、AZURE_OPENAI_CHAT_DEPLOYMENT
、SPEECH_KEY
、SPEECH_REGION
、 を設定してください。 これらの変数を設定しない場合、サンプルはエラー メッセージが表示されて失敗します。
指示されたらマイクに向って話します。 コンソール出力には、読み上げを開始するためのプロンプト、テキストとしての要求、次に Azure OpenAI からの応答がテキストとして含まれます。 Azure OpenAI からの応答は、テキストから音声に変換してから、既定のスピーカーに出力する必要があります。
PS C:\dev\openai\python> python.exe .\azure-openai-speech.py
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech:Make a comma separated list of all continents.
Azure OpenAI response:Africa, Antarctica, Asia, Australia, Europe, North America, South America
Speech synthesized to speaker for text [Africa, Antarctica, Asia, Australia, Europe, North America, South America]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Recognized speech: Make a comma separated list of 1 Astronomical observatory for each continent. A list should include each continent name in parentheses.
Azure OpenAI response:Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)
Speech synthesized to speaker for text [Mauna Kea Observatories (North America), La Silla Observatory (South America), Tenerife Observatory (Europe), Siding Spring Observatory (Australia), Beijing Xinglong Observatory (Asia), Naukluft Plateau Observatory (Africa), Rutherford Appleton Laboratory (Antarctica)]
Azure OpenAI is listening. Say 'Stop' or press Ctrl-Z to end the conversation.
Conversation ended.
PS C:\dev\openai\python>
解説
いくつかの考慮事項を次に示します。
- 音声認識言語を変更するには、
en-US
を別のen-US
に置き換えます。 たとえば、スペイン語 (スペイン) の場合は、es-ES
を作成します。 既定の言語はen-US
です。 話される可能性のある複数の言語の 1 つを識別する方法の詳細については、言語の識別に関するページを参照してください。 - 読み上げる音声を変更するには、別の
en-US-JennyMultilingualNeural
にを置き換えます。 Azure OpenAIから返されたテキストの言語が音声で読み上げられない場合、Speech サービスでは合成された音声が出力されません。 - テキスト読み上げ出力の待ち時間を短縮するには、テキスト ストリーミング機能を使います。これを使うと、高速オーディオ生成のためのリアルタイム テキスト処理が有効になり、待ち時間が最小限に抑えられて、リアルタイム オーディオ出力の滑らかさと応答性が向上します。 「テキスト ストリーミングの使用方法」をご覧ください。
- 音声出力の視覚的なエクスペリエンスとして TTS アバターを有効にするには、テキスト読み上げアバターのリアルタイム合成に関する記事と、アバターを使用したチャット シナリオのサンプル コードをご覧ください。
- Azure OpenAI では、プロンプト入力と生成された出力に対してコンテンツ モデレーションも実行されます。 有害なコンテンツが検出された場合、プロンプトまたは応答がフィルター処理される可能性があります。 詳しくは、コンテンツ フィルターアーティクルを参照してください。
リソースをクリーンアップする
Azure portal または Azure コマンドライン インターフェイス (CLI) を使用して、作成した音声リソースを削除できます。