Esempio n. 1
0
def export_dictionary(ts_all, lex, dictfn2, prompt_words):
    logging.info("Exporting dictionary...")
    utt_dict = {}
    if prompt_words:
        for ts in ts_all:

            tsd = ts_all[ts]

            tokens = tsd['ts'].split(' ')

            # logging.info ( '%s %s' % (repr(ts), repr(tokens)) )

            for token in tokens:
                if token in utt_dict:
                    continue

                if not token in lex:
                    logging.error(
                        "*** ERROR: missing token in dictionary: '%s' (tsd=%s, tokens=%s)"
                        % (token, repr(tsd), repr(tokens)))
                    sys.exit(1)

                utt_dict[token] = lex.get_multi(token)
    else:
        for token in lex:
            utt_dict[token] = lex.get_multi(token)

    ps = {}
    with open(dictfn2, 'w') as dictf:

        dictf.write('!SIL SIL\n')

        for token in sorted(utt_dict):
            for form in utt_dict[token]:
                ipa = utt_dict[token][form]['ipa']
                xsr = ipa2xsampa(token, ipa, spaces=True)

                xs = (xsr.replace('-', '').replace('\' ', '\'').replace(
                    '  ', ' ').replace('#', 'nC'))

                dictf.write((u'%s %s\n' % (token, xs)).encode('utf8'))

                for p in xs.split(' '):

                    if len(p) < 1:
                        logging.error(
                            u"****ERROR: empty phoneme in : '%s' ('%s', ipa: '%s', token: '%s')"
                            % (xs, xsr, ipa, token))

                    pws = p[1:] if p[0] == '\'' else p

                    if not pws in ps:
                        ps[pws] = {p}
                    else:
                        ps[pws].add(p)
    logging.info("%s written." % dictfn2)
    logging.info("Exporting dictionary ... done.")

    return ps, utt_dict
Esempio n. 2
0
    def test_ipa(self):

        res = ipa2xsampa("EISENBAHN", u"ˈaɪ̯zən̩ˌbaːn")
        #print "res: %s" % res
        self.assertEqual(res, "'aIz@nba:n")

        res = ipa2xsampa("DIPHTONGTEST", u"aɪɔɪaʊɜ'")
        #print "res: %s" % res
        self.assertEqual(res, "aIOIaU3")

        res = ipa2mary("EISENBAHN", u"ˈaɪ̯zən̩ˌbaːn")
        #print "res: %s" % res
        self.assertEqual(res, "'aIz@nba:n")

        res = ipa2mary("DIPHTONGTEST", u"aɪɔɪaʊɜ'")
        #print "res: %s" % res
        self.assertEqual(res, "aIOIaUr='")
Esempio n. 3
0
    def test_ipa(self):

        res = ipa2xsampa("EISENBAHN", u"ˈaɪ̯zən̩ˌbaːn")
        #print "res: %s" % res
        self.assertEqual(res, "'aIz@nba:n")

        res = ipa2xsampa("DIPHTONGTEST", u"aɪɔɪaʊɜ'")
        #print "res: %s" % res
        self.assertEqual(res, "aIOIaU3")

        res = ipa2xsampa("BON", u"bɔ̃")
        #print "res: %s" % res
        self.assertEqual(res, "bO~")

        res = ipa2xsampa("RESTAURANT", u"ʁɛstɔʁɑ̃")
        #print "res: %s" % res
        self.assertEqual(res, "REstORA~")

        res = ipa2xsampa("VIN", u"vɛ̃")
        #print "res: %s" % res
        self.assertEqual(res, "vE~")

        res = ipa2xsampa("BRUN", u"bʁœ̃")
        #print "res: %s" % res
        self.assertEqual(res, "bR9~")

        res = ipa2xsampa("POIGNANT", u"pwaɲɑ̃")
        #print "res: %s" % res
        self.assertEqual(res, "pwaJA~")

        res = ipa2mary("EISENBAHN", u"ˈaɪ̯zən̩ˌbaːn")
        #print "res: %s" % res
        self.assertEqual(res, "'aIz@nba:n")

        res = ipa2mary("DIPHTONGTEST", u"aɪɔɪaʊɜ'")
        #print "res: %s" % res
        self.assertEqual(res, "aIOIaUr='")

        res = ipa2mary("BON", u"bɔ̃")
        #print "res: %s" % res
        self.assertEqual(res, "bO~")

        res = ipa2mary("RESTAURANT", u"ʁɛstɔʁɑ̃")
        #print "res: %s" % res
        self.assertEqual(res, "REstORA~")

        res = ipa2mary("VIN", u"vɛ̃")
        #print "res: %s" % res
        self.assertEqual(res, "vE~")

        res = ipa2mary("BRUN", u"bʁœ̃")
        #print "res: %s" % res
        self.assertEqual(res, "bR9~")

        res = ipa2mary("POIGNANT", u"pwaɲɑ̃")
        #print "res: %s" % res
        self.assertEqual(res, "pwaJA~")
