このクイックスタートでは、Azure OpenAI を利用して、OpenAI 音声を使用したテキスト読み上げ機能を実現します。
使用可能な音声は、alloy
、echo
、fable
、onyx
、nova
、shimmer
です。 詳細については、 テキスト読み上げに関する Azure OpenAI リファレンス ドキュメントを参照してください。
前提条件
- Azure サブスクリプション。無料で作成できます。
tts-1
またはtts-1-hd
モデルがデプロイされた米国中北部またはスウェーデン中部リージョンで作成された Azure OpenAI リソース。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。
設定
キーとエンドポイントを取得する
Azure OpenAI に対して正常に呼び出しを行うには、エンドポイントとキーが必要です。
変数名 | 価値 |
---|---|
AZURE_OPENAI_ENDPOINT |
サービス エンドポイントは、Azure portal でリソースを調べるときに、[キーとエンドポイント] セクションで確認できます。 または、Azure AI Foundry ポータルの [デプロイ] ページからエンドポイントを見つけることができます。 エンドポイントの例: https://docs-test-001.openai.azure.com/ 。 |
AZURE_OPENAI_API_KEY |
この値は、Azure portal からリソースを確認する際に、 [Keys & Endpoint](キーとエンドポイント) セクションで確認することができます。 KEY1 または KEY2 を使用できます。 |
Azure portal でリソースに移動します。 [エンドポイントとキー] は [リソース管理] セクションにあります。 エンドポイントとアクセス キーをコピーします。これらは、API 呼び出しを認証するために両方とも必要です。 KEY1
または KEY2
を使用できます。 常に 2 つのキーを用意しておくと、サービスを中断させることなく、キーのローテーションと再生成を安全に行うことができます。
環境変数
キーとエンドポイントの永続的な環境変数を作成して割り当てます。
重要
API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使用する場合は、Azure Key Vault に安全に保存します。 アプリで API キーを安全に使用する方法の詳細については、Azure Key Vault を使用した API キーに関するページを参照してください。
AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。
setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
REST 要求と応答を作成する
Bash シェルで、次のコマンドを実行します。 YourDeploymentName
を、テキスト読み上げモデルをデプロイしたときに選択したデプロイ名に置き換える必要があります。 デプロイ名は必ずしもモデル名と同じではありません。 基になるモデル名と同じデプロイ名を選ばないと、モデル名の入力時にエラーが発生します。
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/YourDeploymentName/audio/speech?api-version=2024-02-15-preview \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1-hd",
"input": "I'm excited to try text to speech.",
"voice": "alloy"
}' --output speech.mp3
エンドポイントの例を含むコマンドの最初の行の形式は、curl https://aoai-docs.openai.azure.com/openai/deployments/{YourDeploymentName}/audio/speech?api-version=2024-02-15-preview \
のようになります。
重要
運用環境では、Azure Key Vault などの資格情報を格納してアクセスする安全な方法を使用します。 資格情報のセキュリティの詳細については、この セキュリティ に関する記事を参照してください。
ソース コード | パッケージ (npm) | サンプル
前提条件
- Azure サブスクリプション - 無料アカウントを作成します
- Node.js の LTS バージョン
- Azure CLI をローカル開発環境でのパスワードレス認証に使用する場合は、Azure CLI でサインインして必要なコンテキストを作成します。
- サポートされるリージョンに作成された Azure OpenAI リソース (利用可能なリージョンの情報をご覧ください)。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。
Microsoft Entra ID の前提条件
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
- Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
- ユーザー アカウントに
Cognitive Services User
ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。
設定
synthesis-quickstart
新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。mkdir synthesis-quickstart && cd synthesis-quickstart
次のコマンドで
package.json
を作成します。npm init -y
次を使用して JavaScript 用の OpenAI クライアント ライブラリをインストールします。
npm install openai
推奨されるパスワードレス認証は次のとおりです。
npm install @azure/identity
リソース情報の取得
Azure OpenAI リソースでアプリケーションを認証するには、次の情報を取得する必要があります。
変数名 | 価値 |
---|---|
AZURE_OPENAI_ENDPOINT |
この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。 |
OPENAI_API_VERSION |
API バージョンの詳細を参照してください。 コードでバージョンを変更することも、環境変数を使用することもできます。 |
注意事項
SDK で推奨されるキーレス認証を使用するには、AZURE_OPENAI_API_KEY
環境変数が設定されていないことを確認します。
音声ファイルを作成する
次のコードを使用して
index.js
ファイルを作成します。const { writeFile } = require("fs/promises"); const { AzureOpenAI } = require("openai"); const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity"); require("openai/shims/node"); // You will need to set these environment variables or edit the following values const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "Your endpoint"; const speechFilePath = "<path to save the speech file>"; // Required Azure OpenAI deployment name and API version const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "tts"; const apiVersion = process.env.OPENAI_API_VERSION || "2024-08-01-preview"; // keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); function getClient() { return new AzureOpenAI({ endpoint, azureADTokenProvider, apiVersion, deployment: deploymentName, }); } async function generateAudioStream( client, params ) { const response = await client.audio.speech.create(params); if (response.ok) return response.body; throw new Error(`Failed to generate audio stream: ${response.statusText}`); } export async function main() { console.log("== Text to Speech Sample =="); const client = getClient(); const streamToRead = await generateAudioStream(client, { model: deploymentName, voice: "alloy", input: "the quick brown chicken jumped over the lazy dogs", }); console.log(`Streaming response to ${speechFilePath}`); await writeFile(speechFilePath, streamToRead); console.log("Finished streaming"); } main().catch((err) => { console.error("The sample encountered an error:", err); });
次のコマンドを使用して Azure にサインインします。
az login
JavaScript ファイルを実行します。
node index.js
ソース コード | パッケージ (npm) | サンプル
前提条件
- Azure サブスクリプション - 無料アカウントを作成します
- Node.js の LTS バージョン
- TypeScript
- Azure CLI をローカル開発環境でのパスワードレス認証に使用する場合は、Azure CLI でサインインして必要なコンテキストを作成します。
- サポートされるリージョンに作成された Azure OpenAI リソース (利用可能なリージョンの情報をご覧ください)。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。
Microsoft Entra ID の前提条件
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
- Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
- ユーザー アカウントに
Cognitive Services User
ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。
設定
assistants-quickstart
新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。mkdir assistants-quickstart && cd assistants-quickstart
次のコマンドで
package.json
を作成します。npm init -y
次のコマンドを使用して、
package.json
を ECMAScript に更新します。npm pkg set type=module
次を使用して JavaScript 用の OpenAI クライアント ライブラリをインストールします。
npm install openai
推奨されるパスワードレス認証は次のとおりです。
npm install @azure/identity
リソース情報の取得
Azure OpenAI リソースでアプリケーションを認証するには、次の情報を取得する必要があります。
変数名 | 価値 |
---|---|
AZURE_OPENAI_ENDPOINT |
この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。 |
OPENAI_API_VERSION |
API バージョンの詳細を参照してください。 コードでバージョンを変更することも、環境変数を使用することもできます。 |
注意事項
SDK で推奨されるキーレス認証を使用するには、AZURE_OPENAI_API_KEY
環境変数が設定されていないことを確認します。
音声ファイルを作成する
次のコードを使用して
index.ts
ファイルを作成します。import { writeFile } from "fs/promises"; import { AzureOpenAI } from "openai"; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; import type { SpeechCreateParams } from "openai/resources/audio/speech"; import "openai/shims/node"; // You will need to set these environment variables or edit the following values const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "Your endpoint"; const speechFilePath = "<path to save the speech file>"; // Required Azure OpenAI deployment name and API version const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "tts"; const apiVersion = process.env.OPENAI_API_VERSION || "2024-08-01-preview"; // keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); function getClient(): AzureOpenAI { return new AzureOpenAI({ endpoint, azureADTokenProvider, apiVersion, deployment: deploymentName, }); } async function generateAudioStream( client: AzureOpenAI, params: SpeechCreateParams ): Promise<NodeJS.ReadableStream> { const response = await client.audio.speech.create(params); if (response.ok) return response.body; throw new Error(`Failed to generate audio stream: ${response.statusText}`); } export async function main() { console.log("== Text to Speech Sample =="); const client = getClient(); const streamToRead = await generateAudioStream(client, { model: deploymentName, voice: "alloy", input: "the quick brown chicken jumped over the lazy dogs", }); console.log(`Streaming response to ${speechFilePath}`); await writeFile(speechFilePath, streamToRead); console.log("Finished streaming"); } main().catch((err) => { console.error("The sample encountered an error:", err); });
Node.js 環境でコードを実行する場合は、
"openai/shims/node"
のインポートが必要です。 これにより、client.audio.speech.create
メソッドの出力の種類がNodeJS.ReadableStream
に正しく設定されるようになります。TypeScript コードをトランスパイルするために
tsconfig.json
ファイルを作成して、ECMAScript 向けの次のコードをコピーします。{ "compilerOptions": { "module": "NodeNext", "target": "ES2022", // Supports top-level await "moduleResolution": "NodeNext", "skipLibCheck": true, // Avoid type errors from node_modules "strict": true // Enable strict type-checking options }, "include": ["*.ts"] }
TypeScript から JavaScript にトランスパイルします。
tsc
次のコマンドを使用して Azure にサインインします。
az login
次のコマンドを使用して、コードを実行します。
node index.js
前提条件
- Azure サブスクリプション。 無料で作成できます。
tts
にデプロイされたテキスト読み上げモデル ( など) を含む Azure OpenAI リソース。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。- .NET 8.0 SDK
Microsoft Entra ID の前提条件
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
- Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
- ユーザー アカウントに
Cognitive Services User
ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。
設定
to-speech-quickstart
新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。mkdir to-speech-quickstart && cd to-speech-quickstart
次のコマンドを使用して新しいコンソール アプリケーションを作成します。
dotnet new console
dotnet add package コマンドを使用して、OpenAI .NET クライアント ライブラリをインストールします。
dotnet add package Azure.AI.OpenAI
Microsoft Entra ID を使用する推奨されるキーレス認証の場合、次のコマンドを使用して Azure.Identity パッケージをインストールします。
dotnet add package Azure.Identity
Microsoft Entra ID を使用する推奨されるキーレス認証の場合、次のコマンドを使用して Azure にサインインします。
az login
リソース情報の取得
Azure OpenAI リソースでアプリケーションを認証するには、次の情報を取得する必要があります。
変数名 | 価値 |
---|---|
AZURE_OPENAI_ENDPOINT |
この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。 |
OPENAI_API_VERSION |
API バージョンの詳細を参照してください。 コードでバージョンを変更することも、環境変数を使用することもできます。 |
クイック スタートを実行する
このクイックスタートのサンプル コードでは、推奨されるキーレス認証に Microsoft Entra ID を使用します。 API キーを使用する場合は、 DefaultAzureCredential
オブジェクトを AzureKeyCredential
オブジェクトに置き換えることができます。
AzureOpenAIClient openAIClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential());
注
wikipediaOcelot.wav などのサンプル オーディオ ファイルを、GitHub の Azure AI Speech SDK リポジトリから取得できます。
クイック スタートを実行するには、次の手順に従います。
Program.cs
の内容を次のコードに置き換え、プレースホルダーの値を自分の値で更新します。using Azure; using Azure.AI.OpenAI; using Azure.Identity; // Required for Passwordless auth var endpoint = new Uri( Environment.GetEnvironmentVariable("YOUR_OPENAI_ENDPOINT") ?? throw new ArgumentNullException()); var credentials = new DefaultAzureCredential(); // Use this line for key auth // var credentials = new AzureKeyCredential( // Environment.GetEnvironmentVariable("YOUR_OPENAI_KEY") ?? throw new ArgumentNullException()); var deploymentName = "tts"; // Default deployment name, update with your own if necessary var speechFilePath = "YOUR_AUDIO_FILE_PATH"; AzureOpenAIClient openAIClient = new AzureOpenAIClient(endpoint, credentials); AudioClient audioClient = openAIClient.GetAudioClient(deploymentName); var result = await audioClient.GenerateSpeechAsync( "the quick brown chicken jumped over the lazy dogs"); Console.WriteLine("Streaming response to ${speechFilePath}"); await File.WriteAllBytesAsync(speechFilePath, result.Value.ToArray()); Console.WriteLine("Finished streaming");
アプリケーションを実行するには、Visual Studio の上部にある
dotnet run
コマンドまたは実行ボタンを使用します。dotnet run
アウトプット
アプリケーションは、 speechFilePath
変数に指定した場所にオーディオ ファイルを生成します。 ご利用のデバイスでこのファイルを再生し、生成されたオーディオを聞きます。
リソースをクリーンアップする
Azure OpenAI リソースをクリーンアップして削除したい場合は、リソースを削除できます。 リソースを削除する前に、まずデプロイされたモデルを削除する必要があります。
次のステップ
- Azure OpenAI でテキスト読み上げを操作する方法の詳細については、 Azure OpenAI リファレンス ドキュメントを参照してください。
- その他の例については、Azure OpenAI サンプルの GitHub リポジトリを参照してください