ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TTS 변환] NAVER CLOVA Voice - Premium 사용법
    자유게시판 2024. 12. 25. 20:21

    1. 링크에 들어간다. 위 사이트 주소임.

    2. 들어가서 오른쪽 상단 눌러서 가입하자. 네이버 아이디 있다고 되는 게 아님. 회원가입 ㄱㄱ

    3. 처음에 무료 100,000원 준다. 1,000,000 글자 기준 9만원이니깐(한달에. 사용안해도 신청하는 순간 기본료 9만원임.)

    4. 콘솔 들어가서 Application 등록 누른다.

    5. 아래 Application 이름 설정은 하고 싶은 거 해도 되는 듯.

    그리고 아래 CLOVA Voice - Premium 클릭. 서비스 환경 등록 나는 안했다. 왜? 없으니께. 전혀 test 하는 데 문제 없다.

    5. 그리고 요청 바디 들어갈 거 랑 요청 헤더 에 들어갈거 코드에 적당히 잘 넣어준다.

    6. 코드 공유해드릴게요. 아래 주의사항 잘 보세요. 저는 FastAPI 썼습니다. 모르겠으면 제 코드 Chat GPT 한테 돌려서 물어보삼.

    from fastapi import FastAPI, Form, Request
    from fastapi.responses import HTMLResponse, FileResponse
    from fastapi.staticfiles import StaticFiles
    import requests
    import os
    from dotenv import load_dotenv
    
    load_dotenv()  # .env 파일 로드
    app = FastAPI()
    
    # 네이버 클라우드 플랫폼 API 키 설정
    CLIENT_ID = os.getenv("NCP_CLIENT_ID")
    CLIENT_SECRET = os.getenv("NCP_CLIENT_SECRET")
    API_URL = "https://naveropenapi.apigw.ntruss.com/tts-premium/v1/tts"
    
    # Static 파일 서빙 (CSS, JS 등)
    #app.mount("/static", StaticFiles(directory="static"), name="static")
    
    
    @app.get("/", response_class=HTMLResponse)
    async def get_ui():
        """TTS 생성 폼을 제공하는 HTML 페이지"""
        return """
        <!DOCTYPE html>
        <html lang="ko">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>TTS Generator</title>
            <link rel="stylesheet" href="/static/style.css">
        </head>
        <body>
            <h1>Text-to-Speech Generator</h1>
            <form action="/generate_tts/" method="post" enctype="application/x-www-form-urlencoded">
                <label for="text">텍스트 입력:</label><br>
                <textarea id="text" name="text" rows="4" cols="50" required></textarea><br><br>
                <label for="speaker">목소리 선택:</label>
                <select id="speaker" name="speaker">
                    <option value="nara">나래</option>
                    <option value="jinho">진호</option>
                </select><br><br>
                <input type="submit" value="Generate">
            </form>
        </body>
        </html>
        """
    
    
    @app.post("/generate_tts/")
    async def generate_tts(
        text: str = Form(...),
        speaker: str = Form("nara"),
        volume: int = Form(0),
        speed: int = Form(-1),
        pitch: int = Form(1),
        emotion: int = Form(2),
        emotion_strength: int = Form(1),
        format: str = Form("wav"),
        sampling_rate: int = Form(8000)
    ):
        """TTS 음성을 생성하고 다운로드 링크를 제공"""
        # 네이버 TTS API 요청 데이터
        data = {
            "speaker": speaker,
            "text": text,
            "volume": str(volume),
            "speed": str(speed),
            "pitch": str(pitch),
            "emotion": str(emotion),
            "emotion-strength": str(emotion_strength),
            "format": format,
            "sampling-rate": str(sampling_rate),
        }
    
        # 네이버 TTS API 요청 헤더
        headers = {
            "X-NCP-APIGW-API-KEY-ID": CLIENT_ID,
            "X-NCP-APIGW-API-KEY": CLIENT_SECRET,
            "Content-Type": "application/x-www-form-urlencoded",
        }
    
        # API 요청
        response = requests.post(API_URL, headers=headers, data=data)
    
        # 응답 처리
        if response.status_code == 200:
            output_file = "output.wav"
            with open(output_file, "wb") as f:
                f.write(response.content)
            return FileResponse(output_file, media_type="audio/wav", filename="output.wav")
        else:
            return {
                "error": f"Failed to generate TTS: {response.status_code}",
                "details": response.text,
            }

     

    7. 주의할 점은 환경 변수 설정해서 다른 파일에 빼두었습니다. 님들도 그렇게 하삼. 위 코드는 그대로 복붙하고 아래 코드만 .env <- 파일이름으로 만들고 아래 잘 넣어주삼.

    NCP_CLIENT_ID=발급받은_Client_ID
    NCP_CLIENT_SECRET=발급받은_Client_Secret

    8. 위에 넣을 정보는 인증정보 보이죠? 거기 클릭하면 나와요

     

     

    변환된 거 들어보기

    안녕하십니까. 농모팀의 감귤입니다. TTS API test 중 입니다. 
    스레드 많이 놀러와주세요. nogmo입니다. 이거 변환하는 거 API 너무 비싸요.

    output.wav
    0.20MB

Designed by Tistory.