다음을 통해 공유


빠른 시작: Azure OpenAI Service를 사용하여 텍스트 음성 변환

이 빠른 시작에서는 OpenAI 음성을 사용하여 텍스트 음성 변환에 Azure OpenAI Service를 사용합니다.

사용 가능한 음성은 다음과 같습니다. alloy, echo, fable, onyx, nova, shimmer. 자세한 내용은 텍스트 음성 변환에 대한 Azure OpenAI Service 참조 설명서를 참조하세요.

필수 조건

설정

키 및 엔드포인트 검색

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를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

엔드포인트 및 액세스 키 위치가 강조 표시된 Azure Portal의 Azure OpenAI 리소스에 대한 개요 UI 스크린샷.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

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 서비스 보안 문서를 참조하세요.

소스 코드 | 패키지(npm) | 샘플

필수 조건

설정

키 및 엔드포인트 검색

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를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

엔드포인트 및 액세스 키 위치가 강조 표시된 Azure Portal의 Azure OpenAI 리소스에 대한 개요 UI 스크린샷.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

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 파일이 업데이트됩니다.

음성 파일 만들기

  1. 이름이 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);
    });
    
    
  2. 다음 명령을 사용하여 스크립트를 실행합니다.

    node Text-to-speech.js
    

소스 코드 | 패키지(npm) | 샘플

필수 조건

설정

키 및 엔드포인트 검색

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를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

엔드포인트 및 액세스 키 위치가 강조 표시된 Azure Portal의 Azure OpenAI 리소스에 대한 개요 UI 스크린샷.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

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 파일이 업데이트됩니다.

음성 파일 만들기

  1. 이름이 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(으)로 올바르게 설정되어 있는지 확인합니다.

  2. 다음 명령을 사용하여 애플리케이션 빌드:

    tsc
    
  3. 다음 명령을 사용하여 애플리케이션을 실행합니다.

    node Text-to-speech.js
    

필수 구성 요소

.NET 앱 만들기

  1. 다음 명령을 사용하여 .NET 앱을 만듭니다 dotnet new .

    dotnet new console -n TextToSpeech
    
  2. 새 앱의 디렉터리로 변경합니다.

    cd OpenAISpeech
    
  3. 클라이언트 라이브러리를 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/입니다.

엔드포인트 및 액세스 키 위치가 강조 표시된 Azure Portal의 Azure OpenAI 리소스에 대한 개요 UI 스크린샷.

Microsoft Entra ID를 사용하여 인증

Microsoft Entra ID 인증을 사용하도록 선택하는 경우 다음을 완료해야 합니다.

  1. Azure.Identity 패키지를 추가합니다.

    dotnet add package Azure.Identity
    
  2. 사용자 계정에 Cognitive Services User 역할을 할당합니다. 이 작업은 액세스 제어(IAM)> 역할 할당 추가 아래의 OpenAI 리소스에 있는 Azure Portal에서 수행할 수 있습니다.

  3. Visual Studio 또는 Azure CLI를 통해 az loginAzure에 로그인합니다.

키를 사용하여 인증

액세스 키 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

앱 코드 업데이트

  1. 내용을 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 서비스 보안을 참조하세요.

  2. Visual Studio 맨 위에 있는 dotnet run 명령 또는 실행 단추를 사용하여 애플리케이션을 실행합니다.

    dotnet run
    

    앱은 변수에 대해 지정한 speechFilePath 위치에 오디오 파일을 생성합니다. 디바이스에서 파일을 재생하여 생성된 오디오를 듣습니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 해당 리소스를 삭제할 수 있습니다. 리소스를 삭제하기 전에 먼저 배포된 모델을 삭제해야 합니다.

다음 단계