如何在 'gTTS' 中为单个输入行使用多语言?
How to use muti-language in 'gTTS' for single input line?
我想将包含多种语言的文档中的文本转换为语音。当我尝试执行以下代码时,我会提取问题以清楚地记录每种语言。这种类型的混音器文本音频如何保存清晰?
from gtts import gTTS
mytext = 'Welcome to gtts! আজ একটি ভাল দিন। tumi kemon acho? ٱلْحَمْدُ لِلَّٰهِ'
language = 'ar' # arabic
myobj = gTTS(text=mytext, tld='co.in', lang=language, slow=False)
myobj.save("audio.mp3")
仅使用文字转语音是不够的,因为它只能使用一种语言。
为了解决这个问题,我们需要为句子的每个部分检测语言。
然后 运行 通过文本到语音并将其附加到我们最终的口语句子中。
最好使用一些神经网络(有很多)来为你做这个分类。
为了证明概念,我使用 googletrans
来检测句子每个部分的语言,并使用 gtts
从中制作 mp3 文件。
它不是防弹的,尤其是阿拉伯语文本。 googletrans
以某种方式检测到 gtts
无法识别的不同语言代码。出于这个原因,我们必须使用 code_table 来选择适用于 gtts 的正确语言代码。
这是工作示例:
from googletrans import Translator
from gtts import gTTS
input_text = "Welcome to gtts! আজ একটি ভাল দিন। tumi kemon acho? ٱلْحَمْدُ لِلَّٰه"
words = input_text.split(" ")
translator = Translator()
language, sentence = None, ""
lang_code_table = {"sd": "ar"}
with open('output.mp3', 'wb') as ff:
for word in words:
if word == " ":
continue
# Detect language of current word
word_language = translator.detect(word).lang
if word_language == language:
# Same language, append word to the sentence
sentence += " " + word
else:
if language is None:
# No language set yet, initialize and continue
language, sentence = word_language, word
continue
if word.endswith(("?", ".", "!")):
# If word endswith one of the punctuation marks, it should be part of previous sentence
sentence += " " + word
continue
# We have whole previous sentence, translate it into speech and append to mp3 file
gTTS(text=sentence, lang=lang_code_table.get(language, language), slow=False).write_to_fp(ff)
# Continue with other language
language, sentence = word_language, word
if language and sentence:
# Append last detected sentence
gTTS(text=sentence, lang=lang_code_table.get(language, language), slow=False).write_to_fp(ff)
显然速度不快,不适合较长的文本。
它还需要更好的分词器和正确的错误处理。
同样,这只是概念验证。
我想将包含多种语言的文档中的文本转换为语音。当我尝试执行以下代码时,我会提取问题以清楚地记录每种语言。这种类型的混音器文本音频如何保存清晰?
from gtts import gTTS
mytext = 'Welcome to gtts! আজ একটি ভাল দিন। tumi kemon acho? ٱلْحَمْدُ لِلَّٰهِ'
language = 'ar' # arabic
myobj = gTTS(text=mytext, tld='co.in', lang=language, slow=False)
myobj.save("audio.mp3")
仅使用文字转语音是不够的,因为它只能使用一种语言。
为了解决这个问题,我们需要为句子的每个部分检测语言。
然后 运行 通过文本到语音并将其附加到我们最终的口语句子中。
最好使用一些神经网络(有很多)来为你做这个分类。
为了证明概念,我使用 googletrans
来检测句子每个部分的语言,并使用 gtts
从中制作 mp3 文件。
它不是防弹的,尤其是阿拉伯语文本。 googletrans
以某种方式检测到 gtts
无法识别的不同语言代码。出于这个原因,我们必须使用 code_table 来选择适用于 gtts 的正确语言代码。
这是工作示例:
from googletrans import Translator
from gtts import gTTS
input_text = "Welcome to gtts! আজ একটি ভাল দিন। tumi kemon acho? ٱلْحَمْدُ لِلَّٰه"
words = input_text.split(" ")
translator = Translator()
language, sentence = None, ""
lang_code_table = {"sd": "ar"}
with open('output.mp3', 'wb') as ff:
for word in words:
if word == " ":
continue
# Detect language of current word
word_language = translator.detect(word).lang
if word_language == language:
# Same language, append word to the sentence
sentence += " " + word
else:
if language is None:
# No language set yet, initialize and continue
language, sentence = word_language, word
continue
if word.endswith(("?", ".", "!")):
# If word endswith one of the punctuation marks, it should be part of previous sentence
sentence += " " + word
continue
# We have whole previous sentence, translate it into speech and append to mp3 file
gTTS(text=sentence, lang=lang_code_table.get(language, language), slow=False).write_to_fp(ff)
# Continue with other language
language, sentence = word_language, word
if language and sentence:
# Append last detected sentence
gTTS(text=sentence, lang=lang_code_table.get(language, language), slow=False).write_to_fp(ff)
显然速度不快,不适合较长的文本。
它还需要更好的分词器和正确的错误处理。
同样,这只是概念验证。