장고에서 간단한 TTS 구현
gTTS
gTTS(Google Text-To-Speech)는 구글에서 서비스하는 텍스트를 음성으로 변환해주는 서비스이다.
설치
$ pip install gTTS
기본 사용법
from gtts import gTTS
text ="Hi, everybody. Playing with Python is fun!!!"
tts = gTTS(text=text, lang='en')
tts.save("helloEN.mp3")
lang
속성으로 언어를 지정한다.'en'
은 영어,'ko'
은 한국어 등으로 설정할 수 있다. 영어는 여자 성우, 한글은 남자 성우이다.(변경 불가)text
속성에 변환하고자하는 텍스트를 넣는다.save
메소드를 통해 변환된 내용을 저장할 수 있다.- “모노, 24000 Hz”로 생성된다.
시나리오
장고로 입력 페이지를 만들고 입력을 하면 mp3 변환과 함께 mp3 오디오가 나타나도록 한다.
urls.py
from django.urls import path
from testTTS.views import TTSView, SuccessView
urlpatterns = [
path('create/', TTSView.as_view()),
path('success/', SuccessView.as_view())
]
views.py
import os
from gtts import gTTS
# Create your views here.
from django.views.generic import TemplateView, FormView
from testTTS.forms import TTSForm
class TTSView(FormView):
template_name = 'testTTS/testTTS.html'
form_class = TTSForm
success_url = '/tts/success'
def form_valid(self, form):
text = self.request.POST['message']
tts = gTTS(text=text, lang='ko')
tts.save("%s.mp3" % os.path.join('./TTS/', "tts"))
print("%s.mp3" % os.path.join('./TTS/', "tts"))
return super().form_valid(form)
class SuccessView(TemplateView):
template_name = 'testTTS/successTTS.html'
templates
testTTS.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TTS</title>
</head>
<body>
<form action="" method="post">
<h1>변환할 텍스트 입력</h1>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Send message">
</form>
</body>
</html>
- 텍스트 입력 페이지
successTTS.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<title>Title</title>
{% load static %}
</head>
<body>
<audio controls>
<source src="{% static 'tts.mp3' %}" type="audio/mp3">
</audio>
<p>사연 음성 변환 완료.</p>
</body>
</html>
- 텍스트를 제출했을 때 성공시 redirect되는 페이지
settings.py
mp3가 저장되는 위치를 static으로 불러오기 위해 settings.py에 추가한다.
STATICFILES_DIRS = ( os.path.join('TTS'), )