Esempio n. 4
0
    def gen_ipa(self, word):

        if self._host_tts == 'local':

            if self.engine == 'mary':

                self.marytts.voice = self._voice
                self.marytts.locale = self._locale

                mp = self.marytts.g2p(word)
                return mary2ipa(word, mp)

            elif self.engine == 'espeak':

                self.espeak.voice = self._voice
                e_ipa = self.espeak.g2p(word, ipa='2')
                xs = ipa2xsampa(word, e_ipa)
                ipa = xsampa2ipa(word, xs)

                logging.debug(u'espeak g2p: %s -> %s -> %s -> %s' %
                              (word, e_ipa, xs, ipa))

                return ipa

            elif self.engine == 'sequitur':

                if not self.voice in SEQUITUR_MODELS:
                    raise Exception("no sequitur model for voice '%s'" %
                                    self.voice)

                return sequitur_gen_ipa(SEQUITUR_MODELS[self.voice], word)

            else:
                raise Exception("unknown engine '%s'" % self.engine)

        else:
            args = {
                'l': self._locale,
                'v': self._voice,
                'e': self._engine,
                't': word.encode('utf8')
            }
            url = 'http://%s:%s/tts/g2p?%s' % (self._host_tts, self._port_tts,
                                               urllib.urlencode(args))

            response = requests.get(url)

            if response.status_code != 200:
                return None

            return response.json()['ipa']
def export_audio (train_val, tsdict):

    global data_dir, utt_num, options

    destdirfn = '%s/%s' % (data_dir, train_val)

    for utt_id in tsdict:

        with codecs.open('%s/%09d.id'  % (destdirfn, utt_num[train_val]), 'w', 'utf8') as idf,   \
             codecs.open('%s/%09d.tkn' % (destdirfn, utt_num[train_val]), 'w', 'utf8') as tknf,  \
             codecs.open('%s/%09d.wrd' % (destdirfn, utt_num[train_val]), 'w', 'utf8') as wrdf   :

            ts = tsdict[utt_id]

            tkn = u''
            wrd = u''
            for token in tokenize(ts['ts'], lang=options.lang):

                if not (token in lex):
                    logging.error(u'token %s missing from dict!' % token)
                    logging.error(u'utt_id: %s' % utt_id)
                    logging.error(u'ts: %s' % ts['ts'])
                    sys.exit(1)

                ipas = lex[token]['ipa'] 
                xsr = ipa2xsampa(token, ipas, spaces=True)

                xs = (xsr.replace('-', '')
                         .replace('\' ', '\'')
                         .replace('  ', ' ')
                         .replace('#', 'nC'))

                if tkn:
                    tkn += u' | '
                    wrd += u' '

                tkn += xs
                wrd += token
                
            tknf.write('%s\n' % tkn)
            wrdf.write('%s\n' % wrd)

            cmd = 'ln -s %s/%s/%s.wav %s/%09d.wav' % (wav16_dir, ts['corpus_name'], utt_id, destdirfn, utt_num[train_val])
            logging.debug(cmd)
            os.system(cmd)

            # utt2spkf.write('%s %s\n' % (utt_id, ts['spk']))

            utt_num[train_val] = utt_num[train_val] + 1
