目的のテキストを読み上げるときに、少しの休憩、待機、休憩、または短い休憩(約2秒+-、設定可能が理想的)を可能にするものを探しています。
オンラインの人々は、3つの完全なストップを追加し、その後にスペースを1つ追加すると、休憩が生じると述べていますが、私はそうはいきません。以下のコードは、悲しいことに、一時停止のない私のテストです。アイデアや提案はありますか?
編集:これを可能にするgTTSからのコマンドがある場合、または実際に機能する場合は3つのフルストップを使用するようなトリックがあると理想的です。
from gtts import gTTS
import os
tts = gTTS(text=" Testing ... if there is a pause ... ... ... ... ... longer pause? ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... insane pause " , lang='en', slow=False)
tts.save("temp.mp3")
os.system("temp.mp3")
悲しいことに答えはnoです。gTTSパッケージにはpause
、の追加機能はありません2018年に作成されました一時停止関数を追加します 、それは十分にスマートです tokenizer によって自然な一時停止を追加します。
テキストを取り、それをトークン(文字列)のリストに分割して返す関数。 gTTSコンテキストでは、その目的は、TTS APIリクエストごとに許可される最大文字サイズ(100)を超えない小さなセグメントにテキストをカットし、音声を自然で連続的なものにすることです。これは、スピーチが自然に一時停止する場所(たとえば、_"."
_)でテキストを分割することにより、そうでない場所(たとえば、「10.5」または「U.S.A.」)で処理します。このようなルールはトークナイザーケースと呼ばれ、リストを取得します。
次に例を示します。
_text = "regular text speed no pause regular text speed comma pause, regular text speed period pause. regular text speed exclamation pause! regular text speed ellipses pause... regular text speed new line pause \n regular text speed "
_
したがって、この場合、sleep()
を追加することが唯一の答えのようです。しかし、トークナイザーをだますことは言及する価値があります。
これを実現するには、音声合成マークアップ言語(SSML)が必要です。
Google Cloud Platformcredentialsを設定する必要があることに注意してください
最初にbashで:
pip install --upgrade google-cloud-texttospeech
次に、コードは次のとおりです。
import html
from google.cloud import texttospeech
def ssml_to_audio(ssml_text, outfile):
# Instantiates a client
client = texttospeech.TextToSpeechClient()
# Sets the text input to be synthesized
synthesis_input = texttospeech.SynthesisInput(ssml=ssml_text)
# Builds the voice request, selects the language code ("en-US") and
# the SSML voice gender ("MALE")
voice = texttospeech.VoiceSelectionParams(
language_code="en-US", ssml_gender=texttospeech.SsmlVoiceGender.MALE
)
# Selects the type of audio file to return
audio_config = texttospeech.AudioConfig(
audio_encoding=texttospeech.AudioEncoding.MP3
)
# Performs the text-to-speech request on the text input with the selected
# voice parameters and audio file type
response = client.synthesize_speech(
input=synthesis_input, voice=voice, audio_config=audio_config
)
# Writes the synthetic audio to the output file.
with open(outfile, "wb") as out:
out.write(response.audio_content)
print("Audio content written to file " + outfile)
def text_to_ssml(inputfile):
raw_lines = inputfile
# Replace special characters with HTML Ampersand Character Codes
# These Codes prevent the API from confusing text with
# SSML commands
# For example, '<' --> '<' and '&' --> '&'
escaped_lines = html.escape(raw_lines)
# Convert plaintext to SSML
# Wait two seconds between each address
ssml = "<speak>{}</speak>".format(
escaped_lines.replace("\n", '\n<break time="2s"/>')
)
# Return the concatenated string of ssml script
return ssml
text = """Here are <say-as interpret-as="characters">SSML</say-as> samples.
I can pause <break time="3s"/>.
I can play a sound"""
ssml = text_to_ssml(text)
ssml_to_audio(ssml, "test.mp3")
その他のドキュメント:
SSMLでアドレスを話す
ただし、Google Cloud Platformの認証情報がない場合は、time.sleep(1)メソッドを使用する方が安価で簡単な方法です。
複数のmp3ファイルを保存してから、time.sleep()
を使用して、希望する一時停止時間でそれぞれを呼び出すことができます。
from gtts import gTTS
import os
from time import sleep
tts1 = gTTS(text="Testingn" , lang='en', slow=False)
tts2 = gTTS(text="if there is a pause" , lang='en', slow=False)
tts3 = gTTS(text="insane pause " , lang='en', slow=False)
tts1.save("temp1.mp3")
tts2.save("temp2.mp3")
tts3.save("temp3.mp3")
os.system("temp1.mp3")
sleep(2)
os.system("temp2.mp3")
sleep(3)
os.system("temp3.mp3")