你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:通过 Azure OpenAI 服务进行文本转语音
在本快速入门中,你将使用 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 Studio 中的“部署”页找到终结点。 示例终结点为:https://docs-test-001.openai.azure.com/ 。 |
AZURE_OPENAI_API_KEY |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1 或 KEY2 。 |
在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1
或 KEY2
。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。
环境变量
为密钥和终结点创建和分配持久环境变量。
重要
如果使用 API 密钥,请将其安全地存储在某个其他位置,例如 Azure Key Vault 中。 请不要直接在代码中包含 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=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。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性一文。
先决条件
- Azure 订阅 - 免费创建订阅
- LTS 版本的 Node.js
- Azure CLI用于本地开发环境中的无密码身份验证,请使用 Azure CLI 登录以创建必要的上下文。
- 在受支持的区域中创建的 Azure OpenAI 资源(请参阅区域可用性)。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
设置
检索密钥和终结点
若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。
变量名称 | 值 |
---|---|
AZURE_OPENAI_ENDPOINT |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到服务终结点。 或者,也可以通过 Azure AI Studio 中的“部署”页找到终结点。 示例终结点为:https://docs-test-001.openai.azure.com/ 。 |
AZURE_OPENAI_API_KEY |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1 或 KEY2 。 |
在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1
或 KEY2
。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。
环境变量
为密钥和终结点创建和分配持久环境变量。
重要
如果使用 API 密钥,请将其安全地存储在某个其他位置,例如 Azure Key Vault 中。 请不要直接在代码中包含 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"
创建 Node 应用程序
在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。 然后运行 npm init
命令以使用 package.json 文件创建一个 node 应用程序。
npm init
安装客户端库
使用以下命令安装客户端库:
npm install openai @azure/identity
你的应用的 package.json 文件将随依赖项进行更新。
创建语音文件
创建一个名为 Text-to-speech.js 的新文件,然后在首选代码编辑器中打开它。 将以下代码复制到 Text-to-speech.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"] || "<endpoint>"; const speechFilePath = "<path to save the speech file>"; // Required Azure OpenAI deployment name and API version const deploymentName = "tts"; const apiVersion = "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); });
使用以下命令运行该脚本:
node Text-to-speech.js
先决条件
- Azure 订阅 - 免费创建订阅
- LTS 版本的 Node.js
- TypeScript
- Azure CLI用于本地开发环境中的无密码身份验证,请使用 Azure CLI 登录以创建必要的上下文。
- 在受支持的区域中创建的 Azure OpenAI 资源(请参阅区域可用性)。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
设置
检索密钥和终结点
若要成功对 Azure OpenAI 发出调用,需要一个终结点和一个密钥。
变量名称 | 值 |
---|---|
AZURE_OPENAI_ENDPOINT |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 或者,可以在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://aoai-docs.openai.azure.com/ 。 |
AZURE_OPENAI_API_KEY |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1 或 KEY2 。 |
在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1
或 KEY2
。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。
环境变量
为密钥和终结点创建和分配持久环境变量。
重要
如果使用 API 密钥,请将其安全地存储在某个其他位置,例如 Azure Key Vault 中。 请不要直接在代码中包含 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"
创建 Node 应用程序
在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。 然后运行 npm init
命令以使用 package.json 文件创建一个 node 应用程序。
npm init
安装客户端库
使用以下命令安装客户端库:
npm install openai @azure/identity
你的应用的 package.json 文件将随依赖项进行更新。
创建语音文件
创建一个名为 Text-to-speech.ts 的新文件,然后在首选代码编辑器中打开它。 将以下代码复制到 Text-to-speech.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"] || "<endpoint>"; const speechFilePath = "<path to save the speech file>"; // Required Azure OpenAI deployment name and API version const deploymentName = "tts"; const apiVersion = "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
。使用以下命令生成应用程序:
tsc
使用以下命令运行应用程序:
node Text-to-speech.js
先决条件
- Azure 订阅。 可以免费创建一个帐户。
- 在受支持区域中部署的具有 Whisper 模型的 Azure OpenAI 资源。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
- The .NET 8.0 SDK
创建 .NET 应用
使用
dotnet new
命令创建 .NET 应用:dotnet new console -n TextToSpeech
更改为新应用的目录:
cd OpenAISpeech
安装
Azure.OpenAI
客户端库:dotnet add package Azure.AI.OpenAI
对 Azure OpenAI 进行身份验证和连接
若要向 Azure OpenAI 服务发出请求,需要服务终结点以及通过以下选项之一的身份验证凭据:
Microsoft Entra ID 是向 Azure 服务进行身份验证的建议方法,比基于密钥的替代方法更安全。
访问密钥允许提供用于连接到资源的密钥。
重要
应谨慎使用访问密钥。 如果你的服务访问密钥丢失或意外地暴露在不安全的位置,服务可能会变得易受攻击。 拥有访问密钥的任何人都可以授权针对 Azure OpenAI 服务的请求。
获取 Azure OpenAI 终结点
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到服务终结点。 或者,也可以通过 Azure AI Studio 中的“部署”页找到终结点。 示例终结点为:https://docs-test-001.openai.azure.com/
。
使用 Microsoft Entra ID 进行身份验证
如果选择使用 Microsoft Entra ID 身份验证,则需要完成以下操作:
添加
Azure.Identity
程序包。dotnet add package Azure.Identity
将
Cognitive Services User
角色分配给用户帐户。 这可以在 Azure 门户中你的 OpenAI 资源内的“访问控制(IAM)”>“添加角色分配”下完成。通过
az login
使用 Visual Studio 或 Azure CLI 登录到 Azure。
使用密钥进行身份验证
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到访问密钥值。 可以使用 KEY1
或 KEY2
。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。
更新应用代码
将
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"; var openAIClient = new AzureOpenAIClient(endpoint, credentials); var 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");
重要
对于生产环境来说,请使用安全的方法(例如 Azure Key Vault)来存储和访问你的凭据。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性。
使用
dotnet run
命令或 Visual Studio 顶部的运行按钮运行应用程序:dotnet run
应用会在你为
speechFilePath
变量指定的位置生成音频文件。 播放设备上的文件,以听到生成的音频。
清理资源
如果你想要清理和移除 Azure OpenAI 资源,可以删除该资源。 在删除资源之前,必须先删除所有已部署的模型。
后续步骤
- 在 Azure OpenAI 服务参考文档中详细了解如何通过 Azure OpenAI 服务进行文本转语音。
- 有关更多示例,请查看 Azure OpenAI 示例 GitHub 存储库。