Esempio n. 6
0
def lex_edit(lex_token):

    global lex, lang

    lex_base = lex_token.split('_')[0]

    if lex_token in lex:
        lex_entry = lex[lex_token]

    else:
        ipas = lex_gen_ipa(lex_base, 'de', 'sequitur', 'de')
        lex_entry = {'ipa': ipas}
        lex[lex_token] = lex_entry

    ipas = lex_entry['ipa']

    try:
        tts.locale = 'de'
        tts.engine = 'mary'
        tts.voice = 'dfki-pavoque-neutral-hsmm'
        tts.say_ipa(ipas, async=True)
    except:
        logging.error('EXCEPTION CAUGHT %s' % traceback.format_exc())

    lex_gen = {}

    lex_gen['de-mary'] = lex_gen_ipa(lex_base, 'de', 'mary', 'bits3')
    lex_gen['de-espeak'] = lex_gen_ipa(lex_base, 'de', 'espeak', 'de')
    lex_gen['de-sequitur'] = lex_gen_ipa(lex_base, 'de', 'sequitur', 'de')

    while True:

        print
        print u"Token       : %s" % lex_token
        print u"IPA         : %s" % lex_entry['ipa']
        print

        for engine in sorted(lex_gen):
            print u"%-11s : %s" % (engine, lex_gen[engine])
        print

        if lex_token in lex:
            m = lex.get_multi(lex_token)
            for k in m:
                print u"%s [%s]" % (k, m[k]['ipa'])

        else:
            print u"NEW TOKEN"

        print u"SPEAK  P:de-unitsel  O:de-hsmm                   I:fr-hsmm   U:en-hsmm"
        print u"GEN    G:de-mary     H:de-espeak  J:de-sequitur  K:fr-mary   L:en-mary"
        print u"       E:Edit        Q:Quit "

        try:

            resp = raw_input("Lex> ")

            # quit
            if resp.lower() == 'q':
                break

            # generate de-mary
            elif resp.lower() == 'g':
                lex_entry['ipa'] = lex_gen_ipa(lex_base, 'de', 'mary', 'bits3',
                                               True)

            # generate de-espeak
            elif resp.lower() == 'h':
                lex_entry['ipa'] = lex_gen_ipa(lex_base, 'de', 'espeak', 'de',
                                               True)

            # generate en-mary
            elif resp.lower() == 'l':

                tts.locale = 'en-US'
                tts.engine = 'mary'
                tts.voice = 'cmu-rms-hsmm'

                ipas = tts.gen_ipa(lex_base)
                tts.say_ipa(ipas, async=True)
                lex_entry['ipa'] = ipas

            # generate fr-mary
            elif resp.lower() == 'k':

                tts.locale = 'fr'
                tts.engine = 'mary'
                tts.voice = 'upmc-pierre-hsmm'

                ipas = tts.gen_ipa(lex_base)
                tts.say_ipa(ipas, async=True)
                lex_entry['ipa'] = ipas

            # generate de-sequitur
            elif resp.lower() == 'j':
                lex_entry['ipa'] = lex_gen_ipa(lex_base, 'de', 'sequitur',
                                               'de', True)

            # speak de mary unitsel
            elif resp.lower() == 'p':

                if len(lex_entry['ipa']) == 0:
                    continue

                ipas = lex_entry['ipa']

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'bits3'

                tts.say_ipa(ipas, async=True)

            # speak de mary hsmm
            elif resp.lower() == 'o':

                if len(lex_entry['ipa']) == 0:
                    continue

                ipas = lex_entry['ipa']

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'dfki-pavoque-neutral-hsmm'

                tts.say_ipa(ipas, async=True)

            # speak fr mary hsmm
            elif resp.lower() == 'i':

                if len(lex_entry['ipa']) == 0:
                    continue

                ipas = lex_entry['ipa']

                tts.locale = 'fr'
                tts.engine = 'mary'
                tts.voice = 'upmc-pierre-hsmm'

                tts.say_ipa(ipas, async=True)

            # speak en mary hsmm
            elif resp.lower() == 'u':

                ipas = lex_entry['ipa']

                tts.locale = 'en-US'
                tts.engine = 'mary'
                tts.voice = 'cmu-rms-hsmm'

                tts.say_ipa(ipas, async=True)

            # edit XS
            elif resp.lower() == 'e':

                ipas = lex_entry['ipa']

                xs = ipa2xsampa(lex_token, ipas, stress_to_vowels=False)
                readline.add_history(xs)
                xs = raw_input(xs + '> ')

                ipas = xsampa2ipa(lex_token, xs)

                lex_entry['ipa'] = ipas

        except:
            logging.error('EXCEPTION CAUGHT %s' % traceback.format_exc())

    lex.save()
    print "new lexicon saved."
    print
