Directory transmitter renamed to radio

This commit is contained in:
Bertrand Songis
2013-12-02 07:13:57 +01:00
parent f4df52a033
commit 942e658c8e
707 changed files with 0 additions and 0 deletions
+234
View File
@@ -0,0 +1,234 @@
#!/usr/bin/env python
import os, sys, shutil, platform, getpass, subprocess, zipfile, ftplib, httplib, threading
BINARY_DIR = "../build/"
options_stock = [[("", "EXT=STD"), ("frsky", "EXT=FRSKY"), ("jeti", "EXT=JETI"), ("ardupilot", "EXT=ARDUPILOT"), ("nmea", "EXT=NMEA")],
[("", "HELI=NO"), ("heli", "HELI=YES")],
[("", "TEMPLATES=NO"), ("templates", "TEMPLATES=YES")],
[("", ""), ("nosplash", "SPLASH=NO")],
[("", ""), ("nofp", "FLIGHT_PHASES=NO")],
[("", "AUDIO=NO"), ("audio", "AUDIO=YES")],
[("", "HAPTIC=NO"), ("haptic", "HAPTIC=YES")],
[("", "PXX=NO"), ("PXX", "PXX=YES")],
[("", "DSM2=NO"), ("DSM2", "DSM2=PPM")],
[("", ""), ("ppmca", "PPM_CENTER_ADJUSTABLE=YES")],
[("", "NAVIGATION=NO"), ("potscroll", "NAVIGATION=POTS")],
[("", ""), ("autoswitch", "AUTOSWITCH=YES")],
[("", ""), ("pgbar", "EEPROM_PROGRESS_BAR=YES")],
[("", "UNITS=METRIC"), ("imperial", "UNITS=IMPERIAL")],
]
options_v4 = [[("", "EXT=FRSKY")],
[("", "HELI=NO"), ("heli", "HELI=YES")],
[("", "TEMPLATES=NO"), ("templates", "TEMPLATES=YES")],
[("", ""), ("nofp", "FLIGHT_PHASES=NO")],
[("", "SDCARD=NO"), ("sdcard", "SDCARD=YES")],
[("", "SOMO=NO"), ("SOMO", "SOMO=YES")],
[("", ""), ("ppmca", "PPM_CENTER_ADJUSTABLE=YES")],
[("", ""), ("autoswitch", "AUTOSWITCH=YES")],
[("", ""), ("pgbar", "EEPROM_PROGRESS_BAR=YES")],
[("", "UNITS=METRIC"), ("imperial", "UNITS=IMPERIAL")],
]
options_arm = [[("", "EXT=FRSKY")],
[("", "HELI=NO"), ("heli", "HELI=YES")],
[("", "TEMPLATES=NO"), ("templates", "TEMPLATES=YES")],
[("", ""), ("nofp", "FLIGHT_PHASES=NO")],
[("", ""), ("autoswitch", "AUTOSWITCH=YES")],
[("", "UNITS=METRIC"), ("imperial", "UNITS=IMPERIAL")],
]
languages = ["en", "fr", "se"]
#ftp_host = "ftpperso.free.fr"
#ftp_user = "open9x"
ftp_host = "open9x.freehosting.com"
ftp_user = "openxfre"
ftp_directory = "public_html/binaries/"
def upload(binaries, ext, stamp):
if not ftp:
return
print "Zip creation..."
zip_name = "release.zip"
zip = zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED)
for bin in binaries:
zip.write(BINARY_DIR + bin + "." + ext, bin + "." + ext)
zip.write(BINARY_DIR + stamp, stamp)
zip.close()
print "FTP transfer..."
ftp_connection = ftplib.FTP(ftp_host, ftp_user, ftp_password)
try:
ftp_connection.delete(ftp_directory + zip_name)
except:
pass
f = open(zip_name, 'rb')
ftp_connection.storbinary('STOR ' + ftp_directory + zip_name, f)
f.close()
ftp_connection.quit()
print "ZIP extraction...",
http_connection = httplib.HTTPConnection("open9x.freehosting.com")
http_connection.request("GET", "/binaries/uncompress.php")
response = http_connection.getresponse()
print response.status, response.reason
os.remove(zip_name)
global_current = 0
global_count = 0
def generate(hex, arg, extension, options, languages, maxsize):
global global_current
global global_count
result = []
states = [0] * len(options)
count = len(languages)
for option in options:
count *= len(option)
global_count += count
while 1:
# print index, states
for language in languages:
hex_file = hex
make_args = ["make", arg]
for i, option in enumerate(options):
state = states[len(options) - 1 - i]
if option[state][0]:
hex_file += "-" + option[state][0]
make_args.append(option[state][1])
hex_file += "-" + language
make_args.append("TRANSLATIONS=" + language.upper())
if mt:
cwd = language
else:
cwd = "."
size = 0
if compile:
subprocess.Popen(["make", "clean", arg], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd).wait()
p = subprocess.Popen(make_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
ret = p.wait()
stderr = p.stderr.read()
global_current += 1
print "[%d/%d]" % (global_current, global_count), hex_file
if ret or "error" in stderr:
print stderr
exit()
for line in stderr.split("\n"):
if "warning" in line:
print " ", line
for line in p.stdout.readlines():
if line.startswith("Program:"):
parts = line.split(" ")
while "" in parts:
parts.remove("")
size = int(parts[1])
if size > maxsize:
print " ", line[:-1], "[NOT RELEASED]"
else:
print " ", line,
if line.startswith("Data:"):
print " ", line,
if size <= maxsize:
binary_name = hex_file + "." + extension
if compile:
shutil.copyfile(cwd + "/open9x." + extension, BINARY_DIR + binary_name)
result.append(hex_file)
for index, state in enumerate(states):
if state < len(options[len(options) - 1 - index]) - 1:
for i in range(index):
states[i] = 0
states[index] += 1
break
else:
break
# stamp
stamp = "stamp-open9x-%s.txt" % hex.split("-")[1]
subprocess.Popen(["make", hex.split("-")[1] + "-stamp"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd="../src").wait()
shutil.copyfile("../src/" + stamp, BINARY_DIR + stamp)
return result, stamp
class GenerateThread(threading.Thread):
def __init__ (self, hex, arg, extension, options, language, maxsize):
threading.Thread.__init__(self)
self.hex = hex
self.arg = arg
self.extension = extension
self.options = options
self.language = language
self.maxsize = maxsize
def run(self):
self.hexes, self.stamp = generate(self.hex, self.arg, self.extension, self.options, [self.language], self.maxsize)
def multithread_generate(hex, arg, extension, options, languages, maxsize):
if mt:
result = []
threads = []
for language in languages:
thread = GenerateThread(hex, arg, extension, options, language, maxsize)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
result.extend(thread.hexes)
stamp = thread.stamp
return result, stamp
else:
return generate(hex, arg, extension, options, languages, maxsize)
def generate_c9x_list(filename, hexes, board):
f = open(filename, "w")
f.write("const char *open9x_%s_binaries[] = {\n" % board)
for hex in hexes:
f.write('"%s",\n' % hex)
f.write("0\n};\n")
if __name__ == "__main__":
ftp = "ftp" in sys.argv
mt = "mt" in sys.argv and platform.system() != "Windows"
compile = not "nc" in sys.argv
if ftp:
ftp_password = getpass.getpass()
if mt:
shutil.rmtree("util", True)
shutil.copytree("../util", "util")
for lang in languages:
print "Directory %s creation..." % lang
shutil.rmtree(lang, True)
shutil.copytree("../src", lang)
if platform.system() == "Windows":
# arm board
hexes, stamp = generate("open9x-arm", "PCB=ARM", "bin", options_arm, languages, 262000)
generate_c9x_list("../../companion9x/src/open9x-arm-binaries.cpp", hexes, "arm")
upload(hexes, "bin", stamp)
else:
# stock board
if not "v4" in sys.argv:
hexes, stamp = multithread_generate("open9x-stock", "PCB=STD", "hex", options_stock, languages, 65530)
generate_c9x_list("../../companion9x/src/open9x-stock-binaries.cpp", hexes, "stock")
upload(hexes, "hex", stamp)
# v4 board
if not "stock" in sys.argv:
hexes, stamp = multithread_generate("open9x-v4", "PCB=V4", "hex", options_v4, languages, 262000)
generate_c9x_list("../../companion9x/src/open9x-v4-binaries.cpp", hexes, "v4")
upload(hexes, "hex", stamp)
+33
View File
@@ -0,0 +1,33 @@
BITLEN_DSM2 = 16
def sendByteDsm2(b):
print "%02x:" % b,
lev = 0
len = BITLEN_DSM2
for i in range(9):
nlev = b & 1
if (lev == nlev):
len += BITLEN_DSM2
else:
print len,
# _send_1(nlev ? len-5 : len+3);
len = BITLEN_DSM2
lev = nlev
b = (b>>1) | 0x80
# _send_1(len+BITLEN_DSM2+3); // 2 stop bits
print len+BITLEN_DSM2
sendByteDsm2(24)
sendByteDsm2(17)
sendByteDsm2(2)
sendByteDsm2(0x00)
sendByteDsm2(0x06)
sendByteDsm2(0)
sendByteDsm2(10)
sendByteDsm2(0)
sendByteDsm2(14)
sendByteDsm2(0)
sendByteDsm2(18)
sendByteDsm2(0)
sendByteDsm2(22)
sendByteDsm2(0)
+111
View File
@@ -0,0 +1,111 @@
#!/usr/bin/env python
import sys
from PyQt4 import Qt, QtGui
image = QtGui.QImage(sys.argv[1])
width, height = image.size().width(), image.size().height()
f = open(sys.argv[2], "w")
if len(sys.argv) > 3:
what = sys.argv[3]
else:
for s in ("03x05", "04x06", "05x07", "08x10", "10x14"):
if s in sys.argv[2]:
what = s
break
if what == "largimg":
rows = 1
if len(sys.argv) > 4:
rows = int(sys.argv[4])
f.write("255,%d, %d,\n" % (width-255, height/rows))
for y in range(0, height, 8):
for x in range(width):
value = 0
for z in range(8):
if y+z < height and image.pixel(x, y+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
elif what == "img":
rows = 1
if len(sys.argv) > 4:
rows = int(sys.argv[4])
f.write("%d,%d,\n" % (width, height/rows))
for y in range(0, height, 8):
for x in range(width):
value = 0
for z in range(8):
if y+z < height and image.pixel(x, y+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
elif what == "bmp":
rows = 1
colors = []
if len(sys.argv) > 4:
rows = int(sys.argv[4])
f.write("%d,%d,\n" % (width, height/rows))
for y in range(0, height, 8):
for x in range(width):
values = [255, 255, 255, 255]
for z in range(8):
if y+z < height:
gray = Qt.qGray(image.pixel(x, y+z))
for i in range(4):
if (gray & (1<<(4+i))):
values[i] -= 1 << z
for value in values:
f.write("0x%02x," % value)
f.write("\n")
elif what == "03x05":
for y in range(0, height, 5):
for x in range(width):
value = 0
for z in range(5):
if image.pixel(x, y+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
elif what == "04x06":
for y in range(0, height, 7):
for x in range(width):
value = 0
for z in range(7):
if image.pixel(x, y+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
elif what == "05x07":
for y in range(0, height, 8):
for x in range(width):
value = 0
for z in range(8):
if image.pixel(x, y+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
elif what == "08x10":
for y in range(0, height, 12):
for x in range(width):
for l in range(0, 12, 8):
value = 0
for z in range(8):
if l+z < 12 and image.pixel(x, y+l+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
elif what == "10x14":
for y in range(0, height, 16):
for x in range(width):
for l in range(0, 16, 8):
value = 0
for z in range(8):
if image.pixel(x, y+l+z) == Qt.qRgb(0, 0, 0):
value += 1 << z
f.write("0x%02x," % value)
f.write("\n")
else:
print("wrong argument", sys.argv[3])
+16
View File
@@ -0,0 +1,16 @@
echo off
echo Getting max amplitude..
sox %1.wav -n stat -v 2> %1_apl.txt
Set /P apl_value= < %1_apl.txt
echo Normalizing audio.. gain: %apl_value%
sox --show-progress -v %apl_value% %1.wav %1_norm.wav
copy %1_norm.wav %1.wav
echo Cleaning..
del %1_norm.wav
del %1_apl.txt
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/env python
import sys
filename = sys.argv[1]
print filename
fr = open(filename)
fw = open(filename+".new", "w")
ew = open(filename+".en", "w")
hw = open(filename+".stringsh", "w")
cw = open(filename+".stringsc", "w")
replacements = {}
for line in fr.readlines():
pos_pstr = line.find("PSTR(\"")
MENU = False
if pos_pstr < 0:
pos_pstr = line.find("MENU(\"")
MENU = True
while pos_pstr >= 0:
# print line,
if MENU:
pos_endparenthesis = line.find('"', pos_pstr+7)
else:
pos_endparenthesis = line.find("\")", pos_pstr)
str = line[pos_pstr+6:pos_endparenthesis]
str_rep = "STR_"+str.upper()
for s in (" ", ".", "[", "]", "-", "!", "/", ")", "(", "%", "+", ":"):
str_rep = str_rep.replace(s, "")
if "14" in str or "32" in str or "@" in str or len(str_rep) <= 5:
pos_pstr = -1
else:
if MENU:
glob_str = line[pos_pstr+5:pos_endparenthesis+1]
str_rep = "STR_MENU"+str.upper()
else:
glob_str = line[pos_pstr:pos_endparenthesis+2]
str_rep = "STR_"+str.upper()
for s in (" ", ".", "[", "]", "-", "!", "/", ")", "(", "%", "+", ":"):
str_rep = str_rep.replace(s, "")
line = line.replace(glob_str, str_rep)
if str_rep in replacements.keys():
if replacements[str_rep] != str:
print "!!!!! NON !!!!!"
else:
replacements[str_rep] = str
print glob_str, "=>", str, str_rep
ew.write("#define " + str_rep[1:] + " "*(17-len(str_rep)) + '"%s"\n' % str)
hw.write("extern const PROGMEM char %s[];\n" % str_rep)
cw.write("const prog_char APM %s[] = %s;\n" % (str_rep, str_rep[1:]))
pos_pstr = line.find("PSTR(\"")
fw.write(line)
fw.close()
ew.close()
hw.close()
cw.close()
+133
View File
@@ -0,0 +1,133 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Imports
import argparse
import os
import os.path
import codecs
translations = {'cz': [('\\200', u'á'),
('\\201', u'č'),
('\\201', u'Č'),
('\\202', u'é'),
('\\203', u'ě'),
('\\203', u'Ě'),
('\\204', u'í'),
('\\205', u'ó'),
('\\206', u'ř'),
('\\207', u'š'),
('\\207', u'Š'),
('\\210', u'ú'),
('\\211', u'ů'),
('\\212', u'ý'),
('\\213', u'Á'),
('\\214', u'Í'),
('\\215', u'Ř'),
('\\216', u'Ý'),
('\\217', u'ž'),
('\\217', u'Ž'),
('\\220', u'É')],
'de': [('\\200', u'Ä'),
('\\201', u'ä'),
('\\202', u'Ö'),
('\\203', u'ö'),
('\\204', u'Ü'),
('\\205', u'ü'),
('\\206', u'ß')],
'es': [('\\200', u'Ñ'),
('\\201', u'ñ')],
'fr': [('\\200', u'é'),
('\\201', u'è'),
('\\202', u'à'),
('\\203', u'î'),
('\\204', u'ç')],
'it': [('\\200', u'à'),
('\\201', u'ù')],
'pl': [('\\200', u'ą'),
('\\201', u'ć'),
('\\202', u'ę'),
('\\203', u'ł'),
('\\204', u'ń'),
('\\205', u'ó'),
('\\206', u'ś'),
('\\207', u'ż'),
('\\210', u'ź'),
('\\211', u'Ą'),
('\\212', u'Ć'),
('\\213', u'Ę'),
('\\214', u'Ł'),
('\\215', u'Ń'),
('\\216', u'Ó'),
('\\217', u'Ś'),
('\\220', u'Ż'),
('\\221', u'Ź')],
'pt': [('\\200', u'Á'),
('\\201', u'á'),
('\\202', u'Â'),
('\\203', u'â'),
('\\204', u'Ã'),
('\\205', u'ã'),
('\\206', u'À'),
('\\207', u'à'),
('\\210', u'Ç'),
('\\211', u'ç'),
('\\212', u'É'),
('\\213', u'é'),
('\\214', u'Ê'),
('\\215', u'ê'),
('\\216', u'Í'),
('\\217', u'í'),
('\\218', u'Ó'),
('\\219', u'ó'),
('\\220', u'Ô'),
('\\221', u'ô'),
('\\222', u'Õ'),
('\\223', u'õ'),
('\\224', u'Ú'),
('\\225', u'ú'),],
'se': [('\\200', u'å'),
('\\201', u'ä'),
('\\202', u'ö'),
('\\203', u'Å'),
('\\204', u'Ä'),
('\\205', u'Ö')],
}
# Take care of command line options
parser = argparse.ArgumentParser(description='Encoder for open9x translations')
parser.add_argument('input', action="store", help="Input file name")
parser.add_argument('output', action="store", help="Output file name")
parser.add_argument('language', action="store", help="Two letter language identifier")
parser.add_argument("--reverse", help="Reversed char conversion (from number to char)", action="store_true")
args = parser.parse_args()
if args.language not in translations:
parser.error(args.language + ' is not a supported language. Try one of the supported ones: ' + str(translations.keys()))
system.exit()
# Read the input file into a buffer
in_file = codecs.open( args.input, "r", "utf-8" )
text = in_file.read()
in_file.close()
# Do the replacements
for before, after in translations[args.language]:
if args.reverse:
text = text.replace(before, after)
else:
text = text.replace(after, before)
# Write the result to a temporary file
out_file = codecs.open(args.output, 'w', 'utf-8')
out_file.write( text )
out_file.close()
+847
View File
@@ -0,0 +1,847 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# To use this script you need the following installed within python
# Python 2.5 http://www.python.org/download/releases/2.5.4/
# Python 2.7 http://www.python.org/download/releases/2.7.3/
# PyTTS http://pypi.python.org/pypi/pyTTS
# PyWin32 http://sourceforge.net/projects/pywin32/files/pywin32/
#
# Note
# At the moment, pyTTS is only available for Python 2.3, 2.4 and 2.5. To use it for later versions without having to
# recompile it, a quick and dirty solution is to:
# copy the entire pyTTS directory from Python25\Lib\site-packages to Python26 or Python27
# replace TTSFast.py with an empty file. This way the version-dependent pyd file isn't loaded.
# in addition you will need some tools.
# ffmpeg, sox, adconvertor ttscmd (2cnd speach centre)
# have fun!
# Sound pack maintainers (incomplete list) by language alphabetical order
# Czech : Martin Hotar
# French : Bertrand Songis & André Bernet
# English : Rob Thompson & Martin Hotar
# German : Romolo Manfredini (Some corrections by Peer)
# Italian : Romolo Manfredini
# Portuguese : Romolo Manfredini
# Spanish : Romolo Manfredini (With the help of Jose Moreno)
import os, sys, shutil, platform, subprocess, wave, zipfile, httplib, urllib
NO_ALTERNATE = 1024
def filename(idx, alternate=0):
if "gruvin9x" in sys.argv:
ext = ".ad4"
else:
ext = ".wav"
if isinstance(idx, int):
result = "%04d%s" % (idx, ext)
elif board in ('sky9x', 'taranis'):
result = idx + ext
else:
if alternate >= NO_ALTERNATE:
return None
result = "%04d%s" % (alternate, ext)
return result
def wavstrip(filename):
output = "_" + filename
subprocess.Popen(["sox", filename, output, "silence", "1", "0.1", "0.1%", "reverse", "silence", "1", "0.1", "0.1%", "reverse"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
os.remove(filename)
os.rename(output, filename)
def generate(str, filename):
print filename, str
if not str:
str = " !" #this is so blank wav files never exist!
if "speak" in sys.argv:
if "sapi" in sys.argv:
tts.Speak(str)
elif "espeak" in sys.argv:
subprocess.Popen(["espeak", "-v", espeakVoice, "-s", espeakspeed, "-z", str.encode("utf-8")], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
elif "google" in sys.argv:
"speak not implemented with google tts engine"
exit()
else:
print "which speach engine?"
exit()
else:
if "sapi" in sys.argv:
ttsfilename = "ttsfile.wav"
tts.SpeakToWave(ttsfilename, str)
elif "sapi2" in sys.argv:
ttsfilename = "ttsfile.wav"
subprocess.Popen(["ttscmd", "/ttw", str.encode("utf-8"), ttsfilename, "-v", voiceID, "-b", "32","-s", "\"-3\"","-w","32","-f","47"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
elif "espeak" in sys.argv:
ttsfilename = "ttsfile.wav"
subprocess.Popen(["espeak", "-v", espeakVoice, "-s", espeakspeed, "-z", "-w", ttsfilename, str.encode("utf-8")], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
elif "google" in sys.argv:
ttsmp3 = "ttsfile.mp3"
ttsfilename = "ttsfile.wav"
conn = httplib.HTTPConnection("translate.google.com")
params = urllib.urlencode({'ie': "UTF-8", 'tl': directory, 'q': str.encode("utf-8")})
headers = {"User-Agent": "Mozilla"}
conn.request("GET", u"/translate_tts?%s" % params, headers=headers)
# conn.request("GET", "/translate_tts?ie=UTF-8&tl=%s&q=%s" % (directory, urllib.urlencode(str)), headers={"User-Agent": "Mozilla"})
resp = conn.getresponse()
file(ttsmp3, "wb").write(resp.read())
subprocess.Popen(["ffmpeg", "-y", "-i", ttsmp3, "-acodec", "pcm_s16le", ttsfilename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
conn.close()
else:
print "which speach engine?"
exit()
wavstrip(ttsfilename)
if board in ('sky9x', 'taranis'):
if 'sox' in sys.argv:
maxvolume = subprocess.Popen(["sox", ttsfilename, "-n", "stat", "-v"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[1]
if "not sound" in maxvolume:
subprocess.Popen(["sox", "--show-progress", filename, ttsfilename], stdout=subprocess.PIPE).communicate()[0];
else:
subprocess.Popen(["sox", "--show-progress","-v", maxvolume, filename, ttsfilename], stdout=subprocess.PIPE).communicate()[0];
if board == 'sky9x':
subprocess.Popen(["sox", "-twav", ttsfilename, "-b1600", "-c1", "-e", "a-law", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
else:
subprocess.Popen(["sox", "-twav", ttsfilename, "-b32000", "-c1", "-e", "a-law", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
else:
if board == 'sky9x':
subprocess.Popen(["ffmpeg", "-y", "-i", ttsfilename, "-acodec", defaultcodec, "-ar", "16000", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
else:
subprocess.Popen(["ffmpeg", "-y", "-i", ttsfilename, "-acodec", defaultcodec, "-ar", "32000", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
elif board == 'gruvin9x':
subprocess.Popen(["AD4CONVERTER", "-E4", ttsfilename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
os.rename(ttsfilename.replace(".wav", ".ad4"), filename)
else:
subprocess.Popen(["ffmpeg", "-y", "-i", ttsfilename, "-acodec", "pcm_u8", "-ar", "16000", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
os.remove(ttsfilename)
################################################################
def ttsEn():
systemSounds = []
sounds = []
for i in range(100):
systemSounds.append((str(i), filename(PROMPT_SYSTEM_BASE+i)))
for i in range(9):
systemSounds.append((str(100*(i+1)), filename(PROMPT_SYSTEM_BASE+100+i)))
for i, s in enumerate(["thousand", "and", "minus", "point"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+109+i)))
for i, s in enumerate(["volt", "volts",
"amp", "amps",
"meter per second", "meters per second",
"", "",
"kilometer per hour","kilometers per hour",
"meter", "meters",
"degree", "degrees",
"percent", "percent",
"milliamp", "milliamps",
"milliamp-hour", "milliamp-hours",
"watt", "watts",
"db", "db",
"foot", "feet",
"knot", "knots",
"hour", "hours",
"minute", "minutes",
"second", "seconds",
"r p m", "r p m",
"g", "g"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+115+i)))
for i, s in enumerate(["point zero", "point one", "point two", "point three",
"point four", "point five", "point six",
"point seven", "point eight", "point nine"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+160+i)))
for s, f, a in [(u"trim center", "midtrim", 495),
(u"maximum trim reached", "endtrim", NO_ALTERNATE),
(u"transmitter battery low", "lowbatt", 485),
(u"inactivity alarm", "inactiv", 486),
(u"throttle warning", "thralert", 481),
(u"switch warning", "swalert", 482),
(u"bad eeprom", "eebad", 483),
(u"Welcome to open tea ex!", "tada", 480),
(u"twenty. seconds", "timer20", 500),
(u"thirty. seconds", "timer30", 501),
(u"10. seconds", "timer10", NO_ALTERNATE),
(u"time up!", "timerlt3", NO_ALTERNATE),
(u"A1,low", "a1_org", NO_ALTERNATE),
(u"A1,critical", "a1_red", NO_ALTERNATE),
(u"A2,low", "a2_org", NO_ALTERNATE),
(u"A2,critical", "a2_red", NO_ALTERNATE),
(u"RF signal, low", "rssi_org", NO_ALTERNATE),
(u"RF signal, critical", "rssi_red", NO_ALTERNATE),
(u"radio antenna defective", "swr_red", NO_ALTERNATE),
(u"telemetry lost", "telemko", NO_ALTERNATE),
(u"telemetry recovered", "telemok", NO_ALTERNATE),
]:
systemSounds.append((s, filename(f, a)))
for i, (s, f) in enumerate([
(u"gear!, up!", "gearup"),
(u"gear!, down!", "geardn"),
(u"flaps!, up!", "flapup"),
(u"flaps!, down!", "flapdn"),
(u"spoiler!, up!", "splrup"),
(u"spoiler!, down!", "splrdn"),
(u"trainer!, on!", "trnon"),
(u"trainer!, off!", "trnoff"),
(u"engine!, off!", "engoff"),
(u"too. high!", "tohigh"),
(u"too. low!", "tolow"),
(u"low. battery!", "lowbat"),
(u"crow!, on!", "crowon"),
(u"crow!, off!", "crowof"),
(u"rf. signal!, low!", "siglow"),
(u"rf. signal!, critical!", "sigcrt"),
(u"high. speed. mode!, active", "spdmod"),
(u"thermal. mode!, on", "thmmod"),
(u"normal. mode!, on", "nrmmod"),
(u"landing. mode!, on", "lnding"),
(u"acro. mode!, on", "acro"),
(u"flight. mode!, one", "fm-1"),
(u"flight. mode!, two", "fm-2"),
(u"flight. mode!, three", "fm-3"),
(u"flight. mode!, four", "fm-4"),
(u"flight. mode!, five", "fm-5"),
(u"flight. mode!, six", "fm-6"),
(u"flight. mode!, seven", "fm-7"),
(u"flight. mode!, eight", "fm-8"),
(u"vario!, on", "vrion"),
(u"vario!, off", "vrioff"),
(u"flight mode!, power", "fm-pwr"),
(u"flight mode!, land", "fm-lnd"),
(u"flight mode!, float", "fm-flt"),
(u"flight mode!, speed", "fm-spd"),
(u"flight mode!, fast", "fm-fst"),
(u"flight mode!, normal", "fm-nrm"),
(u"flight mode!, cruise", "fm-crs"),
(u"flight mode!, acro", "fm-acr"),
(u"flight mode!, race", "fm-rce"),
(u"flight mode!, launch", "fm-lch"),
(u"flight mode!, ping", "fm-png"),
(u"flight mode!, thermal", "fm-thm"),
(u"flight mode!, thermal left", "fm-thml"),
(u"flight mode!, thermal right", "fm-thmr"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
def ttsFr():
systemSounds = []
sounds = []
for i in range(100):
systemSounds.append((str(i), filename(PROMPT_SYSTEM_BASE+i)))
for i in range(10):
systemSounds.append((str(100*(i+1)), filename(PROMPT_SYSTEM_BASE+100+i)))
for i, s in enumerate(["une", "onze", "vingt et une", "trente et une", "quarante et une", "cinquante et une", "soixante et une", "soixante et onze", "quatre vingt une"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+110+i)))
for i, s in enumerate(["virgule", "et", "moins"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+119+i)))
for i, s in enumerate(["volts", u"ampères", u"mètres seconde", "", "km heure", u"mètres", u"degrés", "pourcents", u"milli ampères", u"milli ampères / heure", "watt", "db", "pieds", "knotts", "heure", "minute", "seconde", "tours par minute", "g"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+125+i)))
for i, s in enumerate(["timer", "", "tension", "tension", u"émission", u"réception", "altitude", "moteur",
"essence", u"température", u"température", "vitesse", "distance", "altitude", u"élément lipo",
"total lipo", "tension", "courant", "consommation", "puissance", u"accelération X", u"accelération Y", u"accelération Z",
"orientation", "vario"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+146+i)))
for i, s in enumerate(["virgule 0", "virgule 1", "virgule 2", "virgule 3", "virgule 4", "virgule 5", "virgule 6", "virgule 7", "virgule 8", "virgule 9"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+180+i)))
for i, (s, f) in enumerate([
(u"train rentré", "gearup"),
(u"train sorti", "geardn"),
(u"volets rentrés", "flapup"),
(u"volets sortis", "flapdn"),
(u"atterrissage", "attero"),
(u"écolage", "trnon"),
(u"fin écolage", "trnoff"),
(u"moteur coupé", "engoff"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
def ttsIt():
systemSounds = []
sounds = []
for i in range(101):
systemSounds.append((str(i), filename(PROMPT_SYSTEM_BASE+i)))
systemSounds.append(("mila", filename(PROMPT_SYSTEM_BASE+101)))
systemSounds.append(("mille", filename(PROMPT_SYSTEM_BASE+102)))
for i, s in enumerate(["virgola", "un", "e", "meno", "ora", "ore", "minuto", "minuti", "secondo", "secondi"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+103+i)))
for i, s in enumerate(["volt", "ampere", "metri per secondo", "", "chilometri/ora", "metri", "gradi", "percento", "milliampere", "milliampere/ora", "watt", "db", "piedi", "nodi", "ore", "minuti", "secondi", "R P M", "g"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+113+i)))
for s, f, a in [(u"radio inattiva controllare", "inactiv", 486),
(u"batteria della radio scarica", "lowbatt", 485),
(u"controllo motore non in posizione, verificare", "thralert", 481),
(u"interruttori non in posizione, verificare", "swalert", 482),
(u"eeprom corrotta", "eebad", NO_ALTERNATE),
(u"formattazone eeprom in corso", "eeformat", NO_ALTERNATE),
(u"errore", "error", NO_ALTERNATE),
(u"trim centrato", "midtrim", 495),
(u"potenziometro centrato", "midpot", 496),
(u"massimo trim raggiunto", "endtrim", NO_ALTERNATE),
(u"venti secondi", "timer20", 500),
(u"trenta secondi", "timer30", 501),
(u"assorbimento elevato", "highmah", NO_ALTERNATE),
(u"temperatura elevata", "hightemp", NO_ALTERNATE),
(u"A1 in allarme", "a1_org", NO_ALTERNATE),
(u"A1 critico", "a1_red", NO_ALTERNATE),
(u"A2 in allarme", "a2_org", NO_ALTERNATE),
(u"A2 critico", "a2_red", NO_ALTERNATE),
(u"Segnale radio basso", "rssi_org", NO_ALTERNATE),
(u"Segnale radio critico", "rssi_red", NO_ALTERNATE),
(u"Problema all'antenna della radio", "swr_red", NO_ALTERNATE),
(u"Telemetria assente", "telemko", NO_ALTERNATE),
(u"Telemetria disponibile", "telemok", NO_ALTERNATE),
]:
systemSounds.append((s, filename(f, a)))
for i, s in enumerate([u"timer", u"timer", u"trasmissione", u"ricezione", u"A1", u"A2", u"altitudine", u"motore",
u"carburante", u"temperatura", u"temperatura", u"velocità", "distanza", u"altitudine", u"cella lipo",
u"totale lipo", u"tensione", u"corrente", u"consumo", u"potenza", u"accellerazione X", u"accellerazione Y", u"accellerazione Z",
u"direzione", u"variometro",u"minimo",u"massimo"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+132+i)))
for i, (s, f) in enumerate([
(u"carrello chiuso", "gearup"),
(u"carrello aperto", "geardn"),
(u"flap rientrati", "flapup"),
(u"flap estesi", "flapdn"),
(u"atterraggiio", "attero"),
(u"modalità maestro attiva", "trnon"),
(u"modalità maestro disattiva", "trnoff"),
(u"motore spento", "engoff"),
(u"troppo alto", "tohigh"),
(u"troppo basso", "tolow"),
(u"batteria scarica", "lowbat"),
(u"crow on", "crowon"),
(u"crow off", "crowof"),
(u"modo velocità", "spdmod"),
(u"modo termica", "thmmod"),
(u"modo volo normale", "nrmmod"),
(u"fase di volo 1", "fltmd1"),
(u"fase di volo 2", "fltmd2"),
(u"fase di volo 3", "fltmd3"),
(u"fase di volo 4", "fltmd4"),
(u"fase di volo 5", "fltmd5"),
(u"fase di volo 6", "fltmd6"),
(u"fase di volo 7", "fltmd7"),
(u"fase di volo 8", "fltmd8"),
(u"fase di volo 9", "fltmd9"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
def ttsPt():
systemSounds = []
sounds = []
for i in range(101):
systemSounds.append((str(i), filename(PROMPT_SYSTEM_BASE+i)))
systemSounds.append(("cento", filename(PROMPT_SYSTEM_BASE+101)))
systemSounds.append(("duzentos", filename(PROMPT_SYSTEM_BASE+102)))
systemSounds.append(("trezentos", filename(PROMPT_SYSTEM_BASE+103)))
systemSounds.append(("quatrocentos", filename(PROMPT_SYSTEM_BASE+104)))
systemSounds.append(("quinhentos", filename(PROMPT_SYSTEM_BASE+105)))
systemSounds.append(("seiscentos", filename(PROMPT_SYSTEM_BASE+106)))
systemSounds.append(("setecentos", filename(PROMPT_SYSTEM_BASE+107)))
systemSounds.append(("oitocentos", filename(PROMPT_SYSTEM_BASE+108)))
systemSounds.append(("novecentos", filename(PROMPT_SYSTEM_BASE+109)))
systemSounds.append(("mil", filename(PROMPT_SYSTEM_BASE+110)))
for i, s in enumerate(["virgula", "uma", "duas", "e", "menos", "hora", "horas", "minuto", "minutos", "segundo", "segundos"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+111+i)))
for i, s in enumerate([u"Volt", u"ampére", u"metros por segundo", u"", u"quilômetros por hora", u"metros", u"graus", u"cento", u"miliamperes", u"miliamperes por hora", u"watt", u"db", u"pés", u"nós", u"horas", u"minutos", u"segundos", u"RPM", u"g"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+122+i)))
for s, f, a in [(u"atenção, o rádio foi esquecido ligado, por favor desligue-o", "inactiv", 486),
(u"bateria do rádio fraca", "lowbatt", 485),
(u"atenção,acelerador não está no mínimo", "thralert", 481),
(u"atenção, certifique-se que os interruptores estão na posição certa", "swalert", 482),
(u"eeprom corrompida", "eebad", NO_ALTERNATE),
(u"formatação da eeprom em curso", "eeformat", NO_ALTERNATE),
(u"erro", "error", NO_ALTERNATE),
(u"trim centrado", "midtrim", 495),
(u"potenciómetro centrado", "midpot", 496),
(u"trim no máximo", "endtrim", NO_ALTERNATE),
(u"20 segundos", "timer20", 500),
(u"30 segundos", "timer30", 501),
(u"assorbimento elevato", "highmah", NO_ALTERNATE),
(u"temperatura elevata", "hightemp", NO_ALTERNATE),
(u"Alarme A1", "a1_org", NO_ALTERNATE),
(u"A1 critica", "a1_red", NO_ALTERNATE),
(u"Alarme A2", "a2_org", NO_ALTERNATE),
(u"A2 critica", "a2_red", NO_ALTERNATE),
(u"recepção de sinal muito baixa", "rssi_org", NO_ALTERNATE),
(u"recepção de sinal crítica", "rssi_red", NO_ALTERNATE),
(u"Problema com a antena do transmissor", "swr_red", NO_ALTERNATE),
]:
systemSounds.append((s, filename(f, a)))
for i, s in enumerate([u"cronómetro", u"cronómetro", u"transmissão", u"recepção", u"A1", u"A2", u"altitude", u"motor",
u"combustível", u"temperatura", u"temperatura", u"velocidade", u"distância", u"altitude", u"célula lipo",
u"Total lipo", u"tensão", u"corrente", u"consumo", u"potência", u"aceleração X", u"aceleração Y", u"aceleração Z",
u"Direcção", u"variómetro", u"mínimo", u"máximo"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+141+i)))
for i, (s, f) in enumerate([
(u"trem, em cima.", "gearup"),
(u"trem, em baixo.", "geardn"),
(u"flaps recolhidos", "flapup"),
(u"flaps estendidos", "flapdn"),
(u"aterragem", "attero"),
(u"modo de treino ligado", "trnon"),
(u"modo de treino desligado", "trnoff"),
(u"motor desligado", "engoff"),
(u"muito alto", "tohigh"),
(u"muito baixo", "tolow"),
(u"bateria fraca", "lowbat"),
(u"crou, activo", "crowon"),
(u"crou, desligado", "crowof"),
(u"modo de velocidade", "spdmod"),
(u"modo de térmica", "thmmod"),
(u"modo de voo normal", "nrmmod"),
(u"fase de voo 1", "fltmd1"),
(u"fase de voo 2", "fltmd2"),
(u"fase de voo 3", "fltmd3"),
(u"fase de voo 4", "fltmd4"),
(u"fase de voo 5", "fltmd5"),
(u"fase de vôo 6", "fltmd6"),
(u"fase de voo 7", "fltmd7"),
(u"fase de voo 8", "fltmd8"),
(u"fase de voo 9", "fltmd9"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
def ttsEs():
systemSounds = []
sounds = []
for i in range(101):
systemSounds.append((str(i), filename(PROMPT_SYSTEM_BASE+i)))
systemSounds.append(("ciento", filename(PROMPT_SYSTEM_BASE+101)))
systemSounds.append(("doscientos", filename(PROMPT_SYSTEM_BASE+102)))
systemSounds.append(("trescientos", filename(PROMPT_SYSTEM_BASE+103)))
systemSounds.append(("cuatrocientos", filename(PROMPT_SYSTEM_BASE+104)))
systemSounds.append(("quinientos", filename(PROMPT_SYSTEM_BASE+105)))
systemSounds.append(("sescientos", filename(PROMPT_SYSTEM_BASE+106)))
systemSounds.append(("setecientos", filename(PROMPT_SYSTEM_BASE+107)))
systemSounds.append(("ochocientos", filename(PROMPT_SYSTEM_BASE+108)))
systemSounds.append(("nuevecientos", filename(PROMPT_SYSTEM_BASE+109)))
systemSounds.append(("mil", filename(PROMPT_SYSTEM_BASE+110)))
for i, s in enumerate(["coma", "un", "una", "y", "meno", "hora", "horas", "minuto", "minutos", "segundo", "segundos"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+111+i)))
for i, s in enumerate([u"Voltio", u"ampério", u"metros por segundo", u"", u"kilómetro por hora", u"metros", u"grados", u"por ciento", u"miliamperios", u"miliamperios por hora", u"vatio", u"db", u"pés", u"nós", u"horas", u"minutos", u"segundos", u"RPM", u"g"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+122+i)))
for s, f, a in [(u"me tienes abandonada", "inactiv", 486),
(u"batería del transmisor baja", "lowbatt", 485),
(u"El acelerador está activado, por favor, corrijalo", "thralert", 481),
(u"Los interruptores no están en la posición correcta, por favor corrijalo", "swalert", 482),
(u"eeprom corrompida", "eebad", NO_ALTERNATE),
(u"Formateo de eeprom en curso", "eeformat", NO_ALTERNATE),
(u"error", "error", NO_ALTERNATE),
(u"trim centrado", "midtrim", 495),
(u"potenciómetro centrado", "midpot", 496),
(u"trim al máximo", "endtrim", NO_ALTERNATE),
(u"20 segundos", "timer20", 500),
(u"30 segundos", "timer30", 501),
(u"assorbimiento elevado", "highmah", NO_ALTERNATE),
(u"temperatura elevada", "hightemp", NO_ALTERNATE),
(u"Alarma A1", "a1_org", NO_ALTERNATE),
(u"A1 crítica", "a1_red", NO_ALTERNATE),
(u"Alarma A2", "a2_org", NO_ALTERNATE),
(u"A2 crítica", "a2_red", NO_ALTERNATE),
(u"recepcion de señal baja", "rssi_org", NO_ALTERNATE),
(u"recepción de señal crítica", "rssi_red", NO_ALTERNATE),
(u"Problemas con la antena del transmisor", "swr_red", NO_ALTERNATE),
(u"Sin telemetría", "telemko", NO_ALTERNATE),
(u"Telemetría disponible", "telemok", NO_ALTERNATE),
]:
systemSounds.append((s, filename(f, a)))
for i, s in enumerate([u"cronómetro", u"cronómetro", u"transmisión", u"recepción", u"A1", u"A2", u"altitud", u"motor",
u"combustible", u"temperatura", u"temperatura", u"velocidad", u"distancia", u"altitude", u"célula lipo",
u"Total lipo", u"voltaje", u"corriente", u"consumo", u"potencia", u"aceleración X", u"aceleración Y", u"aceleración Z",
u"dirección", u"variómetro", u"minimo", u"máximo"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+141+i)))
for i, (s, f) in enumerate([
(u"tren arriba.", "gearup"),
(u"tren abajo.", "geardn"),
(u"flaps arriba", "flapup"),
(u"flaps abajo", "flapdn"),
(u"aterrizaje", "attero"),
(u"modo de entrenamiento activado", "trnon"),
(u"modo de entrenamiento deshabilitado", "trnoff"),
(u"motor apagado", "engoff"),
(u"muy alto", "tohigh"),
(u"muy bajo", "tolow"),
(u"bateria baja", "lowbat"),
(u"crou, activo", "crowon"),
(u"crou, desligado", "crowof"),
(u"modo de velocidad", "spdmod"),
(u"modo de térmica", "thmmod"),
(u"modo de vuelo normal", "nrmmod"),
(u"fase de vuelo 1", "fltmd1"),
(u"fase de vuelo 2", "fltmd2"),
(u"fase de vuelo 3", "fltmd3"),
(u"fase de vuelo 4", "fltmd4"),
(u"fase de vuelo 5", "fltmd5"),
(u"fase de vuelo 6", "fltmd6"),
(u"fase de vuelo 7", "fltmd7"),
(u"fase de vuelo 8", "fltmd8"),
(u"fase de vuelo 9", "fltmd9"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
def ttsDe():
systemSounds = []
sounds = []
for i in range(101):
systemSounds.append((str(i), filename(PROMPT_SYSTEM_BASE+i)))
systemSounds.append(("tausend", filename(PROMPT_SYSTEM_BASE+101)))
for i, s in enumerate(["comma", "und", "minus", "uhr", "minute", "minuten", "sekunde", "sekunden"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+102+i)))
for i, s in enumerate(["Volt", "Ampere", "Meter pro sekunde", "", "kilometer pro stunde", "Meter", "Grad", "Prozent", "Milliampere", "Milliampere pro stunde", "Watt", "db", "Fuesse", "Knoten", "Uhr", "Minuten", "Secunden", "R P M", "g"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+110+i)))
for s, f, a in [(u"Sender ist inaktiv,bitte Ueberpruefen Sie", "inactiv", 486),
(u"Senderakku niedrig", "lowbatt", 485),
(u"Gaskanal nicht Null, bitte pruefen", "thralert", 481),
(u"Schalten fehlpositioniert, bitte pruefen", "swalert", 482),
(u"Das EEPROM ist fehlerhaft", "eebad", NO_ALTERNATE),
(u"Das EEPROM ist immer formatiert", "eeformat", NO_ALTERNATE),
(u"fehler", "error", NO_ALTERNATE),
(u"Trim zentriert", "midtrim", 495),
(u"Poti zentriert", "midpot", 496),
(u"Maximale trimmung erreicht", "endtrim", NO_ALTERNATE),
(u"20 sekunden", "timer20", 500),
(u"30 sekunden", "timer30", 501),
(u"Senderstrom ist zu hoch!", "highmah", NO_ALTERNATE),
(u"Sendertemperatur ist zu hoch!", "hightemp", NO_ALTERNATE),
(u"A1 schlecht!", "a1_org", NO_ALTERNATE),
(u"A1 kritisch!", "a1_red", NO_ALTERNATE),
(u"A2 schlecht!", "a2_org", NO_ALTERNATE),
(u"A2 kritisch!", "a2_red", NO_ALTERNATE),
(u"Funksignal schlecht!", "rssi_org", NO_ALTERNATE),
(u"Funksignal kritisch!", "rssi_red", NO_ALTERNATE),
(u"Problem mit der sender Antenna", "swr_red", NO_ALTERNATE),
]:
systemSounds.append((s, filename(f, a)))
for i, s in enumerate(["Timer", "Timer", "Sendung", "Empfang", "A1", "A2", "Hoehe", "Motor",
"Treibstoff", "Temperatur", "Temperatur", "Geschwindigkeit", "Ferne", "Hoehe", "Lipo-Zelle",
"Zellen gesamt", "Spannung", "Strom", "Verbrauch", "Power", "Beschleunigung X", "Beschleunigung Y", "Beschleunigung Z",
"Richtung", "Variometer","Minimum","Maximum"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+129+i)))
for i, (s, f) in enumerate([
(u"Fahrwerk eingezogen", "gearup"),
(u"Fahrwerk ausgefahren", "geardn"),
(u"Klappen eingefahren", "flapup"),
(u"Klappen ausgefahren", "flapdn"),
(u"Landung", "attero"),
(u"Trainer-Modus ein", "trnon"),
(u"Trainer-Modus aus", "trnoff"),
(u"Motor aus", "engoff"),
(u"zu hoch", "tohigh"),
(u"zu niedrig", "tolow"),
(u"Batterie schwach", "lowbat"),
(u"crow ein", "crowon"),
(u"crow aus", "crowof"),
(u"Schnell-Modus ist aktiviert", "spdmod"),
(u"Thermik-Modus ist aktiviert", "thmmod"),
(u"Normal-Modus ist aktiviert", "nrmmod"),
(u"Regime 1", "fltmd1"),
(u"Regime 2", "fltmd2"),
(u"Regime 3", "fltmd3"),
(u"Regime 4", "fltmd4"),
(u"Regime 5", "fltmd5"),
(u"Regime 6", "fltmd6"),
(u"Regime 7", "fltmd7"),
(u"Regime 8", "fltmd8"),
(u"Regime 9", "fltmd9"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
def ttsCz():
systemSounds = []
sounds = []
for i, s in enumerate(["nula", "jedna", "dva"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+i)))
for i in range(97):
systemSounds.append((str(3+i), filename(PROMPT_SYSTEM_BASE+3+i)))
for i, s in enumerate(["sto", u"dvěsta", u"třista", u"čtyřista", u"pětset", u"šestset", "sedmset", "osmset",
u"devětset", u"tisíc"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+100+i)))
for i, s in enumerate([u"tisíce", "jeden", "jedno", u"dvě", u"celá", u"celé", u"celých", u"mínus"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+110+i)))
for i, s in enumerate(["volt", "volty", u"voltů", "voltu",
u"ampér", u"ampéry", u"ampérů", u"ampéru",
"metr za sekundu", "metry za sekundu", u"metrů za sekundu", "metru za sekundu",
"jednotka", "jednotky", "jednotek", "jednotky",
"kilometr za hodinu", "kilometry za hodinu", u"kilometrů za hodinu", "kilometru za hodinu",
"metr", "metry", u"metrů", "metru",
u"stupeň", u"stupně", u"stupňů", u"stupně",
"procento", "procenta", "procento", "procenta",
u"miliampér", u"miliampéry", u"miliampérů", u"miliampéru",
u"miliampérhodina", u"miliampérhodiny", u"miliampérhodin", u"miliampérhodiny",
"vat", "vaty", u"vatů", "vatu",
"decibel", "decibely", u"decibelů", "decibelu",
"stopa", "stopy", "stop", "stopy",
"uzel", "uzly", u"uzlů", "uzlu",
"hodina", "hodiny", "hodin", "hodiny",
"minuta", "minuty", "minut", "minuty",
"sekunda", "sekundy", "sekund", "sekundy",
u"otáčka za minutu", u"otáčky za minutu", u"otáček za minutu", u"otáčky za minutu",
u"gé", u"gé", u"gé", u"gé"]):
systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+118+i)))
for s, f, a in [(u"střed trimu", "midtrim", 495),
(u"maximum trimu", "endtrim", NO_ALTERNATE),
(u"baterie rádia je vybitá", "lowbatt", 485),
(u"zapoměl jsi na mě!", "inactiv", 486),
(u"plyn není na nule", "thralert", 481),
(u"přepínače nejsou ve výchozí poloze", "swalert", 482),
(u"neplatná eeprom", "eebad", 483),
(u"Oupn najn iks", "tada", 480),
(u"dvacet sekund", "timer20", 500),
(u"třicet sekund", "timer30", 501),
(u"deset sekund", "timer10", NO_ALTERNATE),
(u"time up!", "timerlt3", NO_ALTERNATE),
(u"A1,nízká", "a1_org", NO_ALTERNATE),
(u"A1,kritická", "a1_red", NO_ALTERNATE),
(u"A2,nízká", "a2_org", NO_ALTERNATE),
(u"A2,kritická", "a2_red", NO_ALTERNATE),
(u"nízký RF signál", "rssi_org", NO_ALTERNATE),
(u"kritický RF signál", "rssi_red", NO_ALTERNATE),
(u"problém s anténou rádia", "swr_red", NO_ALTERNATE),
(u"telemetrie ztracena", "telemko", NO_ALTERNATE),
(u"telemetrie je funkční", "telemok", NO_ALTERNATE),
]:
systemSounds.append((s, filename(f, a)))
for i, (s, f) in enumerate([
(u"podvozek je zasunut", "podvozek0"),
(u"podvozek je vysunut", "podvozek1"),
(u"klapky jsou zapnuty", "klapky1"),
(u"klapky jsou vypnuty", "klapky0"),
(u"trenér je zapnut", "trener1"),
(u"trenér je vypnutý", "trener0"),
(u"motor je vypnut", "motor0"),
(u"motor je aktivován", "motor1"),
(u"jsi příliš vysoko", "vysoko"),
(u"jsi příliš nízko", "nizko"),
(u"baterie modelu je vybitá", "bytvybita"),
(u"dochází palivo", "palivo"),
(u"nízký signál!", "nsignal"),
(u"kritický signál!", "ksignal"),
(u"rychlý režim aktivován", "r_rychly"),
(u"termický režim aktivován", "r_termik"),
(u"normální režim aktivován", "r_norm"),
(u"režim start aktivován", "r_start"),
(u"režim přistání aktivován", "r_pristani"),
(u"vario je zapnuto", "vario0"),
(u"vario je vypnuto", "vario1"),
(u"start povolen", "stpovolen"),
]):
sounds.append((s, filename(f, PROMPT_CUSTOM_BASE+i)))
return systemSounds, sounds
################################################################
if __name__ == "__main__":
if "sky9x" in sys.argv:
board = "sky9x"
PROMPT_CUSTOM_BASE = 256
PROMPT_SYSTEM_BASE = 0
elif "taranis" in sys.argv:
board = "taranis"
PROMPT_CUSTOM_BASE = 256
PROMPT_SYSTEM_BASE = 0
elif "gruvin9x" in sys.argv:
board = "gruvin9x"
PROMPT_CUSTOM_BASE = 0
PROMPT_SYSTEM_BASE = 256
else:
board = "stock"
PROMPT_CUSTOM_BASE = 0
PROMPT_SYSTEM_BASE = 256
if "sapi" in sys.argv:
import pyTTS
tts = pyTTS.Create()
# tts.SetOutputFormat(16, 16, 1)
# tts.Volume = 40
# tts.SetRate(1)
if "list" in sys.argv:
print tts.GetVoiceNames()
exit()
if "mulaw" in sys.argv:
defaultcodec = "pcm_mulaw"
else:
defaultcodec = "pcm_alaw"
if "en" in sys.argv:
directory = "en"
voice = "english"
if "sapi" in sys.argv:
if "scottish" in sys.argv:
tts.SetVoiceByName("ScanSoftFiona_Full_22kHz")
voice = "english-scottish"
elif "american" in sys.argv:
tts.SetVoiceByName("ScanSoftJennifer_Full_22kHz")
voice = "english-american"
elif "australian" in sys.argv:
tts.SetVoiceByName("ScanSoftKaren_Full_22kHz")
voice = "english-australian"
elif "irish" in sys.argv:
tts.SetVoiceByName("ScanSoftMoira_Full_22kHz")
voice = "english-irish"
else:
tts.SetVoiceByName("ScanSoftFiona_Full_22kHz")
voice = "english-english"
elif "sapi2" in sys.argv:
if "scottish" in sys.argv:
voiceID = "17"
voice = "english-scottish"
elif "american" in sys.argv:
voiceID = "18"
voice = "english-american"
elif "australian" in sys.argv:
voiceID = "20"
voice = "english-australian"
elif "irish" in sys.argv:
voiceID = "21"
voice = "english-irish"
elif "french" in sys.argv:
voiceID = "19"
voice = "english-french"
elif "german" in sys.argv:
voiceID = "22"
voice = "english-german"
else:
voiceID = "17"
voice = "english-english"
elif "espeak" in sys.argv:
espeakVoice = "mb-us1"
espeakspeed = "150"
systemSounds, sounds = ttsEn()
elif "fr" in sys.argv:
directory = "fr"
voice = "french"
if "sapi" in sys.argv:
tts.SetVoiceByName("ScanSoftVirginie_Full_22kHz")
elif "espeak" in sys.argv:
espeakVoice = "mb-fr4+f4"
espeakspeed = "140"
systemSounds, sounds = ttsFr()
elif "it" in sys.argv:
directory = "it"
voice = "italian"
if "sapi" in sys.argv:
tts.SetVoiceByName("ScanSoftVirginie_Full_22kHz")
elif "espeak" in sys.argv:
espeakVoice = "mb-it4"
espeakspeed = "160"
systemSounds, sounds = ttsIt()
elif "de" in sys.argv:
directory = "de"
voice = "german"
if "sapi" in sys.argv:
tts.SetVoiceByName("ScanSoftVirginie_Full_22kHz")
elif "espeak" in sys.argv:
espeakVoice = "mb-de4"
espeakspeed = "160"
systemSounds, sounds = ttsDe()
elif "pt" in sys.argv:
directory = "pt"
voice = "portuguese"
if "sapi" in sys.argv:
tts.SetVoiceByName("ScanSoftVirginie_Full_22kHz")
elif "espeak" in sys.argv:
espeakVoice = "mb-pt1+f1"
espeakspeed = "160"
systemSounds, sounds = ttsPt()
elif "es" in sys.argv:
directory = "es"
voice = "spanish"
if "sapi" in sys.argv:
tts.SetVoiceByName("ScanSoftVirginie_Full_22kHz")
elif "espeak" in sys.argv:
espeakVoice = "mb-es1+f1"
espeakspeed = "160"
systemSounds, sounds = ttsEs()
elif "cz" in sys.argv:
directory = "cz"
voice = "czech"
if "sapi" in sys.argv:
tts.SetVoiceByName("ScanSoftZuzana_Full_22kHz")
elif "espeak" in sys.argv:
espeakVoice = "mb-cz2"
espeakspeed = "150"
systemSounds, sounds = ttsCz()
else:
print "which language?"
exit()
if "csv" in sys.argv:
csvFile = open("%s-%s.csv" % (voice, board), "w")
for s, f in systemSounds:
if s and f:
l = u""
if board in ("sky9x", "taranis"):
l += u"SOUNDS/%s/SYSTEM;" % directory
l += f + u";" + s + u"\n"
csvFile.write(l.encode("utf-8"))
for s, f in sounds:
if s and f:
l = u""
if board in ("sky9x", "taranis"):
l += u"SOUNDS/%s;" % directory
l += f + u";" + s + u"\n"
csvFile.write(l.encode("utf-8"))
csvFile.close()
if "zip" in sys.argv:
zip_name = "%s-%s.zip" % (voice, board)
zip = zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED)
for s, f in systemSounds:
if s and f:
generate(s, f)
if board in ("sky9x", "taranis"):
zip.write(f, "SOUNDS/%s/SYSTEM/" % directory + f)
else:
zip.write(f, f)
os.remove(f)
for s, f in sounds:
if s and f:
generate(s, f)
if board in ("sky9x", "taranis"):
zip.write(f, "SOUNDS/%s/" % directory + f)
else:
zip.write(f, f)
os.remove(f)
zip.close()