mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 13:38:47 +00:00
72 lines
2.0 KiB
Python
Executable File
72 lines
2.0 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# Copyright (C) 2011 Reece H. Dunn
|
|
# Licence: GPLv3
|
|
#
|
|
# A script for generating the dictionary Makefile rules from the files in dictsource.
|
|
|
|
import sys
|
|
import os
|
|
|
|
voices = set()
|
|
dictionaries = {}
|
|
|
|
# Map voice names to dictionaries when these do not match.
|
|
special_voices = {
|
|
'zh-yue': 'zhy',
|
|
}
|
|
|
|
def find_voices(path):
|
|
for filename in os.listdir(path):
|
|
voice_path = os.path.join(path, filename)
|
|
if os.path.isdir(voice_path):
|
|
if not filename in ['!v', 'mb']:
|
|
find_voices(voice_path)
|
|
else:
|
|
if filename in special_voices.keys():
|
|
voices.add(special_voices[filename])
|
|
else:
|
|
voices.add(filename)
|
|
|
|
find_voices('espeak-data/voices')
|
|
|
|
for filename in os.listdir('dictsource'):
|
|
if filename.endswith('_rules') or filename.endswith('_list') or filename.endswith('_listx'):
|
|
dic, cat = filename.split('_')
|
|
if dic in voices:
|
|
if not dic in dictionaries.keys():
|
|
dictionaries[dic] = []
|
|
dictionaries[dic].append('dictsource/%s' % filename)
|
|
|
|
def write_dictionary_make_rules(f):
|
|
f.write('##### dictionaries:\n')
|
|
f.write('\n')
|
|
f.write('dictionaries: \\\n')
|
|
for n, name in enumerate(sorted(dictionaries.keys())):
|
|
if not name in ['bo']: # espeak fails to read these voices
|
|
if n == len(dictionaries.keys()) - 1:
|
|
f.write('\tespeak-data/%s_dict\n' % name)
|
|
else:
|
|
f.write('\tespeak-data/%s_dict \\\n' % name)
|
|
for name, files in sorted(dictionaries.items()):
|
|
f.write('\n')
|
|
f.write('%s: espeak-data/%s_dict\n' % (name, name))
|
|
f.write('dictsource/%s_extra:\n' % name)
|
|
f.write('\ttouch dictsource/%s_extra\n' % name)
|
|
f.write('espeak-data/%s_dict: src/espeak espeak-data/phontab %s dictsource/%s_extra\n' % (name, ' '.join(sorted(files)), name))
|
|
f.write('\tcd dictsource && ESPEAK_DATA_PATH=$(PWD) ../src/espeak --compile=%s && cd ..\n' % name)
|
|
|
|
try:
|
|
filename = sys.argv[1]
|
|
except:
|
|
filename = None
|
|
|
|
if filename:
|
|
with open(filename, 'r') as f:
|
|
prelude = f.read().split('##### dictionaries:\n')[0]
|
|
with open(filename, 'w') as f:
|
|
f.write(prelude)
|
|
write_dictionary_make_rules(f)
|
|
else:
|
|
write_dictionary_make_rules(sys.stdout)
|