Google 텍스트 음성 변환

파일에 저장하지 않고 Python과 함께 Google Text-to-Speech를 사용합니다.

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

Google Text-to-Speech 엔진은 여전히 현존하는 최고의 음성이자 가장 자연스러운 음성입니다. Python에서 TTS 라이브러리를 사용하는 방법에 대한 많은 예가 있지만 모두 결과 오디오 클립을 .mp3 파일에 저장하여 재생할 수 있다고 가정합니다.

파일을 저장하여 사운드를 재생한 다음 삭제하는 것은 별 문제가 아닌 것처럼 보이지만 제한된 수의 읽기 및 쓰기 주기가 있는 SD 카드를 사용하는 Raspberry Pi에서는 좋은 생각처럼 들리지 않습니다. 따라서 오디오 스트림을 재생하는 솔루션을 찾고 있었는데 이것이 내가 찾은 가장 안정적인 방법입니다.

이 코드는 Google Text-to-Speech 서비스에 이미 등록했으며 적절한 GOOGLE_APPLICATION_CREDENTIALS .json 파일을 얻었다고 가정합니다. 방법은 Google 문서 를 참조하십시오.

Pygame 라이브러리는 이 스크립트를 실행하는 데에도 사용됩니다. 시스템에 설치하는 방법에 대한 설명서도 참조하십시오.

from google.cloud import texttospeech
import pygame
import io
import os
os.putenv('DISPLAY', ':0.0')
os.environ["SDL_VIDEODRIVER"] = "dummy"
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.path.expanduser("~/<your_credential_file>.json")
 
# Instantiates a client
client = texttospeech.TextToSpeechClient()
# response = client.list_voices()
# print(response)
 
# Set the text input to be synthesized
synthesis_input = texttospeech.types.SynthesisInput(text="Knock knock! Why did the duck cross the road?")
 
# Build the voice request, select the language code ("en-US") and the ssml
voice = texttospeech.types.VoiceSelectionParams(
    language_code='en-US',
    name='en-US-Wavenet-F',
    ssml_gender=texttospeech.enums.SsmlVoiceGender.FEMALE)
 
# Select the type of audio file you want returned
audio_config = texttospeech.types.AudioConfig(
    audio_encoding=texttospeech.enums.AudioEncoding.MP3)
 
# Perform the text-to-speech request on the text input with the selected
# voice parameters and audio file type
response = client.synthesize_speech(synthesis_input, voice, audio_config)
 
# # The response's audio_content is binary.
# with open('output.mp3', 'wb') as out:
#     # Write the response to the output file.
#     out.write(response.audio_content)
#     print('Audio content written to file "output.mp3"')
 
freq = 24000    # audio CD quality
bitsize = -16   # unsigned 16 bit
channels = 2    # 1 is mono, 2 is stereo
buffer = 2048   # number of samples (experiment to get right sound)
pygame.mixer.init(freq, bitsize, channels, buffer)
pygame.mixer.music.set_volume(1.0)
pygame.display.set_mode((1, 1))
 
pygame.mixer.init()
pygame.init()  # this is needed for pygame.event.* and needs to be called after mixer.init() otherwise no sound is played
with io.BytesIO() as f:  # use a memory stream
    f.write(response.audio_content)
    f.seek(0)
    pygame.mixer.music.load(f)
    pygame.mixer.music.set_endevent(pygame.USEREVENT)
    pygame.event.set_allowed(pygame.USEREVENT)
    pygame.mixer.music.play()
    pygame.event.wait()  # play() is asynchronous. This wait forces the speaking to be finished before closing f and returning
    while pygame.mixer.music.get_busy():
        pygame.time.Clock().tick(10)
 
pygame.mixer.music.fadeout(1000)
pygame.mixer.music.stop()
댓글을 게시했습니다: 0

Tagged with:
text-to-speech