Add script to generate deterministic samples and hashes

This commit is contained in:
Michael Hansen 2022-04-20 11:43:15 -04:00
commit b446579e4f
9 changed files with 595 additions and 2 deletions

6
.isort.cfg Normal file
View file

@ -0,0 +1,6 @@
[settings]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=88

View file

@ -23,6 +23,26 @@ set -eo pipefail
# Directory of *this* script
this_dir="$( cd "$( dirname "$0" )" && pwd )"
# Path to virtual environment
: "${venv:=${base_dir}/.venv}"
if [ -d "${venv}" ]; then
# Activate virtual environment if available
source "${venv}/bin/activate"
fi
python_files=("${this_dir}/tests"/*.py)
# Format code
black "${python_files[@]}"
isort "${python_files[@]}"
# Check
flake8 "${python_files[@]}"
pylint "${python_files[@]}"
mypy "${python_files[@]}"
# Check submodules
script_name='check.sh'
find "${this_dir}" -mindepth 2 -maxdepth 2 -name "${script_name}" -type f | \

View file

@ -51,6 +51,49 @@
],
"properties": {}
},
"de_DE/thorsten-emotion_low": {
"files": {
"LICENSE": {
"size_bytes": 31,
"sha256_sum": "19b4afb2e1c2c9f2cb07da14acd2d34098a4e11c13fccb09356845c4748fb50c"
},
"SOURCE": {
"size_bytes": 28,
"sha256_sum": "f351b9304a8fa1e6e58db9b3411f92387e192bb4b57fcbe3e8f839424b13f3c8"
},
"config.json": {
"size_bytes": 3756,
"sha256_sum": "e0ae97001a4a9b69040f4531de804b08ec865223bab807310652852fafdad909"
},
"generator.onnx": {
"size_bytes": 76346209,
"sha256_sum": "164defc5bffcf739996b04855a6a0c76b600b44f73dfe4801d24e838eea5e112"
},
"phonemes.txt": {
"size_bytes": 339,
"sha256_sum": "4820e701ece71e34c5d32f9640db6b103391093943ac071c001222d27b891e5f"
},
"speaker_map.csv": {
"size_bytes": 222,
"sha256_sum": "371546cc49cefe755562da2e8404ae857206e6593fa777f70860bf1fff070b89"
},
"speakers.txt": {
"size_bytes": 62,
"sha256_sum": "b12e946f3867f124f3d07c48a13362edda6564fa91b13e46aba6dee41193f4aa"
}
},
"speakers": [
"amused",
"angry",
"disgusted",
"drunk",
"neutral",
"sleepy",
"surprised",
"whisper"
],
"properties": {}
},
"de_DE/thorsten_low": {
"files": {
"ALIASES": {
@ -556,6 +599,10 @@
},
"fa/haaniye_low": {
"files": {
"ALIASES": {
"size_bytes": 11,
"sha256_sum": "9d5c7cf903a22b8d0d3f4768583664b2533ba4252367d8d6892ca4e398a811bc"
},
"LICENSE": {
"size_bytes": 5,
"sha256_sum": "958246282e394a96727515ee6d834073ea09314be61a5730d03bf6d540ae0c26"

View file

@ -1 +1 @@
0.1.0
0.1.1

View file

@ -243,7 +243,7 @@ class TextToSpeechSystem(AbstractContextManager, metaclass=ABCMeta):
"""Begins a new utterance"""
@abstractmethod
def speak_text(self, text: str):
def speak_text(self, text: str, text_language: typing.Optional[str] = None):
"""Speaks text using the underlying system's tokenization mechanism.
Becomes an AudioResult in end_utterance()
@ -276,3 +276,40 @@ class TextToSpeechSystem(AbstractContextManager, metaclass=ABCMeta):
Returns an iterable of results (audio, marks, etc.)
"""
def text_to_wav(
self, text: str, text_language: typing.Optional[str] = None
) -> bytes:
"""Synthesize text with current voice settings and return WAV audio"""
with io.BytesIO() as wav_io:
wav_file: wave.Wave_write = wave.open(wav_io, "wb")
wav_params_set = False
with wav_file:
try:
self.begin_utterance()
self.speak_text(text, text_language=text_language)
results = self.end_utterance()
for result in results:
# Add audio to existing WAV file
if isinstance(result, AudioResult):
if not wav_params_set:
wav_file.setframerate(result.sample_rate_hz)
wav_file.setsampwidth(result.sample_width_bytes)
wav_file.setnchannels(result.num_channels)
wav_params_set = True
wav_file.writeframes(result.audio_bytes)
except Exception as e:
if not wav_params_set:
# Set default parameters so exception can propagate
wav_file.setframerate(22050)
wav_file.setsampwidth(2)
wav_file.setnchannels(1)
raise e
wav_bytes = wav_io.getvalue()
return wav_bytes

40
pylintrc Normal file
View file

@ -0,0 +1,40 @@
[MESSAGES CONTROL]
disable=
format,
abstract-class-little-used,
abstract-method,
cyclic-import,
duplicate-code,
global-statement,
import-outside-toplevel,
inconsistent-return-statements,
locally-disabled,
not-context-manager,
redefined-variable-type,
too-few-public-methods,
too-many-arguments,
too-many-branches,
too-many-instance-attributes,
too-many-lines,
too-many-locals,
too-many-public-methods,
too-many-return-statements,
too-many-statements,
too-many-boolean-expressions,
unnecessary-pass,
unused-argument,
broad-except,
too-many-nested-blocks,
invalid-name,
unused-import,
no-self-use,
fixme,
useless-super-delegation,
missing-module-docstring,
missing-class-docstring,
missing-function-docstring,
import-error,
relative-beyond-top-level
[FORMAT]
expected-line-ending-format=LF

26
setup.cfg Normal file
View file

@ -0,0 +1,26 @@
[flake8]
# To work with Black
max-line-length = 88
# E501: line too long
# W503: Line break occurred before a binary operator
# E203: Whitespace before ':'
# D202 No blank lines allowed after function docstring
# W504 line break after binary operator
ignore =
E501,
W503,
E203,
D202,
W504
# F401 import unused
per-file-ignores =
mimic3_tts/__init__.py:F401
[isort]
multi_line_output = 3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=88
indent = " "

177
tests/get_sample_hashes.py Normal file
View file

@ -0,0 +1,177 @@
#!/usr/bin/env python3
# Copyright 2022 Mycroft AI Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
Generates sha256 hashs of audio samples for all languages/voices.
"""
import argparse
import contextlib
import functools
import hashlib
import logging
import re
import tempfile
import typing
from multiprocessing import Pool
from pathlib import Path
from mimic3_tts import Mimic3Settings, Mimic3TextToSpeechSystem, Voice
# -----------------------------------------------------------------------------
_TEST_SENTENCES = {
"de": """Der Regenbogen ist ein atmosphärisch-optisches Phänomen, das als
kreisbogenförmiges farbiges Lichtband in einer von der Sonne
beschienenen Regenwand oder -wolke wahrgenommen wird.""",
"en": """A rainbow is a meteorological phenomenon that is caused by
reflection, refraction and dispersion of light in water droplets
resulting in a spectrum of light appearing in the sky.""",
"el": """Οι επιστήμονες μελετούν ακόμη το ουράνιο τόξο.""",
"es": """Un arcoíris​ o arco iris es un fenómeno óptico y meteorológico que
consiste en la aparición en el cielo de un arco de luz multicolor,
originado por la descomposición de la luz solar en el espectro visible,
la cual se produce por refracción, cuando los rayos del sol atraviesan
pequeñas gotas de agua contenidas en la atmósfera terrestre.""",
"fa": """برای دیگر کاربردها رنگین‌کمان (ابهام‌زدایی) را ببینید.""",
"fi": """Sateenkaari on spektrin väreissä esiintyvä ilmakehän optinen ilmiö.""",
"fr": """Un arc-en-ciel est un photométéore, un phénomène optique se
produisant dans le ciel, visible dans la direction opposée au Soleil
quand il brille pendant la pluie.""",
"hu": """A szivárvány olyan optikai jelenség, melyet eső- vagy páracseppek
okoznak, mikor a fény prizmaszerűen megtörik rajtuk és színeire bomlik,
kialakul a színképe, más néven spektruma.""",
"it": """In fisica dell'atmosfera e meteorologia l'arcobaleno è un fenomeno
ottico atmosferico che produce uno spettro quasi continuo di luce nel
cielo quando la luce del Sole attraversa le gocce d'acqua rimaste in
sospensione dopo un temporale, o presso una cascata o una fontana.""",
"ko": """무지개(문화어: 색동다리)는 하늘에 보이는 호(弧)를 이루는 색 띠를 말한다.""",
"nl": """Een regenboog is een gekleurde cirkelboog die aan de hemel
waargenomen kan worden als de, laagstaande, zon tegen een nevel van
waterdruppeltjes aan schijnt en de zon zich achter de waarnemer bevindt.""",
"pt": """Um arco-íris, também popularmente denominado arco-da-velha, é um
fenômeno óptico e meteorológico que separa a luz do sol em seu espectro
contínuo quando o sol brilha sobre gotículas de água suspensas no ar.""",
"ru": """Ра́дуга, атмосферное, оптическое и метеорологическое явление,
наблюдаемое при освещении ярким источником света множества водяных
капель.""",
"sv": """En regnbåge är ett optiskt, meteorologiskt fenomen som uppträder som
ett fullständigt ljusspektrum i form av en båge på himlen då solen lyser
på nedfallande regn.""",
"sw": """Upinde wa mvua ni tao la rangi mbalimbali angani ambalo linaweza
kuonekana wakati Jua huangaza kupitia matone ya mvua inayoanguka.""",
"te": """ఇంద్ర ధనుస్సు దృష్టి విద్యా సంబంధమయిన వాతావరణ శాస్త్ర సంబంధమయిన దృగ్విషయం.""",
"uk": """Весе́лка, також ра́йдуга оптичне явище в атмосфері, що являє собою
одну, дві чи декілька різнокольорових дуг (або кіл, якщо дивитися з
повітря), що спостерігаються на тлі хмари, якщо вона розташована проти
Сонця. Червоний колір ми бачимо з зовнішнього боку первинної веселки, а
фіолетовий — із внутрішнього.""",
"vi": """Cầu vồng hay mống cũng như quang phổ là hiện tượng tán sắc của các
ánh sáng từ Mặt Trời khi khúc xạ và phản xạ qua các giọt nước mưa.""",
"yo": """E̟nì kò̟ò̟kan ló ní è̟tó̟ láti kó̟ è̟kó̟.""",
}
_LOGGER = logging.getLogger("get_samples")
# -----------------------------------------------------------------------------
def synthesize(output_dir: Path, voice: Voice) -> typing.Iterable[str]:
"""Generate samples for voice in a separate process"""
tts = Mimic3TextToSpeechSystem(
Mimic3Settings(
length_scale=1.0,
noise_scale=0.0,
noise_w=0.0,
use_deterministic_compute=True,
)
)
key = voice.key
language = voice.language
speakers = voice.speakers or [""]
# Try en_US and en
text = _TEST_SENTENCES.get(language, _TEST_SENTENCES.get(language.split("_")[0]))
assert text, f"No sentences for {language}"
# Normalize whitespace
text = re.sub(r"\s+", " ", text)
voice_dir = output_dir / key
voice_dir.mkdir(parents=True, exist_ok=True)
results = []
for speaker in sorted(speakers):
if speaker:
# Multi-speaker
voice_key = f"{key}#{speaker}"
sample_path = voice_dir / f"sample_{speaker}.wav"
else:
# Single speaker
voice_key = key
sample_path = voice_dir / "sample.wav"
if not sample_path.is_file():
tts.voice = voice_key
wav_bytes = tts.text_to_wav(text)
sample_path.write_bytes(wav_bytes)
wav_hash = hashlib.sha256(sample_path.read_bytes()).hexdigest()
_LOGGER.info(sample_path)
results.append(f"{voice_key} {wav_hash}")
return results
# -----------------------------------------------------------------------------
def main():
"""Generate WAV samples from Mimic 3 in deterministic mode for testing"""
parser = argparse.ArgumentParser()
parser.add_argument("--output-dir", help="Directory to write samples")
args = parser.parse_args()
logging.basicConfig(level=logging.INFO)
if args.output_dir:
output_dir = Path(args.output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
temp_dir = contextlib.nullcontext()
else:
# Output to temp directory
temp_dir = tempfile.TemporaryDirectory()
output_dir = Path(temp_dir.name)
tts = Mimic3TextToSpeechSystem(Mimic3Settings())
# -------------------------------------------------------------------------
# Generate samples
# -------------------------------------------------------------------------
with temp_dir, Pool() as pool:
voices = sorted(tts.get_voices(), key=lambda v: v.key)
for results in pool.map(functools.partial(synthesize, output_dir), voices):
for result in results:
print(result)
# -----------------------------------------------------------------------------
if __name__ == "__main__":
main()

240
tests/sample_hashs.txt Normal file
View file

@ -0,0 +1,240 @@
de_DE/m-ailabs_low#angela_merkel 925ecfaaca6464841a1fae921d4571ee721936e9b60cfdd0682a369bae8f3a81
de_DE/m-ailabs_low#eva_k f4b82be8e062aed428873050e159cf2f77f9e7c22165f8d769a8d8d176b0deb6
de_DE/m-ailabs_low#karlsson ef726754d3f15764839fbbaf4d647456cea177b4204a740f8a32a2e599acc96b
de_DE/m-ailabs_low#ramona_deininger eafcf586b582c5ffb58c373a62e34c2e35d3b4b5d9d49288dabfacb50bc4fa8c
de_DE/m-ailabs_low#rebecca_braunert_plunkett 8955c8c73bf5ef6e1406ac9595a62c96b3ded480da8167bc66f47d191e307bf4
de_DE/thorsten-emotion_low#amused 410f0fa74e84ce1c27c423915a690abb5203132e031fa315339781e7f9652d33
de_DE/thorsten-emotion_low#angry 4bbfc36a892e7f9b48b4b42191d148b16fce6eb44615c2d485849a9d3cbe9dc6
de_DE/thorsten-emotion_low#disgusted 054756a20d6a51055c99f345a5616acce211ed2e79511c2ee62d2365575b2eb7
de_DE/thorsten-emotion_low#drunk 12fc11e7734b741721046ae7b879b4aa989608fe6f9db389fcd573f0eead0466
de_DE/thorsten-emotion_low#neutral 7b0341018ee707258a920b6957d413266876ce752e1ae74015a1edf43fe9d8ad
de_DE/thorsten-emotion_low#sleepy 2d72b1a722b2cf032180b6ce17b484c736a9118979bb2cf91c090894a3a15121
de_DE/thorsten-emotion_low#surprised 63c0bc94ab0349b33d9f133769f5a1a338afd0740c0081629938c7b63b8a7a01
de_DE/thorsten-emotion_low#whisper eb52505c1b0509fc051662b6c07bf7904f4c3c077cd2de1ec7b6fc26eff48d9b
de_DE/thorsten_low 60967155b319d1a78c2dade56a4f484cf6996c506f2d24b95dad717fafdad302
el_GR/rapunzelina_low 2c4f8001209df4d26dbc039b92144af484a8f0a2b54bb3483df6b7764f982306
en_UK/apope_low 9970bf35456f8deeec8ed17a3033772213ef9241da4c2d46bd24a2a4a65f723c
en_US/cmu-arctic_low#aew 55935329b3385a8bb5d8717bb8c4ed8a09ad8dbf94a4b0b955c5bad4263f3113
en_US/cmu-arctic_low#ahw 9a3168aa72f91b7417be04dc712818c9528f9546e2412618d62fe11a6e7b4e15
en_US/cmu-arctic_low#aup 95dd731a53da8ebf7920b871cec02109d4d248995a91b2f443a314eefbaef36c
en_US/cmu-arctic_low#awb cffe215aede2980608ef6b98dfe508681a8bd146899f679203c023efd1cd9e81
en_US/cmu-arctic_low#axb 4ef01fd73dacb0c60253591819241829bf8ce8adc0b110ba5617d35bd5c6e352
en_US/cmu-arctic_low#bdl 452d53ff79b712b0e57e816a384f49c332792eb308a967e388ff7a54fb730840
en_US/cmu-arctic_low#clb ef000a794630898d579d935858919f6ab8d898cae3672c6e5e4c4f360f919aba
en_US/cmu-arctic_low#eey d34ca616341e29d3fb71ee763aacd9d6dadae3ff816fe19c37a1085852663aa4
en_US/cmu-arctic_low#fem 2a2a191340746edb32fe3e9f7be1a0bf8f00f2e53d4a85f7e7d1f2b3986254f8
en_US/cmu-arctic_low#gka 20276c23add2cef2b2a77c94dbc93b90ec373fc073c533d09932d01c3a4fbdad
en_US/cmu-arctic_low#jmk acaaa225de7102b0dc87ce53f266cb45919bb76b484950781b42d393b7a45034
en_US/cmu-arctic_low#ksp 164b8ff272b2722ce34e809903fa1e1ebd905e9964631062998d8e8b97d8026f
en_US/cmu-arctic_low#ljm aedc2d32066c84939e2f179f71f388f15254e3eea09e02e1298bd9063c3385fb
en_US/cmu-arctic_low#lnh 83f7f1dae670400eecec72cad919aeebadd2fe186758a737fccabde593a3aeb0
en_US/cmu-arctic_low#rms bb67500047bda3ebb10cbf023605c23995b42169b94dad59ad87730e9bbedd04
en_US/cmu-arctic_low#rxr 9ef3de9029f91dc6c9b85039875fd348909f55994046beac13851b37a679b944
en_US/cmu-arctic_low#slp b05ca7deea14c8a24b5562aae799a8f4fa6b44bebb202a7342e4c3be824d9c15
en_US/cmu-arctic_low#slt 95c13f1a279a41036342fd4db6cd2d594093ccd691a8d79e7d82df4b8f92bd94
en_US/ljspeech_low 7b8ca151b5bcf4a222ab87596691ff9656f4d93df63392d79997c265770392c3
en_US/m-ailabs_low#elliot_miller 6b49d85817d3db962a237df68ba9b81012f0d1ac2881e691940e9327872bdb1f
en_US/m-ailabs_low#judy_bieber b77a6cb4207250bde93f17a1394be5931855d207a7d71549e5a1c95b42479d96
en_US/m-ailabs_low#mary_ann c489982a6de30a413f3fd80dffac08e74e5a94e4da11625b732c085f9ceda872
en_US/vctk_low#p225 7ad712ef61bc91f416c5434492a9b5dbc23d00793b46635ce7d1ce418769b421
en_US/vctk_low#p226 f2c5bd6f22ebb797833bc04bc83eb89a3eceb6cd2eb88dea3be7b091af9a32e4
en_US/vctk_low#p227 22e1c832ce19405e8429f3ddfad49a1d30bc7b8d2ba38abf7929e5cc8b9195c0
en_US/vctk_low#p228 223e2d6db16846264e2f3737e4c4ce7f5c38e42210ca4cb8e4d0627591b6e8fd
en_US/vctk_low#p229 bb10b987a193bedc06b6f5cfc741d6baa6d02edd8b79a5d3d92140f7817e7dc2
en_US/vctk_low#p230 3c5662e6debea2997520ec4e4f58ff4da666610649c419721f3dc8bc8401b8dc
en_US/vctk_low#p231 0f9ce494c76e4415c407692a8c7273c673dbdc5b118b5f329caca3b6d29f8172
en_US/vctk_low#p232 2f02948c8b93585d07b170d4d6f94acb4a0d501cc315349eb0e4484c50435765
en_US/vctk_low#p233 59a5ba7fe1c0572bd80591bf81d6107d4ed537ecf992a94c65fe3bf90d4b7494
en_US/vctk_low#p234 ebfd4cd838430ef3f9d99768ef78ac8d87bbe4518b1e7ed90855d077fe55ef41
en_US/vctk_low#p236 e085fc9508d5eb04e0e9edc8a489bac89daf975b5d6f1b61029697b8751182b0
en_US/vctk_low#p237 67959357597034865ffda8a479e28cf6801a8435f47f8d803e90c70a7b2fdf04
en_US/vctk_low#p238 e18ebae120fcb610a3837064971ffb610e9fd007871f3d7899945aa5532e4acf
en_US/vctk_low#p239 0a35e6bf4e3ee07a39d8cdf7a2cda76870f4c9a0acace2ec2d940b1d4c2b6ed5
en_US/vctk_low#p240 150afc2173c28f75d597815815084e962e84a0ccaa28e492c3accf3b63c8f6fe
en_US/vctk_low#p241 5526cf988c04a98e418bd46370299da82fff8f554063f08ba936296b54651ca8
en_US/vctk_low#p243 5864dfad8695e69fd3b7a0b04ba2d479a107ee29e0bb07ce72c433fc0fa9b99a
en_US/vctk_low#p244 c94c1d526334fabbf874c64e6b6ea6699e2e31d04c40b807c13d3d3867867bfb
en_US/vctk_low#p245 95cf3c78608c604b9096dfd1fcebfa36d87d300a824ef7cbdb6eb7d8599241ca
en_US/vctk_low#p246 9f096f4a99bf13d7e7ce9c92467cc438eb62f9bfb56666c1fd4a84d170487c01
en_US/vctk_low#p247 49f2a02454a7f066ee1d48b8ea17f08db60c8167097465a3564707c8bd15fc67
en_US/vctk_low#p248 f4dfa3b763d47249b9aba02455bea7a369ac06e4020868dd88155b679134f38a
en_US/vctk_low#p249 060626a269ea12a65e57a8554beb3603126492b936989b2c039e87a043fcaa6f
en_US/vctk_low#p250 a0f21c630f0a65ad8c8c85bb16b0b9cc575327fb6e34450fe738fac8ff671e99
en_US/vctk_low#p251 466b1426b1e95514f02dd93b18c40655553b3bcf9c4c6679b6a26d5e9ef802fa
en_US/vctk_low#p252 68d819d08adb111d274943625e47bcd1efca579f113bc707aac75e2274a7697b
en_US/vctk_low#p253 484a4f30bcaf73b191726e4ab9447a4e92fb8967f50915db0467a9eda432d43c
en_US/vctk_low#p254 50aa92ac93a1be481d6c1797524827b2480bfd1ef50884e693f8b292e78b79fa
en_US/vctk_low#p255 a3330bf08b6ee049b922d1d298afc15209e4972f7f5c6da8a11e4d17bf556e63
en_US/vctk_low#p256 619790fe6b0fe912ad64ece538e705ab89b9ea459c1619be28761a893d638a20
en_US/vctk_low#p257 bea7fbf70863e0c13c37b362c1f28429874cd1d59ad9d2e6954f26b1926a076a
en_US/vctk_low#p258 5c0dcf4acc508327fa736bcd97a9b0949b269c49bbae12394279e753a6103535
en_US/vctk_low#p259 170c0b8f546a127416a6bc8643968bbd17d6b91cfbc03528b8c7578c69310bfc
en_US/vctk_low#p260 e8788eaf2bc09a67ce51087bc3542817fb2e2426594f3b945f64bd1650254874
en_US/vctk_low#p261 00046e20ecb0b3cb83f8976107478c08a1f908415e58e5f6106503178ef2331f
en_US/vctk_low#p262 6053ffbfbfa8601acbffa96971f251a24b1905e45c72dfca0ed8d3d34fdfb839
en_US/vctk_low#p263 ef3e16038b4316a8a3843588d59d5b3a080aa76abeb82e7ac531aacb77bba4ed
en_US/vctk_low#p264 d11507eb8d9d3901048e779d8eb370b5f6a91acd352b2705f59772d3d2c14a54
en_US/vctk_low#p265 208bfcdae15c0b011c4fb5d2a4ffb9ba38ab2cba62517cd766cb84839ee6b319
en_US/vctk_low#p266 a0722d668b736b86e1193fa991be100a63dd49032a8ce9766c2d3b601504adbb
en_US/vctk_low#p267 efb8719ad5ba6fb99db83bccf88184d523f37967a4cea7be960c913568d0322c
en_US/vctk_low#p268 281d2da2c46daef2cad634abf0b2e4c49d64c97945023b72777929d17f75cb9b
en_US/vctk_low#p269 fc7f38474e11ed344a43dc0bde874f09a9d630688857c71b0717b8ffcdc62c18
en_US/vctk_low#p270 11d5011289a0180863f0ccba99cdd9347135d794b1523754b0cd5217e0b971cd
en_US/vctk_low#p271 8384364cd0fd3ebaa9905d0a8fe6c47522c5b203d619960a64820ce8ba784b43
en_US/vctk_low#p272 ef0e04b8571d8ba9825299670ee50e927aaa1ba60bd87cf449b6f471eee725fc
en_US/vctk_low#p273 1e71ea4aa90c2091635624cbd98305239f7375c79f5cde99731355fac9ea1182
en_US/vctk_low#p274 d3dda7a5520ab7d125684454468a24a98dc32c318bfdd908adeb5b826f09e2ab
en_US/vctk_low#p275 4d2b006d99b516a2a4c38ad8633f5f43759eda8389b00f1cc718d56edcbfafe7
en_US/vctk_low#p276 f100fba41c97eb24b85923d94fb3de53b8692605de6619527149713c1884345a
en_US/vctk_low#p277 6c0e5734d48af659f21ea3597eccf3a9c616784be2054f556683772e5de8c8c3
en_US/vctk_low#p278 e881363df8c7448eef983f057c8093e0d1ff0081b2445c61b164e146fb2bfd3a
en_US/vctk_low#p279 81332ca51ca57edd7ae71ca1f0a546ee1a6b5495fdd25b89288191b01e222cd4
en_US/vctk_low#p280 977dfad84a34a3723952f3b208833b9b5b407cf19043578d3e4e817ee8312e7f
en_US/vctk_low#p281 231a1f7420791a6419efeceba1694659aa036987ebf8dee2ed1efc2188161f9e
en_US/vctk_low#p282 66a85efcc5c5c9ddc467a9348c8c4391f1a806bd28c9677e0526e6a82f417cf5
en_US/vctk_low#p283 54a61cfde6a5458b6529543da637a3c00b370137c1104be731abf70caa5eb8cd
en_US/vctk_low#p284 5113976c1b2a7b7394d9e9186fdcbd01aa46012430fba2c6407f3c9da213995d
en_US/vctk_low#p285 89b798de7ce50b01e2a12f176be8459110d025e7f8a5e01a2922b198b34fce95
en_US/vctk_low#p286 da0eed365e7cd8db60e2e93588b95d319b8a7d4cd73f64da3723bd17935e3ac5
en_US/vctk_low#p287 26883a583b449f5b176335262874a70389177e4c6c89313282c3e4a8720189b8
en_US/vctk_low#p288 858a43782d29cb058aadcd8d787dd9c8b89ca362770cef7304a987a830167d84
en_US/vctk_low#p292 22349d5b4740cfd542929a763beec3d30bdc7460ebfe215bda2ef7a719928d83
en_US/vctk_low#p293 809bd400bdb0cd9b1053ffe281817d3d1d574a44d74020da50aa2109abb9049f
en_US/vctk_low#p294 790b8652b55e20355090cc1672a3b4436793c9ac906a14695c4bbaba2cd41043
en_US/vctk_low#p295 39d20f227285cfce2687c42a531fc7f2c5c242c5292de2d541fafabcc8b985a7
en_US/vctk_low#p297 d44997ec707bb4470c0aa4d9bbd154ad69aa0c793741449bb2b4656979bfa2cd
en_US/vctk_low#p298 4b1cd179d6547a7c6cccf1c47546e8a7a652c38a41c7756f6682fe6c059200ce
en_US/vctk_low#p299 d5711c71ef457f0505d0e6cd3795a91d2c6769c51f9cf88395162bc3c5729eda
en_US/vctk_low#p300 567da92d5e825a8264b5f569ec80ab189e17cf0f3d60d58e69325e63fc8bcba4
en_US/vctk_low#p301 e2ec9a93301152c04cbf5a96e81e1c5e05a9f18d61f3a1a03e1be71922b4e73f
en_US/vctk_low#p302 7173e5bce70a0c54af5231a73ef1fff240c8423197d87f0ca4f7837ae17bf3f8
en_US/vctk_low#p303 6d995352038dc76b1f77433e89e87ec2cc3a9c6019dc2678a24584c5d058a5f6
en_US/vctk_low#p304 f0355bbccf22ad45e03ffc847cfd6336bea8e757d421d67abfa9f0a0c290bf56
en_US/vctk_low#p305 80155d4ea8ca2ea01794e0844748a344b97f12bdec52b8f6d7b4c8ae9526d36e
en_US/vctk_low#p306 5764ec5a9fd44f8241aa065c03b165faa2656238f8a10be25e4d896a3005d13e
en_US/vctk_low#p307 0bd19cb9cbc1ef673d0733aef9d7ac7f9a994c607da529bb8f63aa956126d953
en_US/vctk_low#p308 c56938547028c28048f65f33c65951565bb5a6c8f6b2a9d676677affccc7ad7a
en_US/vctk_low#p310 a21fceccee2cb0b6ba2b89c5bcec0e03fac6a836e2b287afbcb89cb71f638e85
en_US/vctk_low#p311 b5e89d4b20ce0dcd2e852e03edcbee79dd5b2a16f870e8ef0cb0d30ef005a860
en_US/vctk_low#p312 643659ba033fbfed8411f475ee4d2bf7e7fbabe2a271c2c09d9d3524ce4c73f3
en_US/vctk_low#p313 3c53813634ddff3030bee034f91ec6c58e018ed06e2512124b9ca31e47940dc3
en_US/vctk_low#p314 8b43998688ce30e77373ba2f7a1d0e1f578c7e1467e2641aae3c37ec48637ac7
en_US/vctk_low#p316 1b436cbdb5a3cca4884ff05636e2c19ad4c3a5f023d3d6972e16f4acc4d7821f
en_US/vctk_low#p317 124b8c1d917e0cf07b5c5d38adc373aa60429248b9b803ee12c42412bb8f1643
en_US/vctk_low#p318 565c80c18a8dbfbbb98fe4b6c856155e0d24525d5c3a98726087a795ca24deb8
en_US/vctk_low#p323 562306bdf749b8f6f071deb328b7d20e391e7d3ae4ef1be8929c8e32f1cd90c2
en_US/vctk_low#p326 3d3d3b48c4603b41178824b51520bccd8a0954561590e73b6e259cfb3abf3a96
en_US/vctk_low#p329 3849447ebb745338809d6d1b5551db2324372880d3569c77da8f664b32334d9d
en_US/vctk_low#p330 967dfd1fb71794f8e0bbfccaa0df6db2284dadcc86e8c3b26f6eb70b9b321535
en_US/vctk_low#p333 835732ecc3c247179f88df8f71fd36bd3d170941ba96cfb0376eea29d2f2aa3c
en_US/vctk_low#p334 006203ba916c932c7c12c5ba9f1ac4a1a576ebca091fb0d7cf76a8a0e1bd4b18
en_US/vctk_low#p335 1649f39a449c950b18520e7067b575153b2dccfb0f0c1600fe4f057b6470eb8a
en_US/vctk_low#p336 e707c611a4c98eddc120e2bb14839e2e5238c216775023dbd18a26c6d4a9e216
en_US/vctk_low#p339 2c786e505c6678a47b549a9f3c03e3194956240e5bf0ad9d577a3069e938c44f
en_US/vctk_low#p340 0140261b209bd7dfe4dc8da8b9d3561c47b7bc19906240102a47975278950f05
en_US/vctk_low#p341 c76c99818cb7d691f6a04ad7af43ea6c14251ac3a184ff096c92374a77f94f91
en_US/vctk_low#p343 f8f4a3cf77918c1c2b0b3fdc3de0f68d7553a66026dcd29d3b34053822782336
en_US/vctk_low#p345 2d79c6070f2fd01e9f6734d19dd613f51e583086e313c2f78d50d3c3de6eef5a
en_US/vctk_low#p347 d63326407791189e2cef60a60a00999bf39cb2d579178aae789d2a11af0b5ca8
en_US/vctk_low#p351 1e007c1130015bbfa0fe0308993b7fe2df5d915fbe76ee1b6270c3c8a1213ca8
en_US/vctk_low#p360 de11a223550852ebe186db49bc5c0af86fd769679379cabdc0fd33ae4bd5097f
en_US/vctk_low#p361 201b68a61ab6f41c63446661cca56fe52588a5093da31897e7717daba298b9f1
en_US/vctk_low#p362 08eec6f2557d64c0d70634421c1212ad43023dddfafafa16ca358978826f613c
en_US/vctk_low#p363 7a9438a3f42921bb63921b5e32b3876c54113d789a85a8666dc70190d422fe49
en_US/vctk_low#p364 7cbd7497566f6e0141563d93344a70529ff2f6bfd4f382ab7c5adac2986bfc0b
en_US/vctk_low#p374 d1832475f7a1f7ee478726360bd936112c97600118ccd1143bbd0bba791e841a
en_US/vctk_low#p376 79a65a8c3045737645da137145bcc7b76340804b466b932ec07c7cf0a12370e4
en_US/vctk_low#s5 3e63e29eab1d4a42b8e1f57c9453c1b7bb071e33707cbb6bbafa1fa69bfc05f6
es_ES/carlfm_low 31fa1c7343ac08ae1e5084ced180c8ec6334f5f39d743b46857e0baf7f668a6e
es_ES/m-ailabs_low#karen_savage 578db4ce2a81ced232ef6d7e7bc7f894b91e49adb0f982782a64c5ea26649c37
es_ES/m-ailabs_low#tux 8bf16f67ad6b86c2006fbc9da5d42b6b70090550672139093dd39eee0be9ae22
es_ES/m-ailabs_low#victor_villarraza f26b5bfbf2421dbf5dd5562544876d688729b0bff339bc5c994c425629eb165b
fa/haaniye_low 8157477b0d75cd234815275d79ea7b58a71c39cacda63b4157e062f7e35b4e10
fi_FI/harri-tapani-ylilammi_low 743c357c0b59fc9fa24ad2943a224c7850db533b40b9c2d68f0e00c395c965c4
fr_FR/m-ailabs_low#bernard 13a4de9f10fbc60b311dec8b2cf21ed1c353f1373dac39e352e584c5dd4e1c1c
fr_FR/m-ailabs_low#ezwa 4b1770b7429c8b3a9faf4d452ac99c3c0360d420a1bbc6551bf1437d9627bd2d
fr_FR/m-ailabs_low#gilles_g_le_blanc a39d0378d281a9bd82f1d2a0f61074219c96d5a2cc04bb5af388b29ad493b5ac
fr_FR/m-ailabs_low#nadine_eckert_boulet dbd6364b6f85ac58e288fe38754bf0c57e9ba2c9ff6c68d160920c06de4f8315
fr_FR/m-ailabs_low#zeckou 1e32db3a52c3124dba698ec2adfbdb9a25d1ae16f9c875dc87f1177a4d1b4ece
fr_FR/siwis_low 2103220387acb0774586f581b61780275abd1bc3ca54df070273471153291b92
fr_FR/tom_low b2d59d6484a6e3850f0cd81c2287cab674085c7185e553dfd3852a81d918d2d6
hu_HU/diana-majlinger_low 80b33323d8693344f736db16663aefd3dcd60086bdecfe2b02e7605aeb4f4c47
it_IT/mls_low#10446 11cfbb7260a9be3d58f919065aad0e463ca0313c4841a213ad0fd5e4480257d6
it_IT/mls_low#1157 a2f3f345dc34b05973a4304c6c88b3d548d6d351b905de05ff77e87fab2f31d7
it_IT/mls_low#12428 a7b198a5a3234e07cab4d69cbda6bee9d30b370ecc7cf29afd2955ef3c9cdfca
it_IT/mls_low#12804 8a96cf7e1e76310bb4600566ab5818ecf87de5f46b8273d3443ec18ebc7e038b
it_IT/mls_low#1595 ee2fd9bfb3a8dad8ca8d38e680e26c93c8bc9103727c7dc58a822fe14c851a6e
it_IT/mls_low#1725 3485abfec0a2b00ce5e8dcff9fa0b7cc8a8116e3638b8b71a07d2ddb5c5102e6
it_IT/mls_low#1989 18a25c71bb95ca7fc1736cb9d462efb27eefed522ebcdeb25c6f042dd3224593
it_IT/mls_low#2019 5202ced40c4d4c0880b35663c12133465f21288f8700fe7f4cd1c4b9863d5032
it_IT/mls_low#2033 4ab2986931afedcd89616250f6200efb4631a59d098e3eea2d8551328603ee98
it_IT/mls_low#277 84ddbef5c511fe94603db4a26859b532a98fec3573e934b896344128a527a93d
it_IT/mls_low#4649 e8bac74a1af1a0bc41a340875aa306b086799f2dca80ef50110fe9ead3c3012b
it_IT/mls_low#4705 07cceff01f30b6779b7ad3f86684a05e356e1ac639b5a7add35ce493d76222a2
it_IT/mls_low#4971 0b193b36bba7001fce34229ff75707cf7974417903a7039d0a8812daf5e6f974
it_IT/mls_low#4974 bd542ef798e0321f84f827c4768976a010af6efc53ec211f6eca9d461185d538
it_IT/mls_low#4975 f5c212dc91012bb0a4b742c5d1d9ae54bab18d35b4896b66bcdc7a2ae53cf4d5
it_IT/mls_low#4998 3c8d9d73c21ae112a5639f58e632ff8d473768543cb2080c28e36b001dd284f0
it_IT/mls_low#5010 6c38d720c86a41915f860f85b39a34f9b8c9feb2359eb275ae6ec67bc173aafa
it_IT/mls_low#5421 2a708e24754205a409671fc9b37cddc86ef164560b98bcc9fd111e38776f012c
it_IT/mls_low#6001 21c223b035297ac0f62e05e86e5957a851049da3c7f5fc6fa9cacd9bae9c8369
it_IT/mls_low#6299 8352fef9431a339cb626b59ca755661e99596bcb9ea4c1279b1655d52e590b98
it_IT/mls_low#6348 82d11322849acb278a016675d670819028ba3506973b862098e0decdabd2396e
it_IT/mls_low#643 9968e5875eab8d2d77b9a550f2de27b6e03c479242a4f531ad189dcb4c51f756
it_IT/mls_low#644 f251f450e50313677c2a488322829d5ba86ebd6f3139fa6bc03fc986ad6efb1e
it_IT/mls_low#659 95f1da5647fadf666718315b6df628263b05ff2a89e653e6bb4fb98b495bbbf6
it_IT/mls_low#6744 3aabb9f2eda521bad3f23223726d80f8592716decb60f29a2feab1f344280f65
it_IT/mls_low#6807 36b8df782565f9250e748979fd8cfb23ab288a4b893637e2aa2b5122e12592ab
it_IT/mls_low#7405 5b87ec787f4360086baf088fd2cfe3058dd3983f4cabed62e13fcef05e8b0bd1
it_IT/mls_low#7440 c5728755d1c080272a77c221273b87514850df852d002d989d2d7487b320471f
it_IT/mls_low#7444 15bbd16a17c1e2e4040898d8274a8c804563eb68ae68aa7d403f26047067bbb2
it_IT/mls_low#7936 b1dfe503c4ec9c769b4ca38e70d5d4602e179c600cbc4f9f98b22e900e7ad5cd
it_IT/mls_low#8181 2683a2efe9d6bd0628bc1baa54d1fe379cc9ced431bdae28476f08ac0db80baa
it_IT/mls_low#8207 584674d77e803dadb2d99154eb0a2d77571be680601f1a64e0ce045c7e2252e5
it_IT/mls_low#8384 272ea6b83a4e97778b02cbf094ab5b6b2a7039a9923516c89ebc76b0e6ca2d73
it_IT/mls_low#844 d7dc511316c965ba15ac5500b4ae9dc27601a8d5f7cb07bddb1faac0055728ff
it_IT/mls_low#8461 79e98db7975e88c7b0b0228b926da7fb09ff993632a7cb809ffe9cccec29052f
it_IT/mls_low#8828 aeda5c70513f6054620b8efb36ee125860f7d3d69a8d3ef40a803e5ab14abb70
it_IT/mls_low#8842 2c0f500a5b639772aab80755ed0f4082cda39267f30509e779c7f766e0bfe5e4
it_IT/mls_low#9185 685a00e2e485fb3d7f31be07d2e4515e1c74a68533c42681b18b4609b0c2fa3d
it_IT/mls_low#9772 393f84e5ddae6d6ae02345c02ba387b6b2bf454be608acab8fa9b014fc7db110
it_IT/riccardo-fasol_low 0f37384de1a5ae2f703d2a70cdf0fc141988470a24210b8812e3574c7bfdbfa1
ko_KO/kss_low 0be2ad36bcb3446eb8d8171884bc6ddd5a6cd63eb999d75728feec4aadd79c43
nl/bart-de-leeuw_low 99ef4919da457f26908fac379a6590d074969dadda562175a5485c48a8eeed0d
nl/flemishguy_low 1a4841b613069edf9c27bebdbe594a403cfe133c34a9eeddf29a266bc2f9169c
nl/nathalie_low f3708f40f2befbb66f319c0c0c7d81bd561fa6404571f0ddb90418d81f1559d8
nl/rdh_low e3794ead9fbaff022ab61ac0fce164da375e0017bc0e741abad92f08a11d4e55
ru_RU/multi_low#hajdurova 1c328bf9f9d0c57ddff0af01b3b3448ed514ad074ea2361c510905ec564ba40b
ru_RU/multi_low#minaev b7a7a069745425cc905492bff3d07c06ab7a46f96697549d11597387ab5f9b7c
ru_RU/multi_low#nikolaev bbee5cb008d31f0f2868690833bb69e58d5023685332e4a2689b1e5459313550
sw/lanfrica_low 26560985c67d6a31cafa685ef05681748dfec06bee238136b4a249d87d491926
te_IN/cmu-indic_low#kpn 1f2d196828b7306a810bf1972fcc91db5907dc5ebec0b3926bbfe4ed24f2c94d
te_IN/cmu-indic_low#sk ea87035f8a1bc7e4c32cc0a4d7223f8a359d9d4c41ce0fcfd850a102558554d3
te_IN/cmu-indic_low#ss dd19e3e73ec948c6df9d296d9826c98c451ba9e1a83d1c69e169e28313614f0a
uk_UK/m-ailabs_low#loboda 6cb7ff7579671e1dfd25d94dd81ceb947536ec2f6f7e92ed9b0992244607493e
uk_UK/m-ailabs_low#miskun 0fd56eda8f547b22ae1e42f46952c4c6fbc6beabb2b35df0fb6fb5418897391b
uk_UK/m-ailabs_low#obruchov 9f6b3805843c8f5b1f4edc995f489d62712e9976219924c1ba1bae3c9e7e6754
uk_UK/m-ailabs_low#pysariev 216aab135028eadc74f155c2ac305eda89a3c2a209da2058d2944f658c1622b4
uk_UK/m-ailabs_low#shepel 5b6555fb3cf9ab757ae534cb6fe44377d218d17e8bf43cd47b7bd73bb36d83ab
uk_UK/m-ailabs_low#sumska 18e29e52ae17c1272fd95ff9b92554d80c984826d10f7068eb43df252c671c7f
vi_VN/vais1000_low cb9d79e8a35a6ce218f69d4645c4b6c0f1a0cfa4a228272e73130a6980667ae5
yo/crowdsourced_low#00295 dd3de28e18ae19cffac43ddb100a42520b3a55b0458e9e2df2145c656d9cd5fb
yo/crowdsourced_low#00610 a1c6380f52c067992bcff53e8613cbab4d8ad3ae432e442bd63491feab640960
yo/crowdsourced_low#01208 60591295c96aa71269397a026b9989db16cebdec2c3c60073d03e1f4a8f280fb
yo/crowdsourced_low#01523 c5914a75615931b585cc7fc64db5c1a1e8902afb500052bccfb9ba6373046151
yo/crowdsourced_low#02121 68abb56f0e3cd5f8f7aeb2651cd8f3ff0ad4d237840d02dcec5338da1b92bc8e
yo/crowdsourced_low#02436 ef7a83becb0971d4515f43646863ece2456c055edc3f03c7957de9de9588b746
yo/crowdsourced_low#02484 8c9c2b14d30f442fdf83e1f002851c5902ffc748ad8fa6fa67bae67e63b87735
yo/crowdsourced_low#03034 44daa2430e239cded05f2f269bbb11127b8998a5c587ee4a140b8a201c6fe09e
yo/crowdsourced_low#03349 100c7da279c83bfa900a8f1272b3e86e8205a68818d76d8e236b2b52147f201a
yo/crowdsourced_low#03397 905cf74bd1cafc6336426e61edb0960bc1c3984a759b825c9c45941950842a6b
yo/crowdsourced_low#04310 9eced14b5fe3d7a0a8338793ee49f8cc64edd561c900086d552e17fc73691544
yo/crowdsourced_low#05223 569d645574ef0765355faff20dcb3893db254f4446e16f17a3daf7c10b712ec0
yo/crowdsourced_low#06136 e7b1e4915094b2ef516fa823670b3d05fb7db9ec9efa682a676683f3bf0e39b5
yo/crowdsourced_low#07049 60fa296193a6ab21abac2cdcab14b6b7cffded7a440eb761b797f6d881645241
yo/crowdsourced_low#07505 3dcc1354178495380b4b057cf6c0b80661f7219ffa1b18b70ff2f7b70b23bb14
yo/crowdsourced_low#07508 f6a3b986c1e7a915e8d833a1c947c1c6a492aae624b73839f72006c6a3ce3189
yo/crowdsourced_low#08421 464fecf5253067a01348a774b80fc0a891c48ccbe58fcb95cf7205c36ce182f3
yo/crowdsourced_low#08784 7c5302a1e1193aec8ddf9a48ca758d283449eeffbb0cc23497d97fa7368ccd21
yo/crowdsourced_low#09334 d6e1df816c04e9a584ce936448d9ac5712423365f6360ec79152a85072054204
yo/crowdsourced_low#09697 4d005304d6fccc7df64f7388d15b9a85d3d3ffd88e4c1b8ddeda0b4fa87a1b63