with codecs.open('%s/train.lex' % WORKDIR, 'w', 'utf8') as trainf, \
     codecs.open('%s/test.lex'  % WORKDIR, 'w', 'utf8') as testf, \
     codecs.open('%s/all.lex'   % WORKDIR, 'w', 'utf8') as allf :

    cnt = 0

    for token in lex:
        if not token in wiktionary:
            # print u"Missing in wiktionary: %s" % token
            num_missing += 1
        else:
            num_found += 1

            source_ipa = wiktionary[token][1]
            target_ipa = lex[token]['ipa'].replace(u'-', u'')

            target_xs = ipa2xsampa (token, target_ipa, spaces=True, stress_to_vowels=False)

            if cnt % 10 == 0:
                testf.write (u'%s %s\n' % (source_ipa, target_xs))
            else:
                trainf.write (u'%s %s\n' % (source_ipa, target_xs))
            allf.write (u'%s %s\n' % (source_ipa, target_xs))

            cnt += 1

logging.info('sequitur workdir %s done. %d entries.' % (WORKDIR, cnt))


Esempio n. 8
0
lex = Lexicon(file_name=dict_name)
logging.info("loading lexicon...done.")

#
# export
#

misc.mkdirs(workdir)

with codecs.open('%s/train.lex' % workdir, 'w', 'utf8') as trainf, \
     codecs.open('%s/test.lex'  % workdir, 'w', 'utf8') as testf, \
     codecs.open('%s/all.lex'  % workdir, 'w', 'utf8') as allf :

    cnt = 0

    for word in lex:

        ipa = lex[word]['ipa']

        xs = ipa2xsampa(word, ipa, spaces=True, stress_to_vowels=False)

        if cnt % 10 == 0:
            testf.write(u'%s %s\n' % (word, xs))
        else:
            trainf.write(u'%s %s\n' % (word, xs))
        allf.write(u'%s %s\n' % (word, xs))

        cnt += 1

