Esempio n. 1
0
ps = {}

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

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

    # FIXME: re-enable once we have noise tokens in our transcripts
    # dictf.write('<SPOKEN_NOISE> SPN\n')
    dictf.write('<UNK> SPN\n')
    # dictf.write('<NOISE> NSN\n')

    for token in sorted(utt_dict):

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

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

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

        for p in xs.split(' '):

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

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

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

    global lex, lex_token, lex_entry, lex_base

    lex_set_token(token)

    while True:

        lex_paint_main()

        c = stdscr.getch()
        if c == ord('q'):
            lex.save()
            break

        # generate de-mary
        elif c == ord('g'):

            tts.set_locale('de')
            tts.set_engine('mary')
            tts.set_voice('bits3')

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

        # generate de-espeak
        elif c == ord('h'):

            tts.set_locale('de')
            tts.set_engine('espeak')
            tts.set_voice('de')
            ipas = tts.gen_ipa(lex_base)

            tts.set_locale('de')
            tts.set_engine('mary')
            tts.set_voice('bits3')
            tts.say_ipa(ipas)

            lex_entry['ipa'] = ipas

        # generate en-mary
        elif c == ord('l'):

            tts.set_locale('en-US')
            tts.set_engine('mary')
            tts.set_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.set_locale('fr')
            tts.set_engine('mary')
            tts.set_voice('pierre-voice-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(lex_base)
            tts.set_locale('de')
            tts.set_engine('mary')
            tts.set_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.set_locale('de')
            tts.set_engine('mary')
            tts.set_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.set_locale('de')
            tts.set_engine('mary')
            tts.set_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.set_locale('fr')
            tts.set_engine('mary')
            tts.set_voice('pierre-voice-hsmm')

            tts.say_ipa(ipas)

        # speak en mary hsmm
        elif c == ord('u'):

            ipas = lex_entry['ipa']

            tts.set_locale('en-US')
            tts.set_engine('mary')
            tts.set_voice('cmu-rms-hsmm')

            tts.say_ipa(ipas)

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

            token = utils.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 = utils.edit_popup(stdscr, ' X-SAMPA ', xs)

            try:
                ipas = xsampa2ipa(lex_token, xs)

                lex_entry['ipa'] = ipas
            except:
                pass
Esempio n. 3
0
lex = Lexicon()
print "loading lexicon...done."

#
# export
#

utils.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


Esempio n. 4
0
                allf.write (u'<s> %s </s>\n' % ' '.join(tokens))

#
# wlist, dictionary
#

with codecs.open('%s/hal.vocab' % WORKDIR, 'w', 'utf8') as vocabf, \
     codecs.open('%s/hal.dic' % WORKDIR, 'w', 'utf8') as dicf:

    vocabf.write('</s>\n')
    vocabf.write('<s>\n')

    for token in sorted(all_tokens):
        vocabf.write(u'%s\n' % token)

        ipa = lex[token]['ipa']

        xs  = ipa2xsampa(token, ipa)
        xa  = xsampa2xarpabet(token, xs)
        dicf.write(u'%s %s\n' % (token, xa))

    
#
# generate sphinx lm
#

os.system('text2idngram -vocab %s/hal.vocab -idngram %s/hal.idngram < %s/hal.txt' % (WORKDIR, WORKDIR, WORKDIR))
os.system('idngram2lm -calc_mem -vocab_type 0 -idngram %s/hal.idngram -vocab %s/hal.vocab -arpa %s/hal.arpa' % (WORKDIR, WORKDIR, WORKDIR))
os.system('sphinx_lm_convert -i %s/hal.arpa -o %s/hal.lm.DMP' % (WORKDIR, WORKDIR))

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

            token = utils.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 = utils.edit_popup(stdscr, ' X-SAMPA ', xs)

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

            except:
                pass

                

    #
    # fini
Esempio n. 6
0
def export_sphinx_case(work_dir, sphinxtrain_cfg_fn):

    #
    # language model
    #

    utils.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)

    print "%s written." % fn
    print

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

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

        for word in lex:

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

    print "%s written." % fn
    print

    #
    # create work_dir structure
    #

    mfcc_dir = "%s/mfcc" % work_dir

    utils.mkdirs('%s/logs' % work_dir)
    utils.mkdirs('%s/etc' % work_dir)
    utils.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()

    utils.copy_file(sphinxtrain_cfg_fn, '%s/etc/sphinx_train.cfg' % work_dir)
    utils.copy_file('data/src/speech/sphinx-voxforge.filler',
                    '%s/etc/voxforge.filler' % work_dir)
    utils.copy_file('data/src/speech/sphinx-feat.params',
                    '%s/etc/feat.params' % work_dir)

    # generate dict

    phoneset = set()

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

        for word in lex:

            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:
                    print u"***ERROR: empty phone detected in lex entry %s %s" % (
                        word, ipa)

                phoneset.add(phone)

    print "%s written." % pdfn
    print

    print "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')

    print "%s written." % phfn
    print

    #
    # 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

    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.wav" % (wav16_dir, cfn)
            mfcfilename = "mfcc/%s.mfc" % cfn
            runfeatf.write(SPHINXFE % (w16filename, mfcfilename, cnt))
            cnt = (cnt + 1) % NJOBS

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

    print "%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)
            train_tsf.write(u'<s> %s </s> (%s)\n' % (ts_train[cfn]['ts'], cfn))

        for cfn in ts_test:
            test_fif.write('%s\n' % cfn)
            test_tsf.write(u'<s> %s </s> (%s)\n' % (ts_test[cfn]['ts'], cfn))

    print "%s written." % train_tsfn
    print "%s written." % train_fifn
    print "%s written." % test_tsfn
    print "%s written." % test_fifn

    utils.copy_file('data/src/speech/sphinx-run.sh',
                    '%s/sphinx-run.sh' % work_dir)