적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS] Naver CLOVA Voice 음성변환 TTS

hongssup_ 2021. 12. 30. 12:00
반응형

네이버 TTS (Text-To-Speech)

CLOVA Voice

: 음성으로 변환할 텍스트, 음색, 속도 등을 파라미터로 입력받아 음성을 합성하여 결과를 반환하는 HTTP 기반의 REST API.

 

네이버 콘솔 어플리케이션에서 이용할 서비스로 CLOVA Voice를 추가해준다. 

월 90,000원이라는 무서운 경고가 있지만 제공받은 무료 크레딧으로 차감이 가능하다. 

예전에는 CLOVA Speech Synthesis (CSS) 를 사용하여 tts를 한 것 같던데 지금은 신규 사용이 불가한 듯 하다.

처음에 이걸로 해보려다가 아무리 해도 statusCode 403 뜨길래 결국 다시 CLOVA Voice로 했더니 잘된다.. ㅠ

 

다른 프로젝트들은 예제라도 있었는데, CLOVA Voice tts는 따로 swift용 예제를 제공해주지는 않는 것 같다. 

그냥 api 알아서 태우고 mp3 파일 재생을 해줘야 함 ㅋㅋㅋ

 

import UIKit
import Alamofire
import AVFoundation

class NaverTTSViewController: UIViewController {
    
    let URL = "https://naveropenapi.apigw.ntruss.com/tts-premium/v1/tts"
    var audio: AVAudioPlayer?
    let headers: HTTPHeaders = [
        "Content-Type":"application/x-www-form-urlencoded",
        "X-NCP-APIGW-API-KEY-ID":{CLIENT_ID},
        "X-NCP-APIGW-API-KEY":{CLIENT_SECRET}
    ]
    let params:[String:Any] = [
        "speaker" : "mijin",
        "speed" : 0,
        "text" : "안녕"
    ]
    var player = AVPlayer()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        textToSpeech()
    }

    func textToSpeech() {
        AF.request(URL, method: .post, parameters: params, headers: headers).responseData { response in
            switch response.result {
            case .success:
                guard let statusCode = response.response?.statusCode else { return }
                guard let data = response.data else { return }
                self.play(data: data)
                break
            case .failure(let error):
                print(error.localizedDescription)
                break
            }
        }
    }
    
    func play(data: Data) {
        do {
            audio = try AVAudioPlayer(data: data)
            audio?.prepareToPlay()
            audio?.play()
        } catch {
            print(error.localizedDescription)
        }
    }
}

 

 


참고 : NAVER Cloud Platform - CLOVA Voice, medium - NAVER CSS swift example,

 

혹시나 제 글이 도움이 되셨다면 하트 한번 눌러주시면 감사하겠습니다 🥰

iOS 개발자분들 모두 화이팅입니다👍🏻

728x90
반응형