logging.info('sequitur workdir %s done.' % workdir)
def export_sphinx_case(work_dir, sphinxtrain_cfg_fn):

    #
    # language model
    #

    misc.mkdirs('%s' % work_dir)

    fn = '%s/prompts.sent' % work_dir

    with codecs.open(fn, 'w', 'utf8') as outf:

        for cfn in ts_all:

            transcript = transcripts[cfn]['ts']

            outf.write('%s\n' % transcript)

    logging.info("%s written." % fn)

    fn = '%s/wlist.txt' % work_dir

    with codecs.open(fn, 'w', 'utf8') as outf:

        for word in lex:

            if ENABLE_NOISE_FILLER:
                if word == NOISE_WORD:
                    logging.debug('skipping noise word')
                    continue

            outf.write('%s\n' % word)

    logging.info("%s written." % fn)

    #
    # create work_dir structure
    #

    mfcc_dir = "%s/mfcc" % work_dir

    misc.mkdirs('%s/logs' % work_dir)
    misc.mkdirs('%s/etc' % work_dir)
    misc.mkdirs('%s' % mfcc_dir)

    # generate sphinx_train.cfg, featdir in there

    # inf = codecs.open ('data/src/speech/sphinx_train.cfg', 'r', 'utf8')
    # outf = codecs.open ('%s/etc/sphinx_train.cfg' % work_dir, 'w', 'utf8')
    # for line in inf:
    #     s = line.replace('%FEATDIR%', mfcc_dir).replace('%WORKDIR%', work_dir)
    #     outf.write (s)
    # inf.close()
    # outf.close()

    misc.copy_file(sphinxtrain_cfg_fn, '%s/etc/sphinx_train.cfg' % work_dir)
    if ENABLE_NOISE_FILLER:
        misc.copy_file('data/src/speech/sphinx-voxforge-noise.filler',
                       '%s/etc/voxforge.filler' % work_dir)
    else:
        misc.copy_file('data/src/speech/sphinx-voxforge.filler',
                       '%s/etc/voxforge.filler' % work_dir)
    misc.copy_file('data/src/speech/sphinx-feat.params',
                   '%s/etc/feat.params' % work_dir)

    #
    # prompts
    #

    train_fifn = '%s/etc/voxforge_train.fileids' % work_dir
    train_tsfn = '%s/etc/voxforge_train.transcription' % work_dir
    test_fifn = '%s/etc/voxforge_test.fileids' % work_dir
    test_tsfn = '%s/etc/voxforge_test.transcription' % work_dir
    runfeatfn = '%s/run-feat.sh' % work_dir

    lex_covered = set()

    SPHINXFE = "sphinx_fe -i '%s' -part 1 -npart 1 -ei wav -o '%s' -eo mfc -nist no -raw no -mswav yes -samprate 16000 -lowerf 130 -upperf 6800 -nfilt 25 -transform dct -lifter 22 >>logs/mfcc%02d.log 2>&1 &\n"
    with codecs.open(runfeatfn, 'w', 'utf8') as runfeatf:

        runfeatf.write('#!/bin/bash\n\n')

        cnt = 0
        for cfn in ts_all:

            w16filename = "%s/%s/%s.wav" % (wav16_dir, cfn2corpus[cfn], cfn)
            mfcfilename = "mfcc/%s.mfc" % cfn
            runfeatf.write(SPHINXFE % (w16filename, mfcfilename, cnt))
            cnt = (cnt + 1) % NJOBS

            if cnt == 0:
                runfeatf.write('wait\n')

    logging.info("%s written." % runfeatfn)

    with codecs.open (train_fifn, 'w', 'utf8') as train_fif, \
         codecs.open (train_tsfn, 'w', 'utf8') as train_tsf, \
         codecs.open (test_fifn,  'w', 'utf8') as test_fif,  \
         codecs.open (test_tsfn,  'w', 'utf8') as test_tsf:

        for cfn in ts_train:
            train_fif.write('%s\n' % cfn)
            tokens = tokenize(ts_train[cfn]['ts'],
                              lang=options.lang,
                              keep_punctuation=False)
            ts = u' '.join(tokens)
            train_tsf.write(u'<s> %s </s> (%s)\n' % (ts, cfn))

            for token in tokens:
                if not token in lex:
                    logging.error('word %s not covered by dict!')
                    sys.exit(1)
                lex_covered.add(token)

        for cfn in ts_test:
            test_fif.write('%s\n' % cfn)
            tokens = tokenize(ts_test[cfn]['ts'],
                              lang=options.lang,
                              keep_punctuation=False)
            ts = u' '.join(tokens)
            test_tsf.write(u'<s> %s </s> (%s)\n' % (ts, cfn))

            for token in tokens:
                if not token in lex:
                    logging.error('word %s not covered by dict!')
                    sys.exit(1)
                lex_covered.add(token)

    logging.info("%s written." % train_tsfn)
    logging.info("%s written." % train_fifn)
    logging.info("%s written." % test_tsfn)
    logging.info("%s written." % test_fifn)

    # generate dict

    phoneset = set()

    pdfn = '%s/etc/voxforge.dic' % work_dir
    with codecs.open(pdfn, 'w', 'utf8') as pdf:

        for word in lex:

            if ENABLE_NOISE_FILLER:
                if word == NOISE_WORD:
                    logging.debug('skipping noise word')
                    continue

            if not word in lex_covered:
                logging.debug(
                    'skipping word %s as it is not covered by transcripts' %
                    word)
                continue

            ipa = lex[word]['ipa']

            xs = ipa2xsampa(word, ipa)
            xa = xsampa2xarpabet(word, xs)

            pdf.write(u'%s %s\n' % (word, xa))

            phones = xa.split(' ')
            for phone in phones:

                if len(phone.strip()) == 0:
                    logging.error(
                        u"***ERROR: empty phone detected in lex entry %s %s" %
                        (word, ipa))

                phoneset.add(phone)

    logging.info("%s written." % pdfn)

    logging.info("Got %d phones." % len(phoneset))

    phfn = '%s/etc/voxforge.phone' % work_dir
    with codecs.open(phfn, 'w', 'utf8') as phf:

        for phone in phoneset:
            phf.write(u'%s\n' % phone)

        phf.write(u'SIL\n')
        if ENABLE_NOISE_FILLER:
            phf.write(u'NSPC\n')

    logging.info("%s written." % phfn)

    misc.render_template('data/src/speech/sphinx-run.sh.template',
                         '%s/sphinx-run.sh' % work_dir,
                         lm_name=lm_name)
