你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将使用 Azure OpenAI 通过 OpenAI 语音进行文本语音转换。
可用语音为:alloy、echo、fable、onyx、nova 和 shimmer。 有关详细信息,请参阅 Azure OpenAI 文档中的文本转语音参考。
先决条件
- Azure 订阅 - 免费创建订阅。
- 在美国中北部或瑞典中部区域创建的 Azure OpenAI 资源,其中部署了模型
tts-1或tts-1-hd。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
设置
检索密钥和终结点
若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。
| 变量名称 | 价值 |
|---|---|
AZURE_OPENAI_ENDPOINT |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到服务终结点。 或者,也可以通过 Azure AI Foundry 门户中的“部署”页找到该终结点。 示例终结点为:https://docs-test-001.openai.azure.com/。 |
AZURE_OPENAI_API_KEY |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1 或 KEY2。 |
在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1 或 KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。
环境变量
为密钥和终结点创建和分配持久环境变量。
重要
请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请将其安全地存储在 Azure Key Vault 中。 若要详细了解如何在应用中安全地使用 API 密钥,请参阅 API 密钥与 Azure 密钥保管库。
有关 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 shell 中运行以下命令: 需要将 YourDeploymentName 替换为你在部署文本转语音模型时选择的部署名称。 部署名称不一定与模型名称相同。 输入模型名称将会导致错误,除非所选部署名称与基础模型名称相同。
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/YourDeploymentName/audio/speech?api-version=2025-04-01-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=2025-04-01-preview \。
重要
在生产中,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关凭据安全性的详细信息,请参阅此 安全 文章。
先决条件
- Azure 订阅 - 免费创建订阅
- LTS 版本的 Node.js
- Azure CLI用于本地开发环境中的无密码身份验证,请使用 Azure CLI 登录以创建必要的上下文。
- 在受支持的区域中创建的 Azure OpenAI 资源(请参阅区域可用性)。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(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 门户检查资源时,可在“密钥和终结点”部分中找到此值。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”“模型部署”下提供了此值。> |
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
先决条件
- Azure 订阅 - 免费创建订阅
- LTS 版本的 Node.js
- TypeScript
- Azure CLI用于本地开发环境中的无密码身份验证,请使用 Azure CLI 登录以创建必要的上下文。
- 在受支持的区域中创建的 Azure OpenAI 资源(请参阅区域可用性)。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(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 门户检查资源时,可在“密钥和终结点”部分中找到此值。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”“模型部署”下提供了此值。> |
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 || "2025-04-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。创建
tsconfig.json文件以转译 TypeScript 代码,然后复制以下 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 订阅。 可以免费创建一个帐户。
- 一个 Azure OpenAI 资源,其中包含在
tts部署的文本转语音模型(例如 )。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。 - The .NET 8.0 SDK
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(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 门户检查资源时,可在“密钥和终结点”部分中找到此值。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”“模型部署”下提供了此值。> |
OPENAI_API_VERSION |
详细了解 API 版本。 可以在代码中更改版本或使用环境变量。 |
运行快速入门
本快速入门中的示例代码使用 Microsoft Entra ID 进行推荐的无密钥身份验证。 如果希望使用 API 密钥,可以将 DefaultAzureCredential 对象替换为 AzureKeyCredential 对象。
AzureOpenAIClient openAIClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential());
若要运行快速入门,请执行以下步骤:
将
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");使用
dotnet run命令或 Visual Studio 顶部的运行按钮运行应用程序:dotnet run
输出
应用程序将在为 speechFilePath 变量指定的位置生成音频文件。 播放设备上的文件,以听到生成的音频。
清理资源
如果你想要清理和移除 Azure OpenAI 资源,可以删除该资源。 在删除资源之前,必须先删除所有已部署的模型。
- Azure 门户
- Azure CLI
后续步骤
- 在Azure OpenAI 参考文档中查看更多关于如何使用文本转语音与 Azure OpenAI 互动的信息。
- 有关更多示例,请查看 Azure OpenAI 示例 GitHub 存储库。