2024. 10. 1. 16:00ㆍNestJs
서론
최근 텍스트 음성 변환(TTS) 기술은 고객 지원 시스템 등에서 자연스러운 음성 경험을 제공하며 빠르게 발전하고 있습니다. Google Cloud Text-to-Speech와 AWS Polly는 대표적인 클라우드 기반 TTS 서비스로, 각자의 강점과 특징이 있어 프로젝트에 적합한 서비스를 선택하는 것이 중요합니다. 본 글에서는 이 두 서비스의 특징과 차이점을 비교하고 간단한 사용법을 안내합니다.
Google Cloud Text-to-Speech
Google Cloud Text-to-Speech는 **Google Cloud Platform(GCP)**에서 제공하는 텍스트 음성 변환 서비스로, 딥러닝 기반의 WaveNet 기술을 사용하여 자연스러운 음성을 생성합니다. 이 서비스는 220개 이상의 다양한 음성을 제공하며, 다양한 언어와 방언을 지원합니다. Google의 AI 기술을 바탕으로 음성의 억양과 리듬을 매우 정교하게 조정할 수 있어, 사용자에게 더 현실적인 음성을 제공합니다.
AWS Polly
AWS Polly는 **Amazon Web Services(AWS)**에서 제공하는 텍스트 음성 변환 서비스로, 실시간으로 텍스트를 자연스러운 음성으로 변환해주는 도구입니다. 60개 이상의 음성을 지원하며, 여러 언어에 대한 다양한 음성 스타일을 제공합니다. 또한, Polly는 **Speech Synthesis Markup Language(SSML)**을 지원하여 음성 속도, 강세, 호흡 등을 세밀하게 제어할 수 있습니다. AWS의 안정적인 인프라 위에서 동작하며, 다양한 AWS 서비스와 쉽게 통합할 수 있는 것이 강점입니다.
Google Cloud Text-to-Speech vs AWS Polly 차이점
두 서비스는 텍스트를 음성으로 변환하는 기본적인 기능을 제공하지만, 세부적으로는 차이점이 있습니다.
- 음성 품질
- Google Cloud Text-to-Speech는 WaveNet을 사용하여 더 자연스럽고 인간 같은 음성을 생성하는 데 중점을 두고 있습니다. 특히 억양, 리듬, 그리고 말투의 세부적인 조정이 가능합니다.
- AWS Polly는 WaveNet과 비슷한 NTTS(Neural Text-to-Speech) 기술을 통해 자연스러운 음성을 제공하지만, 음성 품질은 Google의 WaveNet에 비해 약간 덜 자연스럽다고 평가될 때가 있습니다. 그러나 여전히 다양한 응용 프로그램에서 충분히 매력적인 음질을 제공합니다.
- 언어 및 음성 지원
- Google Cloud Text-to-Speech는 더 많은 언어와 음성을 지원하며, 특히 비즈니스 및 고객 지원 분야에서 많이 사용되는 언어에 대해 다양한 선택지를 제공합니다.
- AWS Polly는 다양한 언어를 지원하지만, Google보다 언어와 음성의 선택지가 적습니다.
- 비용
- 두 서비스 모두 유사한 요금 모델을 가지고 있지만, 특정 요구 사항에 따라 비용 효율성이 달라질 수 있습니다. 일반적으로 AWS Polly가 더 저렴한 경향이 있으며, Amazon의 다른 서비스와 통합할 경우 비용 절감 효과가 있습니다.
- 반면 Google Cloud Text-to-Speech는 조금 더 높은 품질의 음성을 제공하는 대가로, 일부 사용자에게는 다소 비용이 높게 느껴질 수 있습니다.
- SSML 지원
- Google Cloud Text-to-Speech와 AWS Polly 모두 SSML을 지원하여 음성 합성을 세밀하게 제어할 수 있습니다. 그러나 AWS Polly는 더 오랫동안 SSML을 지원해왔고, 보다 많은 제어 옵션을 제공하는 것으로 알려져 있습니다.
- 클라우드 통합
- Google Cloud Text-to-Speech는 GCP 생태계 내에서 동작하며, 특히 Google의 AI/ML 서비스와 통합하기에 유리합니다.
- AWS Polly는 AWS 생태계 내에서 쉽게 통합할 수 있어, Lambda, S3, Transcribe와 같은 서비스와의 연결이 매우 용이합니다.
간단한 사용 방법
Google Cloud Text-to-Speech 사용법
npm install @google-cloud/text-to-speech
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { TextToSpeechClient } from '@google-cloud/text-to-speech';
import * as fs from 'fs';
import * as util from 'util';
@Injectable()
export class GoogleTTSService {
private client: TextToSpeechClient;
constructor(private readonly configService: ConfigService) {
this.client = new TextToSpeechClient({
credentials: {
client_email: this.configService.get<string>('GOOGLE_CLOUD_CLIENT_EMAIL'),
private_key: this.configService.get<string>('GOOGLE_CLOUD_PRIVATE_KEY')
},
projectId: this.configService.get<string>('GOOGLE_CLOUD_PROJECT_ID'),
});
}
async synthesizeSpeech(text: string): Promise<void> {
const request = {
input: { text },
voice: { languageCode: 'en-US', ssmlGender: 'NEUTRAL' },
audioConfig: { audioEncoding: 'MP3' },
};
const [response] = await this.client.synthesizeSpeech(request);
const writeFile = util.promisify(fs.writeFile);
await writeFile('output.mp3', response.audioContent, 'binary');
console.log('Audio content written to file: output.mp3');
}
}
AWS Polly 사용법 (NestJS)
npm install @aws-sdk/client-polly
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PollyClient, SynthesizeSpeechCommand } from '@aws-sdk/client-polly';
import * as fs from 'fs';
@Injectable()
export class AWSPollyService {
private pollyClient: PollyClient;
constructor(private readonly configService: ConfigService) {
this.pollyClient = new PollyClient({
region: this.configService.get<string>('AWS_REGION'),
credentials: {
accessKeyId: this.configService.get<string>('AWS_ACCESS_KEY_ID'),
secretAccessKey: this.configService.get<string>('AWS_SECRET_ACCESS_KEY'),
},
});
}
async synthesizeSpeech(text: string): Promise<void> {
const params = {
Text: text,
OutputFormat: 'mp3',
VoiceId: 'Joanna',
};
const command = new SynthesizeSpeechCommand(params);
const data = await this.pollyClient.send(command);
// AudioStream이 존재하면 파일로 저장
if (data.AudioStream) {
const audioBuffer = Buffer.from(await data.AudioStream.transformToByteArray());
fs.writeFileSync('speech.mp3', audioBuffer);
console.log('Audio content written to file: speech.mp3');
} else {
console.error('Error: AudioStream is empty');
}
}
}
결론
Google Cloud Text-to-Speech와 AWS Polly 두 가지 서비스 모두를 사용해 음성을 변환하는 기능을 구현하였지만, 두 기능의 음질 차이는 크지 않았습니다. 그러나 최종적으로 AWS Polly를 선택한 이유는 AWS 통합 관리가 수월했기 때문입니다. 특히, 음성 파일을 생성한 후 AWS S3에 업로드하고 해당 파일의 URL을 쉽게 받아서 관리할 수 있다는 점에서, 이미 AWS 서비스를 사용 중인 환경에서는 Polly가 더 적합한 선택이었습니다. 이러한 이유로 AWS Polly를 선택하여 프로젝트의 기능을 완성하였습니다.
다양한 음성 리스트를 보고싶으시다면 여기 사이트 이용하시면됩니다.
지원되는 음성 및 언어 | Cloud Text-to-Speech API | Google Cloud
Vertex AI의 최신 멀티모달 모델인 Gemini 1.5 모델을 사용해 보고 최대 2백만 개의 토큰 컨텍스트 윈도우를 사용해 무엇을 빌드할 수 있는지 확인해 보세요. Vertex AI의 최신 멀티모달 모델인 Gemini 1.5
cloud.google.com
Neural voices - Amazon Polly
Neural voices Amazon Polly has a Neural text-to-speech (NTTS) engine that can produce even higher quality voices than its standard voices. Standard TTS voices use concatenative synthesis. The standard engine concatenates phonemes of recorded speech, produc
docs.aws.amazon.com
'NestJs' 카테고리의 다른 글
axios Ngrok와 통신하면서 발생한 문제 (1) | 2024.10.26 |
---|---|
NestJS cache-manager 사용하기 (5) | 2024.10.03 |
[NestJS] Postman auth에 토큰 보내기 (0) | 2024.08.07 |
[NestJS] Unknown column in where clause 에러 발생 (0) | 2024.07.25 |
[NestJS] Faker 연동 (0) | 2024.07.23 |