Esempio n. 10
0
misc.mkdirs('%s/local/dict.adapt' % data_dir)

dictfn2 = '%s/local/dict.adapt/lexicon.txt' % data_dir

logging.info ( "Exporting dictionary..." )

ps = {}

with open (dictfn2, 'w') as dictf:

    dictf.write('!SIL SIL\n')

    for token in sorted(lex):

        ipa = lex[token]['ipa']
        xsr = ipa2xsampa (token, ipa, spaces=True)

        xs = xsr.replace('-','').replace('\' ', '\'').replace('  ', ' ').replace('#', 'nC')

        dictf.write((u'%s %s\n' % (token, xs)).encode('utf8'))

        for p in xs.split(' '):

            if len(p)<1:
                logging.error ( u"****ERROR: empty phoneme in : '%s' ('%s', ipa: '%s', token: '%s')" % (xs, xsr, ipa, token) )

            pws = p[1:] if p[0] == '\'' else p

            if not pws in ps:
                ps[pws] = set([p])
            else:
Esempio n. 11
0
def lex_edit(token):

    global lex, lex_token, lex_entry, lex_base

    lex_set_token (token)

    while True:
   
        try:

            lex_paint_main()
        
            c = stdscr.getch()
            if c == ord('q'):
                lex.save()
                break  
        
            # generate de-mary
            elif c == ord('g'):
                
                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice  = 'bits3'

                ipas = tts.gen_ipa (lex_base)
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas
       
            # generate de-espeak
            elif c == ord('h'):
                
                tts.locale ='de'
                tts.engine ='espeak'
                tts.voice  ='de'
                ipas = tts.gen_ipa (lex_base)
                lex_entry['ipa'] = ipas

                tts.locale ='de'
                tts.engine ='mary'
                tts.voice  ='bits3'
                tts.say_ipa(ipas)

        
            # generate en-mary 
            elif c == ord('l'):
                
                tts.locale ='en-US'
                tts.engine ='mary'
                tts.voice  ='cmu-rms-hsmm'

                ipas = tts.gen_ipa (lex_base)
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # generate fr-mary 
            elif c == ord('k'):
                
                tts.locale ='fr'
                tts.engine ='mary'
                tts.voice  ='upmc-pierre-hsmm'

                ipas = tts.gen_ipa (lex_base)
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # generate de-sequitur
            elif c == ord('j'):
                
                ipas = sequitur_gen_ipa (SEQUITUR_MODEL, lex_base)
                tts.locale ='de'
                tts.engine ='mary'
                tts.voice  ='bits3'
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # speak de mary unitsel 
            elif c == ord('p'):
        
                if len(lex_entry['ipa']) == 0:
                    continue
        
                ipas = lex_entry['ipa']

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice  = 'bits3'

                tts.say_ipa(ipas)

            # speak de mary hsmm
            elif c == ord('o'):
        
                if len(lex_entry['ipa']) == 0:
                    continue
        
                ipas = lex_entry['ipa']

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice  = 'dfki-pavoque-neutral-hsmm'

                tts.say_ipa(ipas)

            # speak fr mary hsmm
            elif c == ord('i'):
       
                if len(lex_entry['ipa']) == 0:
                    continue
        
                ipas = lex_entry['ipa']

                tts.locale = 'fr'
                tts.engine = 'mary'
                tts.voice  = 'pierre-voice-hsmm'

                tts.say_ipa(ipas)
       
            # speak en mary hsmm
            elif c == ord('u'):
        
                ipas = lex_entry['ipa']

                tts.locale = 'en-US'
                tts.engine = 'mary'
                tts.voice  = 'cmu-rms-hsmm'

                tts.say_ipa(ipas)
       
            # edit token
            elif c == ord('t'):

                token = misc.edit_popup(stdscr, ' Token ', '')

                lex_set_token (token)

            # edit XS
            elif c == ord('e'):
        
                ipas = lex_entry['ipa']

                xs = ipa2xsampa (lex_token, ipas, stress_to_vowels=False)

                xs = misc.edit_popup(stdscr, ' X-SAMPA ', xs)

                ipas = xsampa2ipa (lex_token, xs)
        
                lex_entry['ipa'] = ipas

        except:
            logging.error('EXCEPTION CAUGHT %s' % traceback.format_exc())
