코딩&AI프로젝트
tts를 기본 구글의 무성의한 tts가 아닌, 요즘 유료 프로그램처럼 나도 허깅페이스 등에서 자료를 이용해서 python으로 직접 코드를 만들고 싶다.
mywarmstory
2025. 4. 26. 20:10
네, 고품질 TTS(Text-to-Speech) 시스템을 Python으로 직접 구현하고 싶으신 것으로 이해했습니다. 허깅페이스(Hugging Face)의 모델을 활용하여 기본 구글 TTS보다 더 자연스럽고 품질 좋은 음성을 생성하는 코드를 만들어 드리겠습니다.
# 고품질 TTS 시스템 구현 (Hugging Face 모델 활용)
import torch
from transformers import AutoProcessor, AutoModel
import soundfile as sf
import numpy as np
import os
class CustomTTS:
def __init__(self, model_name="suno/bark", device=None):
"""
고품질 TTS 시스템 초기화
Args:
model_name: Hugging Face 모델 이름
device: 실행할 디바이스 (None=자동, 'cuda', 'cpu')
"""
if device is None:
self.device = "cuda" if torch.cuda.is_available() else "cpu"
else:
self.device = device
print(f"모델을 {self.device} 디바이스에 로드합니다...")
self.processor = AutoProcessor.from_pretrained(model_name)
self.model = AutoModel.from_pretrained(model_name).to(self.device)
print("모델 로딩 완료!")
def text_to_speech(self, text, voice_preset="v2/ko_female", output_path="output.wav"):
"""
텍스트를 음성으로 변환
Args:
text: 변환할 텍스트
voice_preset: 음성 프리셋 (한국어 여성: 'v2/ko_female', 한국어 남성: 'v2/ko_male')
output_path: 저장할 파일 경로
Returns:
생성된 오디오 파일 경로
"""
print(f"텍스트를 음성으로 변환 중: '{text}'")
# 입력 처리
inputs = self.processor(
text=text,
voice_preset=voice_preset,
return_tensors="pt",
).to(self.device)
# 음성 생성
with torch.no_grad():
output = self.model.generate(**inputs, do_sample=True)
# 오디오 데이터 추출 및 저장
audio_array = output[0].cpu().numpy()
sample_rate = self.model.generation_config.sample_rate
# 출력 디렉토리 확인 및 생성
output_dir = os.path.dirname(output_path)
if output_dir and not os.path.exists(output_dir):
os.makedirs(output_dir)
# 파일로 저장
sf.write(output_path, audio_array, sample_rate)
print(f"음성 파일이 성공적으로 생성되었습니다: {output_path}")
return output_path
def generate_multi_speaker_dialogue(self, dialogue_list, output_path="dialogue.wav"):
"""
여러 화자의 대화를 생성
Args:
dialogue_list: (화자, 대사) 튜플의 리스트
예: [("ko_female", "안녕하세요"), ("ko_male", "반갑습니다")]
output_path: 저장할 파일 경로
Returns:
생성된 대화 오디오 파일 경로
"""
all_audio = []
sample_rate = None
# 각 화자별 음성 생성
for i, (speaker, text) in enumerate(dialogue_list):
voice_preset = f"v2/{speaker}"
temp_path = f"temp_{i}.wav"
self.text_to_speech(text, voice_preset=voice_preset, output_path=temp_path)
# 생성된 오디오 로드
audio, sr = sf.read(temp_path)
all_audio.append(audio)
if sample_rate is None:
sample_rate = sr
# 임시 파일 삭제
os.remove(temp_path)
# 화자 간 짧은 간격 추가 (0.5초)
if i < len(dialogue_list) - 1:
silence = np.zeros(int(sample_rate * 0.5))
all_audio.append(silence)
# 모든 오디오 합치기
combined_audio = np.concatenate(all_audio)
# 최종 파일 저장
sf.write(output_path, combined_audio, sample_rate)
print(f"대화 음성이 성공적으로 생성되었습니다: {output_path}")
return output_path
# 실행 예제
if __name__ == "__main__":
# TTS 시스템 초기화 (Bark 모델 사용)
tts = CustomTTS(model_name="suno/bark")
# 기본 텍스트 음성 변환 예제
tts.text_to_speech(
"안녕하세요, 이것은 한국어 음성 생성 테스트입니다. 자연스러운 발음과 억양으로 이야기합니다.",
voice_preset="v2/ko_female",
output_path="output/korean_female.wav"
)
# 남성 음성으로 생성
tts.text_to_speech(
"안녕하세요, 저는 남성 목소리로 말하고 있습니다. 고품질 TTS 시스템이 작동하는 예시입니다.",
voice_preset="v2/ko_male",
output_path="output/korean_male.wav"
)
# 다중 화자 대화 생성 예제
dialogue = [
("ko_female", "안녕하세요, 오늘 날씨가 정말 좋네요."),
("ko_male", "네, 정말 그렇습니다. 산책하기 좋은 날씨예요."),
("ko_female", "주말에 등산 계획은 있으신가요?"),
("ko_male", "네, 북한산에 가볼 생각입니다. 같이 가실래요?")
]
tts.generate_multi_speaker_dialogue(dialogue, output_path="output/conversation.wav")
이 코드는 허깅페이스의 Suno Bark 모델을 활용하여 고품질 한국어 TTS를 구현한 것입니다. 다음과 같은 기능을 제공합니다:
- 다양한 음성 지원: 한국어 남성/여성 음성 등 여러 음성 프리셋을 사용할 수 있습니다
- 대화 생성: 여러 화자의 대화를 자연스럽게 합성할 수 있습니다
- 고품질 출력: 상용 TTS 서비스에 비견할 만한 자연스러운 음성을 생성합니다
사용 방법:
- 필요한 패키지 설치:
pip install torch transformers soundfile numpy
- 코드를 실행하여 샘플 음성을 생성하거나, 자신의 코드에 CustomTTS 클래스를 가져와서 사용할 수 있습니다.
다른 모델을 사용하고 싶으시다면 model_name 파라미터를 변경하여 다른 허깅페이스 TTS 모델(예: "facebook/mms-tts")을 사용할 수도 있습니다.
위의 tts는 일반 구글 tts보다 훨신 수준이 높은것인가?

