빠른 시작: Azure OpenAI Service를 사용하여 텍스트 음성 변환
이 빠른 시작에서는 OpenAI 음성을 사용하여 텍스트 음성 변환에 Azure OpenAI Service를 사용합니다.
사용 가능한 음성은 다음과 같습니다. alloy
, echo
, fable
, onyx
, nova
, shimmer
. 자세한 내용은 텍스트 음성 변환에 대한 Azure OpenAI Service 참조 설명서를 참조하세요.
필수 조건
- Azure 구독 – 체험 구독을 만듭니다.
- 배포된
tts-1
또는tts-1-hd
모델을 사용하여 미국 중북부 또는 스웨덴 중부 지역에서 만든 Azure OpenAI 리소스입니다. 자세한 내용은 Azure OpenAI를 사용하여 리소스 만들기 및 모델 배포를 참조하세요.
설정
키 및 엔드포인트 검색
Azure OpenAI에 대해 성공적으로 호출하려면 엔드포인트와 키가 필요합니다.
변수 이름 | 값 |
---|---|
AZURE_OPENAI_ENDPOINT |
서비스 엔드포인트는 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure AI Studio의 배포 페이지를 통해 엔드포인트를 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/ 입니다. |
AZURE_OPENAI_API_KEY |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2 를 사용할 수 있습니다. |
Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키는 리소스 관리 섹션에서 찾을 수 있습니다. API 호출을 인증하는 데 모두 필요하므로 엔드포인트 및 액세스 키를 복사합니다. KEY1
또는 KEY2
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
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 \
.
Important
프로덕션의 경우 Azure Key Vault와 같은 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 자격 증명 보안에 대한 자세한 내용은 Azure AI 서비스 보안 문서를 참조하세요.
필수 조건
- Azure 구독 - 체험 구독 만들기
- Node.js의 LTS 버전
- 로컬 개발 환경에서 암호 없는 인증에 사용되는 Azure CLI는 Azure CLI로 로그인하여 필요한 컨텍스트를 만듭니다.
- 지원되는 지역에서 만든 Azure OpenAI 리소스(지역 가용성 참조)입니다. 자세한 내용은 Azure OpenAI를 사용하여 리소스 만들기 및 모델 배포를 참조하세요.
설정
키 및 엔드포인트 검색
Azure OpenAI에 대해 성공적으로 호출하려면 엔드포인트와 키가 필요합니다.
변수 이름 | 값 |
---|---|
AZURE_OPENAI_ENDPOINT |
서비스 엔드포인트는 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure AI Studio의 배포 페이지를 통해 엔드포인트를 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/ 입니다. |
AZURE_OPENAI_API_KEY |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2 를 사용할 수 있습니다. |
Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키는 리소스 관리 섹션에서 찾을 수 있습니다. API 호출을 인증하는 데 모두 필요하므로 엔드포인트 및 액세스 키를 복사합니다. KEY1
또는 KEY2
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
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"
노드 애플리케이션 만들기
콘솔 창(예: cmd, PowerShell 또는 Bash)에서 앱에 대한 새 디렉터리를 만들고 이 디렉터리로 이동합니다. 그런 다음 npm init
명령을 실행하여 package.json 파일이 있는 노드 애플리케이션을 만듭니다.
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 구독 - 체험 구독 만들기
- Node.js의 LTS 버전
- TypeScript
- 로컬 개발 환경에서 암호 없는 인증에 사용되는 Azure CLI는 Azure CLI로 로그인하여 필요한 컨텍스트를 만듭니다.
- 지원되는 지역에서 만든 Azure OpenAI 리소스(지역 가용성 참조)입니다. 자세한 내용은 Azure OpenAI를 사용하여 리소스 만들기 및 모델 배포를 참조하세요.
설정
키 및 엔드포인트 검색
Azure OpenAI에 대해 성공적으로 호출하려면 엔드포인트와 키가 필요합니다.
변수 이름 | 값 |
---|---|
AZURE_OPENAI_ENDPOINT |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure OpenAI Studio>플레이그라운드>코드 보기에서 값을 찾을 수 있습니다. 예제 엔드포인트는 https://aoai-docs.openai.azure.com/ 입니다. |
AZURE_OPENAI_API_KEY |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2 를 사용할 수 있습니다. |
Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키는 리소스 관리 섹션에서 찾을 수 있습니다. API 호출을 인증하는 데 모두 필요하므로 엔드포인트 및 액세스 키를 복사합니다. KEY1
또는 KEY2
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
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"
노드 애플리케이션 만들기
콘솔 창(예: cmd, PowerShell 또는 Bash)에서 앱에 대한 새 디렉터리를 만들고 이 디렉터리로 이동합니다. 그런 다음 npm init
명령을 실행하여 package.json 파일이 있는 노드 애플리케이션을 만듭니다.
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 앱 만들기
다음 명령을 사용하여 .NET 앱을 만듭니다
dotnet new
.dotnet new console -n TextToSpeech
새 앱의 디렉터리로 변경합니다.
cd OpenAISpeech
클라이언트 라이브러리를
Azure.OpenAI
설치합니다.dotnet add package Azure.AI.OpenAI
Azure OpenAI 인증 및 연결
Azure OpenAI 서비스를 요청하려면 다음 옵션 중 하나를 통해 서비스 엔드포인트와 인증 자격 증명이 필요합니다.
Microsoft Entra ID 는 Azure 서비스에 인증하는 데 권장되는 접근 방식이며 키 기반 대안보다 더 안전합니다.
액세스 키를 사용하면 리소스에 연결할 비밀 키를 제공할 수 있습니다.
Important
액세스 키는 주의해서 사용해야 합니다. 서비스 액세스 키가 손실되거나 안전하지 않은 위치에 실수로 노출되면 서비스가 취약해질 수 있습니다. 액세스 키가 있는 사람은 누구나 Azure OpenAI 서비스에 대한 요청에 권한을 부여할 수 있습니다.
Azure OpenAI 엔드포인트 가져오기
서비스 엔드포인트는 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 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
역할을 할당합니다. 이 작업은 액세스 제어(IAM)> 역할 할당 추가 아래의 OpenAI 리소스에 있는 Azure Portal에서 수행할 수 있습니다.Visual Studio 또는 Azure CLI를 통해
az login
Azure에 로그인합니다.
키를 사용하여 인증
액세스 키 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 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");
Important
프로덕션의 경우 Azure Key Vault와 같은 안전한 방법을 사용하여 자격 증명을 저장하고 액세스합니다. 자격 증명 보안에 대한 자세한 내용은 Azure AI 서비스 보안을 참조하세요.
Visual Studio 맨 위에 있는
dotnet run
명령 또는 실행 단추를 사용하여 애플리케이션을 실행합니다.dotnet run
앱은 변수에 대해 지정한
speechFilePath
위치에 오디오 파일을 생성합니다. 디바이스에서 파일을 재생하여 생성된 오디오를 듣습니다.
리소스 정리
Azure OpenAI 리소스를 정리하고 제거하려면 해당 리소스를 삭제할 수 있습니다. 리소스를 삭제하기 전에 먼저 배포된 모델을 삭제해야 합니다.
다음 단계
- Azure OpenAI Service 참조 설명서에서 Azure OpenAI Service를 사용하여 텍스트 음성 변환 작업을 하는 방법에 대해 자세히 알아봅니다.
- 더 많은 예제를 보려면 Azure OpenAI 샘플 GitHub 리포지토리를 체크 아웃합니다.