Esempio n. 12
0
def lex_edit(token):

    global lex, lex_token, lex_entry, lex_base

    lex_set_token(token)

    while True:

        try:

            lex_paint_main()

            c = raw_input('lex > ').lower()
            if c == 'q':
                lex.save()
                break

            # generate de-mary
            elif c == 'g':

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'bits3'

                ipas = tts.gen_ipa(lex_base)
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # generate de-espeak
            elif c == 'h':

                tts.locale = 'de'
                tts.engine = 'espeak'
                tts.voice = 'de'
                ipas = tts.gen_ipa(lex_base)
                lex_entry['ipa'] = ipas

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'bits3'
                tts.say_ipa(ipas)

            # generate en-mary
            elif c == 'l':

                tts.locale = 'en-US'
                tts.engine = 'mary'
                tts.voice = 'cmu-rms-hsmm'

                ipas = tts.gen_ipa(lex_base)
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # generate fr-mary
            elif c == 'k':

                tts.locale = 'fr'
                tts.engine = 'mary'
                tts.voice = 'upmc-pierre-hsmm'

                ipas = tts.gen_ipa(lex_base)
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # generate de-sequitur
            elif c == 'j':

                ipas = sequitur_gen_ipa(SEQUITUR_MODEL, lex_base)
                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'bits3'
                tts.say_ipa(ipas)
                lex_entry['ipa'] = ipas

            # speak de mary unitsel
            elif c == 'p':

                if len(lex_entry['ipa']) == 0:
                    continue

                ipas = lex_entry['ipa']

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'bits3'

                tts.say_ipa(ipas)

            # speak de mary hsmm
            elif c == 'o':

                if len(lex_entry['ipa']) == 0:
                    continue

                ipas = lex_entry['ipa']

                tts.locale = 'de'
                tts.engine = 'mary'
                tts.voice = 'dfki-pavoque-neutral-hsmm'

                tts.say_ipa(ipas)

            # speak fr mary hsmm
            elif c == 'i':

                if len(lex_entry['ipa']) == 0:
                    continue

                ipas = lex_entry['ipa']

                tts.locale = 'fr'
                tts.engine = 'mary'
                tts.voice = 'pierre-voice-hsmm'

                tts.say_ipa(ipas)

            # speak en mary hsmm
            elif c == 'u':

                ipas = lex_entry['ipa']

                tts.locale = 'en-US'
                tts.engine = 'mary'
                tts.voice = 'cmu-rms-hsmm'

                tts.say_ipa(ipas)

            # edit token
            elif c == 't':

                readline.add_history(lex_token.encode('utf8'))
                token = raw_input('token: ').decode('utf8')

                lex_set_token(token)

            # edit XS
            elif c == 'e':

                ipas = lex_entry['ipa']

                xs = ipa2xsampa(lex_token, ipas, stress_to_vowels=False)

                readline.add_history(xs.encode('utf8'))
                xs = raw_input('X-SAMPA: ').decode('utf8')

                ipas = xsampa2ipa(lex_token, xs)

                lex_entry['ipa'] = ipas

        except:
            logging.error('EXCEPTION CAUGHT %s' % traceback.format_exc())