네, 제가 제공한 코드에서 사용하는 Suno의 Bark 모델은 일반 구글 TTS보다 훨씬 높은 수준의 음성 품질을 제공합니다. 주요 차이점은 다음과 같습니다:
- 음성 자연성: Bark 모델은 딥러닝 기반의 생성형 AI 기술을 사용하여 인간의 음성과 매우 유사한 자연스러운 발화를 생성합니다. 특히 억양, 감정 표현, 말의 리듬 등이 매우 자연스럽습니다.
- 음성 다양성: 다양한 음색, 억양, 말투를 지원하며 특히 한국어에 대해서도 남성/여성 목소리를 자연스럽게 생성할 수 있습니다.
- 감정 표현: 문맥에 따른 적절한 감정이나 강조를 표현할 수 있어 더 인간적인 대화 느낌을 줍니다.
- 대화 맥락 유지: 여러 발화를 이어서 생성할 때 맥락을 유지하며 자연스러운 대화를 만들어낼 수 있습니다.
- 최신 생성형 AI 기술: 구글의 기본 TTS가 오래된 기술을 사용하는 반면, Bark 모델은 최신 생성형 AI 기술을 사용합니다.
구글의 기본 TTS는 대체로 기계적이고 로봇 같은 느낌이 있는 반면, Bark와 같은 최신 모델은 실제 사람이 말하는 것처럼 들리는 경우가 많습니다. 이런 고급 TTS 모델은 오디오북, 콘텐츠 제작, 가상 비서 등 더 높은 품질이 요구되는 애플리케이션에 적합합니다.
다만, 구글도 WaveNet이나 Tacotron과 같은 고급 TTS 기술을 개발했으며 구글 클라우드의 유료 TTS 서비스는 훨씬 높은 품질을 제공한다는 점을 참고하시기 바랍니다. 제가 언급한 것은 일반적으로 무료로 제공되는 기본 구글 TTS와의 비교입니다.
반응형