def export_audio(train_val, tsdict):

    global data_dir, utt_num, options, cnt

    destdirfn = data_dir

    lcnt = 0

    for utt_id in tsdict:

        ts = tsdict[utt_id]

        tokens = tokenize(ts['ts'], lang=options.lang)
        covered_by_lex = True
        for token in tokens:
            if not (token in lex):
                logging.error(u'token %s missing from dict!' % token)
                logging.error(u'utt_id: %s' % utt_id)
                logging.error(u'ts: %s' % ts['ts'])
                covered_by_lex = False
                break

        if not covered_by_lex:
            continue

        print("about to export")
        with codecs.open('%s/%09d.id'  % (destdirfn, utt_num[train_val]), 'w', 'utf8') as idf,   \
             codecs.open('%s/%09d.tkn' % (destdirfn, utt_num[train_val]), 'w', 'utf8') as tknf,  \
             codecs.open('%s/%09d.wrd' % (destdirfn, utt_num[train_val]), 'w', 'utf8') as wrdf   :
            print("utterance read. " + str(wrdf) + "\n")
            tkn = u''
            wrd = u''
            for token in tokens:

                ipas = lex[token]['ipa']
                xsr = ipa2xsampa(token, ipas, spaces=True)

                xs = (xsr.replace('-', '').replace('\' ', '\'').replace(
                    '  ', ' ').replace('#', 'nC'))

                if tkn:
                    tkn += u' | '
                    wrd += u' '

                tkn += xs
                wrd += token

            tknf.write('%s\n' % tkn)
            wrdf.write('%s\n' % wrd)
            idf.write('utt_id\t%s\ncorpus\t%s\nlang\t%s\n' %
                      (utt_id, ts['corpus_name'], options.lang))

            os.symlink('%s/%s/%s.wav' % (work_dir, ts['corpus_name'], utt_id),
                       '%s/%09d.wav' % (destdirfn, utt_num[train_val]))
            # cmd = 'ln -s %s/%s/%s.wav %s/%09d.wav' % (wav16_dir, ts['corpus_name'], utt_id, destdirfn, utt_num[train_val])
            # logging.debug(cmd)
            # os.system(cmd)

            # utt2spkf.write('%s %s\n' % (utt_id, ts['spk']))

            utt_num[train_val] = utt_num[train_val] + 1

        cnt += 1
        lcnt += 1
        if cnt % 1000 == 0:
            logging.info(
                '%6d audio files linked from %s [%s] (%6d/%6d)...' %
                (cnt, ts['corpus_name'], train_val, lcnt, len(tsdict)))
Esempio n. 14
0
            tts.say_ipa(ipas, async=True)

        # edit token
        elif c == ord('t'):

            token = misc.edit_popup(stdscr, ' Token ', '')

            lex_set_token(token)

        # edit XS
        elif c == ord('e'):

            ipas = lex_entry['ipa']

            xs = ipa2xsampa(lex_token, ipas, stress_to_vowels=False)

            xs = misc.edit_popup(stdscr, ' X-SAMPA ', xs)

            try:
                ipas = xsampa2ipa(lex_token, xs)

                lex_entry['ipa'] = ipas

            except:
                pass

    #
    # fini
    #
Esempio n. 15
0
    def synthesize(self, txt, mode='txt'):

        if self._host_tts == 'local':

            # import pdb; pdb.set_trace()

            wav = None

            if self.engine == 'mary':

                self.marytts.voice = self._voice
                self.marytts.locale = self._locale

                if mode == 'txt':
                    wav = self.marytts.synth_wav(txt)
                elif mode == 'ipa':
                    xs = ipa2mary('ipa', txt)
                    wav = self.marytts.synth_wav(xs, fmt='xs')
                else:
                    raise Exception("unknown mary mode '%s'" % mode)

            elif self.engine == 'espeak':

                if mode == 'txt':

                    self.espeak.voice = self._voice
                    self.espeak.speed = self._speed
                    self.espeak.pitch = self._pitch
                    wav = self.espeak.synth_wav(txt)
                    # logging.debug ('synthesize: %s %s -> %s' % (txt, mode, repr(wav)))

                elif mode == 'ipa':
                    xs = ipa2xsampa('ipa', txt)
                    logging.debug('synthesize: %s %s -> %s' %
                                  (txt, mode, repr(xs)))
                    wav = self.espeak.synth_wav(xs, fmt='xs')

            elif self.engine == 'pico':

                if mode == 'txt':

                    self.picotts.voice = self._voice
                    wav = self.picotts.synth_wav(txt)
                    # logging.debug ('synthesize: %s %s -> %s' % (txt, mode, repr(wav)))

                else:
                    raise Exception("unknown espeak mode '%s'" % mode)
            else:

                raise Exception("unknown engine '%s'" % self.engine)

        else:

            args = {
                'l': self._locale,
                'v': self._voice,
                'e': self._engine,
                'm': mode,
                't': txt.encode('utf8')
            }
            url = 'http://%s:%s/tts/synth?%s' % (
                self._host_tts, self._port_tts, urllib.urlencode(args))

            response = requests.get(url)

            if response.status_code != 200:
                return None

            wav = response.content

        if wav:
            logging.debug('synthesize: %s %s -> WAV' % (txt, mode))
        else:
            logging.error('synthesize: %s %s -> NO WAV' % (txt, mode))

        return wav