<commit_before>/*
 * Copyright (C) 2014 <NAME> (<NAME>)
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.tlhInganHol.android.klingonttsengine;

import android.content.Context;
import android.media.AudioFormat;
import android.media.MediaPlayer;
import android.speech.tts.SynthesisCallback;
import android.speech.tts.SynthesisRequest;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeechService;
import android.util.Log;

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

/**
 * A text to speech engine that generates Klingon speech.
 * The engine supports two different Klingon voices.
 *
 * It exercises all aspects of the Text to speech engine API
 * {@link android.speech.tts.TextToSpeechService}.
 */
public class KlingonSpeakTtsService extends TextToSpeechService implements android.media.MediaPlayer.OnCompletionListener {
    private static final String TAG = "KlingonSpeakTtsService";

    // The media player object used to play the sounds.
    private MediaPlayer mMediaPlayer = null;

    private volatile String[] mCurrentLanguage = null;
    private volatile boolean mStopRequested = false;

    // This map contains the front half of full syllables.
    private static final Map<String, Integer> FRONT_HALF_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();

        // THIS IS AUTOGENERATED CODE. DO NOT EDIT BELOW THIS LINE.
        // BEGIN: FRONT_HALF_SYLLABLE_TO_AUDIO_MAP
        // --- Verb prefixes ---
        // jIH
        initMap.put("jI-", R.raw.ji0);
        initMap.put("qa-", R.raw.qa0);
        initMap.put("vI-", R.raw.vi0);
        initMap.put("Sa-", R.raw.sa0);

        // SoH
        initMap.put("bI-", R.raw.bi0);
        initMap.put("Co-", R.raw.co0);
        initMap.put("Da-", R.raw.da0);
        initMap.put("ju-", R.raw.ju0);

        // ghaH/'oH
        initMap.put("mu-", R.raw.mu0);
        initMap.put("Du-", R.raw.du0);
        initMap.put("nu-", R.raw.nu0);
        initMap.put("lI-", R.raw.li0);

        // maH
        initMap.put("ma-", R.raw.ma0);
        initMap.put("pI-", R.raw.pi0);
        initMap.put("wI-", R.raw.wi0);
        initMap.put("re-", R.raw.re0);
        initMap.put("DI-", R.raw.di0);

        // tlhIH
        initMap.put("Su-", R.raw.su0);
        initMap.put("tu-", R.raw.tu0);
        initMap.put("bo-", R.raw.bo0);
        initMap.put("Ce-", R.raw.ce0);

        // chaH/bIH
        initMap.put("nI-", R.raw.ni0);
        initMap.put("lu-", R.raw.lu0);

        // Imperatives
        initMap.put("yI-", R.raw.yi0);
        initMap.put("HI-", R.raw.hi0);
        initMap.put("Go-", R.raw.go0);
        initMap.put("tI-", R.raw.ti0);
        initMap.put("pe-", R.raw.pe0);

        // Front parts of words.
        initMap.put("CI-", R.raw.ci0);
        initMap.put("Cu-", R.raw.cu0);
        initMap.put("Do-", R.raw.do0);
        initMap.put("na-", R.raw.na0);  // From {naDev}.
        initMap.put("xa-", R.raw.xa0);
        initMap.put("xI-", R.raw.xi0);  // From {tlhIngan}.
        initMap.put("te-", R.raw.te0);  // From {tera'ngan}.
        initMap.put("ya-", R.raw.ya0);
        initMap.put("za-", R.raw.za0);
        // banan, Human

        // END: FRONT_HALF_SYLLABLE_TO_AUDIO_MAP
        // THIS IS AUTOGENERATED CODE. DO NOT EDIT ABOVE THIS LINE.

        FRONT_HALF_SYLLABLE_TO_AUDIO_MAP = Collections.unmodifiableMap(initMap);
    }

    // This map contains short syllables, i.e., those of the form CV.
    // Unlike for the corresponding front half of a full syllable, the audio for a short syllable
    // doesn't end abruptly. For example, "Da-" (a front half syllable) is the prefix for "you-it",
    // whereas "Da" (a short syllable) is the verb for "behave as".
    private static final Map<String, Integer> SHORT_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();
        // bo, cha, Da, DI, Do, gho, ghu, He, Hu, ja, je, jo, lu, po, QI, ra, ro, So, ta, tI, va, ya, yu, 'a, 'o

        // THIS IS AUTOGENERATED CODE. DO NOT EDIT BELOW THIS LINE.
        // BEGIN: SHORT_SYLLABLE_TO_AUDIO_MAP
        initMap.put("bo", R.raw.bo);
        initMap.put("Ca", R.raw.ca);
        initMap.put("Da", R.raw.da);
        initMap.put("DI", R.raw.di);
        initMap.put("Go", R.raw.go);
        initMap.put("Do", R.raw.do_);  // Can't use "do" because it's a Java keyword!
        initMap.put("je", R.raw.je);
        initMap.put("no", R.raw.no);
        initMap.put("ya", R.raw.ya);
        initMap.put("yu", R.raw.yu);
        initMap.put("za", R.raw.za);
        initMap.put("zo", R.raw.zo);
        // END: SHORT_SYLLABLE_TO_AUDIO_MAP
        // THIS IS AUTOGENERATED CODE. DO NOT EDIT ABOVE THIS LINE.

        SHORT_SYLLABLE_TO_AUDIO_MAP = Collections.unmodifiableMap(initMap);
    }

    // This map contains the back half of full syllables. It is preferable to avoid constructing
    // syllables by concatenating the front and back parts, as there is a noticeable discontinuity
    // in the audio if the vowel sound is not perfectly matched.
    private static final Map<String, Integer> BACK_HALF_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();
        // -a, -e, -I, -o, -u

        BACK_HALF_SYLLABLE_TO_AUDIO_MAP = Collections.unmodifiableMap(initMap);
    }

    // This map contains full syllables, i.e., those of the form CVC, CVrgh, or CV[wy]'.
    private static final Map<String, Integer> MAIN_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();

        // THIS IS AUTOGENERATED CODE. DO NOT EDIT BELOW THIS LINE.
        // BEGIN: MAIN_SYLLABLE_TO_AUDIO_MAP
        // --- b ---
        initMap.put("baC", R.raw.bac);
        initMap.put("baG", R.raw.bag);
        initMap.put("baH", R.raw.bah);
        initMap.put("baj", R.raw.baj);
        initMap.put("bal", R.raw.bal);
        initMap.put("bam", R.raw.bam);
        initMap.put("baF", R.raw.baf);
        initMap.put("baQ", R.raw.bak);
        initMap.put("baq", R.raw.baq);
        initMap.put("bar", R.raw.bar);
        initMap.put("barG", R.raw.barg);
        initMap.put("baS", R.raw.bas);
        initMap.put("bav", R.raw.bav);
        initMap.put("bax", R.raw.bax);
        initMap.put("baz", R.raw.baz);   // ba'
        initMap.put("beb", R.raw.beb);
        initMap.put("beC", R.raw.bec);
        initMap.put("beG", R.raw.beg);
        initMap.put("beH", R.raw.beh);
        initMap.put("bej", R.raw.bej);
        initMap.put("bel", R.raw.bel);
        initMap.put("bem", R.raw.bem);
        initMap.put("ben", R.raw.ben);
        initMap.put("bep", R.raw.bep);
        initMap.put("beQ", R.raw.bek);
        initMap.put("beq", R.raw.beq);
        initMap.put("ber", R.raw.ber);
        initMap.put("berG", R.raw.berg);
        initMap.put("bet", R.raw.bet);
        initMap.put("bey", R.raw.bey);
        initMap.put("bez", R.raw.bez);   // be'
        initMap.put("bID", R.raw.bid);
        initMap.put("bIF", R.raw.bif);
        initMap.put("bIG", R.raw.big);
        initMap.put("bIH", R.raw.bih);
        initMap.put("bIj", R.raw.bij);
        initMap.put("bIl", R.raw.bil);
        initMap.put("bIm", R.raw.bim);
        initMap.put("bIp", R.raw.bip);
        initMap.put("bIQ", R.raw.bik);
        initMap.put("bIr", R.raw.bir);
        initMap.put("bIS", R.raw.bis);
        initMap.put("bIt", R.raw.bit);
        initMap.put("bIv", R.raw.biv);
        initMap.put("bIz", R.raw.biz);
        // bo is short
        initMap.put("bob", R.raw.bob);
        initMap.put("boC", R.raw.boc);
        initMap.put("boD", R.raw.bod);
        initMap.put("boF", R.raw.bof);
        initMap.put("boG", R.raw.bog);   // bogh
        initMap.put("boH", R.raw.boh);
        initMap.put("boj", R.raw.boj);
        initMap.put("bol", R.raw.bol);
        initMap.put("bom", R.raw.bom);
        initMap.put("bop", R.raw.bop);
        initMap.put("boQ", R.raw.bok);
        initMap.put("boq", R.raw.boq);
        initMap.put("bor", R.raw.bor);
        initMap.put("boS", R.raw.bos);
        initMap.put("bot", R.raw.bot);
        initMap.put("bov", R.raw.bov);
        initMap.put("box", R.raw.box);
        initMap.put("buD", R.raw.bud);
        initMap.put("buH", R.raw.buh);
        initMap.put("bup", R.raw.bup);
        initMap.put("buQ", R.raw.buk);
        initMap.put("buq", R.raw.buq);
        initMap.put("burG", R.raw.burg);
        initMap.put("bur", R.raw.bur);
        initMap.put("buS", R.raw.bus);
        initMap.put("buv", R.raw.buv);
        initMap.put("bux", R.raw.bux);
        initMap.put("buyz", R.raw.buyz);

        // --- ch ---
        initMap.put("Cab", R.raw.cab);
        initMap.put("CaC", R.raw.cac);
        initMap.put("CaD", R.raw.cad);
        initMap.put("CaG", R.raw.cag);
        initMap.put("CaH", R.raw.cah);
        initMap.put("Caj", R.raw.caj);   // chaj
        initMap.put("Cal", R.raw.cal);
        initMap.put("Cam", R.raw.cam);
        initMap.put("Can", R.raw.can);
        initMap.put("CaF", R.raw.caf);
        initMap.put("Cap", R.raw.cap);   // chaq
        initMap.put("Caq", R.raw.caq);   // chaq
        initMap.put("CaQ", R.raw.cak);
        initMap.put("Car", R.raw.car);
        initMap.put("CarG", R.raw.carg);
        initMap.put("CaS", R.raw.cas);
        initMap.put("Cax", R.raw.cax);
        initMap.put("Cawz", R.raw.cawz);
        initMap.put("Cav", R.raw.cav);
        initMap.put("Cayz", R.raw.cayz);
        initMap.put("Caz", R.raw.caz);
        initMap.put("Ceb", R.raw.ceb);
        initMap.put("CeC", R.raw.cec);
        initMap.put("CeG", R.raw.ceg);
        initMap.put("CeH", R.raw.ceh);
        initMap.put("Cej", R.raw.cej);
        initMap.put("Cel", R.raw.cel);
        initMap.put("Cem", R.raw.cem);
        initMap.put("Cen", R.raw.cen);
        initMap.put("CeF", R.raw.cef);  // cheng
        initMap.put("Cep", R.raw.cep);
        // initMap.put("CeQ", R.raw.cek);
        // initMap.put("Ceq", R.raw.ceq);
        initMap.put("Cer", R.raw.cer);
        initMap.put("CerG", R.raw.cerg);
        initMap.put("CeS", R.raw.ces);
        initMap.put("Cet", R.raw.cet);
        initMap.put("Cev", R.raw.cev);
        // initMap.put("Cey", R.raw.cey);
        initMap.put("Cez", R.raw.cez);
        initMap.put("CIC", R.raw.cic);
        initMap.put("CID", R.raw.cid);
        // initMap.put("CIF", R.raw.cif);
        // initMap.put("CIG", R.raw.cig);
        // initMap.put("CIH", R.raw.cih);
        initMap.put("CIj", R.raw.cij);
        initMap.put("CIl", R.raw.cil);
        initMap.put("CIm", R.raw.cim);
        initMap.put("CIn", R.raw.cin);
        initMap.put("CIp", R.raw.cip);
        // initMap.put("CIQ", R.raw.cik);
        // initMap.put("CIr", R.raw.cir);
        initMap.put("CIrg", R.raw.cirg);
        initMap.put("CIS", R.raw.cis);
        // initMap.put("CIt", R.raw.cit);
        initMap.put("CIv", R.raw.civ);
        initMap.put("CIw", R.raw.ciw);
        initMap.put("CIz", R.raw.ciz);
        initMap.put("Cob", R.raw.cob);
        // initMap.put("CoC", R.raw.coc);
        // initMap.put("CoD", R.raw.cod);
        initMap.put("CoF", R.raw.cof);
        initMap.put("CoG", R.raw.cog);
        initMap.put("CoH", R.raw.coh);  // choH
        // initMap.put("Coj", R.raw.coj);
        initMap.put("Col", R.raw.col);
        initMap.put("Com", R.raw.com);
        initMap.put("Con", R.raw.con);
        initMap.put("Cop", R.raw.cop);
        initMap.put("CoQ", R.raw.cok);
        initMap.put("Coq", R.raw.coq);
        initMap.put("Cor", R.raw.cor);
        initMap.put("CorG", R.raw.corg);
        initMap.put("CoS", R.raw.cos);
        initMap.put("Cot", R.raw.cot);
        initMap.put("Cov", R.raw.cov);
        initMap.put("Coz", R.raw.coz);
        // initMap.put("Cox", R.raw.cox);
        initMap.put("CuC", R.raw.cuc);
        initMap.put("CuD", R.raw.cud);
        initMap.put("CuG", R.raw.cug);  // chugh
        initMap.put("CuH", R.raw.cuh);
        initMap.put("Cun", R.raw.cun);
        initMap.put("CuF", R.raw.cuf);
        initMap.put("Cup", R.raw.cup);
        // initMap.put("CuQ", R.raw.cuk);
        initMap.put("Cuq", R.raw.cuq);  // chuq
        // initMap.put("CurG", R.raw.curg);
        // initMap.put("Cur", R.raw.cur);
        initMap.put("CuS", R.raw.cus);
        initMap.put("Cut", R.raw.cut);
        initMap.put("Cuv", R.raw.cuv);
        // initMap.put("Cux", R.raw.cux);
        initMap.put("Cuy", R.raw.cuy);
        // initMap.put("Cuyz", R.raw.cuyz);
        initMap.put("Cuz", R.raw.cuz);  // chu'

        // --- D ---
        initMap.put("Dab", R.raw.dab);
        initMap.put("Dac", R.raw.dac);
        initMap.put("Dag", R.raw.dag);
        initMap.put("DaH", R.raw.dah);
        initMap.put("Daj", R.raw.daj);
        initMap.put("Dal", R.raw.dal);
        initMap.put("Dan", R.raw.dan);
        initMap.put("Dap", R.raw.dap);
        initMap.put("Daq", R.raw.daq);
        initMap.put("DaQ", R.raw.dak);
        initMap.put("Darg", R.raw.darg);
        initMap.put("DaS", R.raw.das);
        initMap.put("Dat", R.raw.dat);
        initMap.put("Dav", R.raw.dav);
        initMap.put("Dawz", R.raw.dawz);  // Daw'
        initMap.put("Day", R.raw.day);
        initMap.put("Daz", R.raw.daz);
        initMap.put("Deb", R.raw.deb);
        initMap.put("DeC", R.raw.dec);  // Dech
        initMap.put("Deg", R.raw.deg);
        initMap.put("DeH", R.raw.deh);
        initMap.put("Dej", R.raw.dej);
        initMap.put("Del", R.raw.del);
        initMap.put("Den", R.raw.den);
        initMap.put("Dep", R.raw.dep);
        initMap.put("Deq", R.raw.deq);
        initMap.put("DeQ", R.raw.dek);
        initMap.put("Der", R.raw.der);
        initMap.put("DeS", R.raw.des);
        initMap.put("Dev", R.raw.dev);
        initMap.put("Dez", R.raw.dez);   // De'
        initMap.put("DIb", R.raw.dib);
        initMap.put("DIc", R.raw.dic);
        initMap.put("DIg", R.raw.dig);
        initMap.put("DIj", R.raw.dij);
        initMap.put("DIl", R.raw.dil);
        initMap.put("DIn", R.raw.din);
        initMap.put("DIF", R.raw.dif);
        initMap.put("DIp", R.raw.dip);
        initMap.put("DIr", R.raw.dir);
        initMap.put("DIS", R.raw.dis);
        initMap.put("DIv", R.raw.div);
        initMap.put("DIz", R.raw.diz);  // DI'
        initMap.put("DoC", R.raw.doc);   // Doch
        initMap.put("DoD", R.raw.dod);
        initMap.put("DoG", R.raw.dog);   // Dogh
        initMap.put("DoH", R.raw.doh);
        initMap.put("Doj", R.raw.doj);
        initMap.put("Dol", R.raw.dol);
        initMap.put("Dom", R.raw.dom);
        initMap.put("Don", R.raw.don);
        initMap.put("Dop", R.raw.dop);
        initMap.put("Doq", R.raw.doq);
        initMap.put("DoQ", R.raw.dok);
        initMap.put("Dor", R.raw.dor);
        initMap.put("DoS", R.raw.dos);
        initMap.put("Dox", R.raw.dox);
        initMap.put("Dov", R.raw.dov);
        initMap.put("Doyz", R.raw.doyz);   // Doy'
        initMap.put("Doz", R.raw.doz);   // Do'
        initMap.put("Duj", R.raw.duj);
        initMap.put("DuQ", R.raw.duk);   // DuQ
        initMap.put("Duz", R.raw.duz);   // Du'

        // --- gh ---
        initMap.put("Gab", R.raw.gab);
        initMap.put("GaC", R.raw.gac);   // ghach
        initMap.put("GaG", R.raw.gag);
        initMap.put("GaH", R.raw.gah);
        initMap.put("Gaj", R.raw.gaj);   // ghaj
        initMap.put("Gal", R.raw.gal);
        initMap.put("Gam", R.raw.gam);
        initMap.put("Gan", R.raw.gan);
        initMap.put("GaF", R.raw.gaf);
        initMap.put("Gap", R.raw.gap);   // ghap
        initMap.put("Gaq", R.raw.gaq);
        initMap.put("Gar", R.raw.gar);
        initMap.put("GarG", R.raw.garg);   // ghargh
        initMap.put("Gax", R.raw.gax);
        initMap.put("Gaw", R.raw.gaw);
        initMap.put("Gawz", R.raw.gawz);
        initMap.put("Gay", R.raw.gay);
        initMap.put("Gayz", R.raw.gayz);
        initMap.put("Gaz", R.raw.gaz);
        initMap.put("Geb", R.raw.geb);
        initMap.put("GeD", R.raw.ged);
        initMap.put("GeG", R.raw.geg);
        initMap.put("Gel", R.raw.gel);
        initMap.put("Gem", R.raw.gem);
        initMap.put("Ger", R.raw.ger);
        initMap.put("GeS", R.raw.ges);
        initMap.put("Get", R.raw.get);
        initMap.put("Gev", R.raw.gev);
        initMap.put("Gez", R.raw.gez);   // From {ghe''or}.
        initMap.put("GIx", R.raw.gix);   // ghItlh
        initMap.put("Gob", R.raw.gob);
        initMap.put("GoC", R.raw.goc);
        initMap.put("GoD", R.raw.god);   // ghoD
        initMap.put("GoG", R.raw.gog);
        initMap.put("GoH", R.raw.goh);
        initMap.put("Goj", R.raw.goj);   // ghoj
        initMap.put("Gol", R.raw.gol);
        initMap.put("Gom", R.raw.gom);   // ghom
        initMap.put("Gon", R.raw.gon);
        initMap.put("GoF", R.raw.gof);
        initMap.put("Gop", R.raw.gop);   // ghop
        initMap.put("Goq", R.raw.goq);
        initMap.put("GoQ", R.raw.gok);
        initMap.put("Gor", R.raw.gor);   // ghor
        initMap.put("GorG", R.raw.gorg);   // ghorgh
        initMap.put("GoS", R.raw.gos);   // ghoS
        initMap.put("Got", R.raw.got);
        initMap.put("Gov", R.raw.gov);
        initMap.put("Goz", R.raw.goz);

        initMap.put("GuF", R.raw.guf);   // ghung
        initMap.put("Guz", R.raw.guz);   // ghu'

        // --- H ---
        initMap.put("Hab", R.raw.hab);
        initMap.put("HaC", R.raw.hac);
        initMap.put("HaD", R.raw.had);
        initMap.put("HaG", R.raw.hag);   // Hagh
        initMap.put("HaH", R.raw.hah);
        initMap.put("Haj", R.raw.haj);
        initMap.put("Ham", R.raw.ham);   // DavHam, Hamlet
        initMap.put("Han", R.raw.han);
        initMap.put("Hap", R.raw.hap);
        initMap.put("Haq", R.raw.haq);
        initMap.put("HaQ", R.raw.hak);
        initMap.put("Har", R.raw.har);
        initMap.put("HarG", R.raw.harg);
        initMap.put("HaS", R.raw.has);
        initMap.put("Hat", R.raw.hat);
        initMap.put("Hax", R.raw.hax);
        initMap.put("Hawz", R.raw.hawz);
        initMap.put("Hayz", R.raw.hayz);
        initMap.put("Haz", R.raw.haz);   // Ha'
        initMap.put("HeG", R.raw.heg);   // Hegh
        initMap.put("Hey", R.raw.hey);
        initMap.put("HIq", R.raw.hiq);
        initMap.put("HIv", R.raw.hiv);
        initMap.put("HoC", R.raw.hoc);   // Hoch
        initMap.put("HoH", R.raw.hoh);
        initMap.put("HoH", R.raw.hoh);
        initMap.put("Hol", R.raw.hol);
        initMap.put("Hom", R.raw.hom);
        initMap.put("HoS", R.raw.hos);
        initMap.put("Hov", R.raw.hov);
        initMap.put("Hoz", R.raw.hoz);   // Ho'
        initMap.put("HuH", R.raw.huh);
        initMap.put("Hum", R.raw.hum);
        initMap.put("Hut", R.raw.hut);

        // --- j ---
        initMap.put("jaC", R.raw.jac);   // jach
        initMap.put("jaG", R.raw.jag);   // jagh
        initMap.put("jaH", R.raw.jah);   // jaH
        initMap.put("jaj", R.raw.jaj);
        initMap.put("jav", R.raw.jav);
        initMap.put("jax", R.raw.jax);   // jatlh
        initMap.put("jaz", R.raw.jaz);   // ja'
        // je is short
        initMap.put("jeG", R.raw.jeg);   // jegh
        initMap.put("jemS", R.raw.jems);  // From {jemS tIy qIrq}.
        initMap.put("jey", R.raw.jey);
        initMap.put("jez", R.raw.jez);   // je'
        initMap.put("jIb", R.raw.jib);
        initMap.put("jIH", R.raw.jih);
        initMap.put("jon", R.raw.jon);
        initMap.put("joq", R.raw.joq);
        initMap.put("juH", R.raw.juh);   // juH

        // --- l ---
        initMap.put("laH", R.raw.lah);
        initMap.put("laj", R.raw.laj);   // laj
        initMap.put("larG", R.raw.larg);   // From {veqlargh}.
        initMap.put("lawz", R.raw.lawz);  // law'
        initMap.put("lax", R.raw.lax);   // latlh
        initMap.put("layz", R.raw.layz);   // lay'
        initMap.put("laz", R.raw.laz);   // la', or from {Qapla'}.
        initMap.put("leF", R.raw.lef);   // leng
        initMap.put("leG", R.raw.leg);   // legh
        initMap.put("leH", R.raw.leh);
        initMap.put("lIj", R.raw.lij);
        initMap.put("lIS", R.raw.lis);   // From {qeylIS}.
        initMap.put("lIz", R.raw.liz);   // lI'
        initMap.put("loD", R.raw.lod);   // loD
        initMap.put("loj", R.raw.loj);   // From {lojmIt}.
        initMap.put("loS", R.raw.los);
        initMap.put("loz", R.raw.loz);   // lo'
        initMap.put("luS", R.raw.lus);   // From {luspet}.
        initMap.put("luz", R.raw.luz);   // lu'

        // --- m ---
        initMap.put("maC", R.raw.mac);
        initMap.put("maH", R.raw.mah);
        initMap.put("maj", R.raw.maj);
        initMap.put("mayz", R.raw.mayz);   // may'
        initMap.put("maz", R.raw.maz);   // ma'
        initMap.put("meH", R.raw.meh);
        initMap.put("mej", R.raw.mej);
        initMap.put("mev", R.raw.mev);
        initMap.put("mey", R.raw.mey);
        initMap.put("mIt", R.raw.mit);   // From {lojmIt}.
        initMap.put("mIz", R.raw.miz);
        initMap.put("moH", R.raw.moh);
        initMap.put("moj", R.raw.moj);
        initMap.put("moz", R.raw.moz);   // mo'
        initMap.put("muz", R.raw.muz);   // mu'

        // --- n ---
        initMap.put("naj", R.raw.naj);
        initMap.put("naz", R.raw.naz);   // na'
        initMap.put("neH", R.raw.neh);
        initMap.put("neS", R.raw.nes);   // neS
        initMap.put("nex", R.raw.nex);
        initMap.put("nID", R.raw.nid);
        initMap.put("nIH", R.raw.nih);
        initMap.put("nIS", R.raw.nis);
        initMap.put("nob", R.raw.nob);
        initMap.put("noC", R.raw.noc);
        initMap.put("noD", R.raw.nod);
        initMap.put("noG", R.raw.nog);
        initMap.put("noH", R.raw.noh);
        initMap.put("noj", R.raw.noj);
        initMap.put("nol", R.raw.nol);
        initMap.put("nom", R.raw.nom);
        initMap.put("non", R.raw.non);
        initMap.put("noF", R.raw.nof);
        initMap.put("nop", R.raw.nop);
        initMap.put("nor", R.raw.nor);
        initMap.put("norG", R.raw.norg);
        initMap.put("noS", R.raw.nos);   // From {Qo'noS}.
        initMap.put("not", R.raw.not);
        initMap.put("nox", R.raw.nox);
        initMap.put("nov", R.raw.nov);
        initMap.put("noz", R.raw.noz);   // no'

        initMap.put("nuq", R.raw.nuq);

        // --- ng ---
        initMap.put("FaG", R.raw.fag);   // ngagh
        initMap.put("Fan", R.raw.fan);  // From {tlhIngan}, etc.
        initMap.put("FaS", R.raw.fas);   // ngaS
        initMap.put("Fuz", R.raw.fuz);   // ngu'

        // --- p ---
        initMap.put("paG", R.raw.pag);   // pagh
        initMap.put("paw", R.raw.paw);
        initMap.put("paz", R.raw.paz);   // pa'
        initMap.put("peG", R.raw.peg);   // pegh
        initMap.put("pem", R.raw.pem);
        initMap.put("pet", R.raw.pet);   // From {luspet}.
        initMap.put("pIn", R.raw.pin);
        initMap.put("poF", R.raw.pof);
        initMap.put("poS", R.raw.pos);
        initMap.put("puC", R.raw.puc);   // puch
        initMap.put("puq", R.raw.puq);
        initMap.put("puS", R.raw.pus);
        initMap.put("puz", R.raw.puz);   // pu'

        // --- q ---
        initMap.put("qab", R.raw.qab);
        initMap.put("qaD", R.raw.qad);
        initMap.put("qaF", R.raw.qaf);   // qang
        initMap.put("qarD", R.raw.qard);  // From {pIqarD}.
        initMap.put("qaS", R.raw.qas);
        initMap.put("qaw", R.raw.qaw);
        initMap.put("qaz", R.raw.qaz);   // qa'
        initMap.put("qem", R.raw.qem);
        initMap.put("qey", R.raw.qey);   // From {qeylIS}.
        initMap.put("qIm", R.raw.qim);
        initMap.put("qIp", R.raw.qip);
        initMap.put("qIrq", R.raw.qirq);  // From {jemS tIy qIrq}.
        initMap.put("qoH", R.raw.qoh);
        initMap.put("qoj", R.raw.qoj);
        initMap.put("qoq", R.raw.qoq);
        initMap.put("qoS", R.raw.qos);
        initMap.put("qox", R.raw.qox);   // qotlh
        initMap.put("qul", R.raw.qul);
        initMap.put("quv", R.raw.quv);
        initMap.put("quz", R.raw.quz);   // qu'

        // --- Q ---
        initMap.put("QaG", R.raw.kag);   // Qagh
        initMap.put("Qap", R.raw.kap);   // From {Qapla'}.
        initMap.put("Qaz", R.raw.kaz);   // From {majQa'}.
        initMap.put("QIH", R.raw.kih);
        initMap.put("QIt", R.raw.kit);
        initMap.put("Qob", R.raw.kob);
        initMap.put("QoF", R.raw.kof);   // Qong
        initMap.put("Qoy", R.raw.koy);   // Qoy
        initMap.put("Qoz", R.raw.koz);   // Qo'
        initMap.put("QuC", R.raw.kuc);   // Quch
        initMap.put("Qun", R.raw.kun);   // From {chuQun}.
        initMap.put("Quv", R.raw.kuv);

        // --- r ---
        initMap.put("raj", R.raw.raj);
        initMap.put("ram", R.raw.ram);
        initMap.put("raz", R.raw.raz);   // ra'
        initMap.put("reG", R.raw.reg);   // regh
        initMap.put("reH", R.raw.reh);
        initMap.put("ruC", R.raw.ruc);   // ruch
        initMap.put("rup", R.raw.rup);
        initMap.put("rur", R.raw.rur);

        // --- S ---
        initMap.put("SaD", R.raw.sad);
        initMap.put("SaH", R.raw.sah);
        initMap.put("Sayz", R.raw.sayz);   // Say'
        initMap.put("SIQ", R.raw.sik);
        initMap.put("SoC", R.raw.soc);
        initMap.put("SoH", R.raw.soh);
        initMap.put("Soj", R.raw.soj);
        initMap.put("Sop", R.raw.sop);
        initMap.put("SoS", R.raw.sos);
        initMap.put("Sov", R.raw.sov);
        initMap.put("SuD", R.raw.sud);
        initMap.put("Suv", R.raw.suv);

        // --- t ---
        initMap.put("taH", R.raw.tah);
        initMap.put("taj", R.raw.taj);
        initMap.put("tar", R.raw.tar);
        initMap.put("tarG", R.raw.targ);
        initMap.put("tayz", R.raw.tayz);   // tay'
        initMap.put("taz", R.raw.taz);   // ta'
        initMap.put("teb", R.raw.teb);   // From {nIteb}
        initMap.put("tIn", R.raw.tin);
        initMap.put("tIq", R.raw.tiq);
        initMap.put("tIv", R.raw.tiv);
        initMap.put("tIy", R.raw.tiy);  // From {jemS tIy qIrq}.
        initMap.put("toz", R.raw.toz);   // to'
        initMap.put("tuH", R.raw.tuh);
        initMap.put("tuj", R.raw.tuj);
        initMap.put("tup", R.raw.tup);
        initMap.put("turn", R.raw.turn);  // From {Saturn}.
        initMap.put("tuz", R.raw.tuz);

        // --- v ---
        initMap.put("vaD", R.raw.vad);
        initMap.put("vaG", R.raw.vag);
        initMap.put("vaj", R.raw.vaj);
        initMap.put("vam", R.raw.vam);
        initMap.put("van", R.raw.van);
        initMap.put("vav", R.raw.vav);
        initMap.put("vax", R.raw.vax);
        initMap.put("vayz", R.raw.vayz);   // vay'
        initMap.put("veq", R.raw.veq);   // From {veqlargh}.
        initMap.put("vex", R.raw.vex);   // vetlh
        initMap.put("vIH", R.raw.vih);
        initMap.put("vIp", R.raw.vip);
        initMap.put("vIS", R.raw.vis);
        initMap.put("vIz", R.raw.viz);   // From {DIvI'}.
        initMap.put("voG", R.raw.vog);   // vogh
        initMap.put("voz", R.raw.voz);   // vo'

        // --- w ---
        initMap.put("waz", R.raw.waz);
        initMap.put("wej", R.raw.wej);
        initMap.put("wIj", R.raw.wij);
        initMap.put("wIz", R.raw.wiz);   // wI'
        initMap.put("woz", R.raw.woz);   // wo'

        // --- x ---
        initMap.put("xab", R.raw.xab);
        initMap.put("xaC", R.raw.xac);
        initMap.put("xaG", R.raw.xag);
        initMap.put("xam", R.raw.xam);
        initMap.put("xap", R.raw.xap);   // tlhap
        initMap.put("xaq", R.raw.xaq);
        initMap.put("xaQ", R.raw.xak);
        initMap.put("xarG", R.raw.xarg);
        initMap.put("xaS", R.raw.xas);
        initMap.put("xax", R.raw.xax);
        initMap.put("xay", R.raw.xay);
        initMap.put("xawz", R.raw.xawz);
        initMap.put("xed", R.raw.xed);
        initMap.put("xeG", R.raw.xeg);   // tlhegh
        initMap.put("xej", R.raw.xej);
        initMap.put("xeF", R.raw.xef);
        initMap.put("xep", R.raw.xep);
        initMap.put("xer", R.raw.xer);
        initMap.put("xex", R.raw.xex);
        initMap.put("xev", R.raw.xev);
        initMap.put("xez", R.raw.xez);
        initMap.put("xIb", R.raw.xib);
        initMap.put("xIC", R.raw.xic);
        initMap.put("xIG", R.raw.xig);
        initMap.put("xIH", R.raw.xih);
        initMap.put("xIj", R.raw.xij);
        initMap.put("xIl", R.raw.xil);
        initMap.put("xIm", R.raw.xim);
        initMap.put("xIn", R.raw.xin);
        initMap.put("xIF", R.raw.xif);
        initMap.put("xIq", R.raw.xiq);
        initMap.put("xIS", R.raw.xis);
        initMap.put("xIv", R.raw.xiv);
        initMap.put("xIz", R.raw.xiz);
        initMap.put("xuC", R.raw.xuc);
        initMap.put("xuD", R.raw.xud);
        initMap.put("xuH", R.raw.xuh);
        initMap.put("xup", R.raw.xup);
        initMap.put("xuQ", R.raw.xuk);
        initMap.put("xux", R.raw.xux);   // tlhutlh
        initMap.put("xuz", R.raw.xuz);

        // --- y ---
        initMap.put("yab", R.raw.yab);
        initMap.put("yaC", R.raw.yac);
        initMap.put("yaD", R.raw.yad);
        initMap.put("yaG", R.raw.yag);
        initMap.put("yaH", R.raw.yah);
        initMap.put("yaj", R.raw.yaj);
        initMap.put("yan", R.raw.yan);
        initMap.put("yap", R.raw.yap);
        initMap.put("yaS", R.raw.yas);
        initMap.put("yat", R.raw.yat);
        initMap.put("yav", R.raw.yav);
        initMap.put("yax", R.raw.yax);
        initMap.put("yay", R.raw.yay);
        initMap.put("yayz", R.raw.yayz);
        initMap.put("yeb", R.raw.yeb);
        initMap.put("yej", R.raw.yej);
        initMap.put("yem", R.raw.yem);
        initMap.put("yep", R.raw.yep);
        initMap.put("yeq", R.raw.yeq);
        initMap.put("yer", R.raw.yer);
        initMap.put("yev", R.raw.yev);
        initMap.put("yIb", R.raw.yib);
        initMap.put("yIC", R.raw.yic);
        initMap.put("yID", R.raw.yid);
        initMap.put("yIH", R.raw.yih);
        initMap.put("yIn", R.raw.yin);
        initMap.put("yIQ", R.raw.yik);
        initMap.put("yIr", R.raw.yir);
        initMap.put("yIS", R.raw.yis);
        initMap.put("yIt", R.raw.yit);
        initMap.put("yIv", R.raw.yiv);
        initMap.put("yIz", R.raw.yiz);
        initMap.put("yob", R.raw.yob);
        initMap.put("yoD", R.raw.yod);
        initMap.put("yoH", R.raw.yoh);
        initMap.put("yoj", R.raw.yoj);
        initMap.put("yol", R.raw.yol);
        initMap.put("yon", R.raw.yon);
        initMap.put("yoF", R.raw.yof);
        initMap.put("yop", R.raw.yop);
        initMap.put("yoq", R.raw.yoq);
        initMap.put("yor", R.raw.yor);
        initMap.put("yoS", R.raw.yos);
        initMap.put("yot", R.raw.yot);
        initMap.put("yox", R.raw.yox);
        initMap.put("yov", R.raw.yov);
        initMap.put("yoy", R.raw.yoy);
        initMap.put("yoz", R.raw.yoz);
        initMap.put("yub", R.raw.yub);
        initMap.put("yuC", R.raw.yuc);
        initMap.put("yuD", R.raw.yud);
        initMap.put("yup", R.raw.yup);
        initMap.put("yuQ", R.raw.yuk);
        initMap.put("yur", R.raw.yur);
        initMap.put("yuv", R.raw.yuv);
        initMap.put("yuz", R.raw.yuz);

        // --- z ---
        initMap.put("zab", R.raw.zab);
        initMap.put("zaC", R.raw.zac);
        initMap.put("zaD", R.raw.zad);
        initMap.put("zaG", R.raw.zag);
        initMap.put("zaH", R.raw.zah);
        initMap.put("zaj", R.raw.zaj);
        initMap.put("zal", R.raw.zal);
        initMap.put("zam", R.raw.zam);
        initMap.put("zan", R.raw.zan);
        initMap.put("zaF", R.raw.zaf);   // 'ang
        initMap.put("zap", R.raw.zap);
        initMap.put("zaq", R.raw.zaq);
        initMap.put("zaQ", R.raw.zak);
        initMap.put("zar", R.raw.zar);
        initMap.put("zarG", R.raw.zarg);
        initMap.put("zaS", R.raw.zas);
        initMap.put("zat", R.raw.zat);
        initMap.put("zav", R.raw.zav);   // 'av
        initMap.put("zaw", R.raw.zaw);
        initMap.put("zawz", R.raw.zawz);
        initMap.put("zax", R.raw.zax);
        initMap.put("zayz", R.raw.zayz);
        initMap.put("zaz", R.raw.zaz);

        initMap.put("zeb", R.raw.zeb);   // 'eb
        initMap.put("zeC", R.raw.zec);
        initMap.put("zeD", R.raw.zed);
        initMap.put("zeG", R.raw.zeg);   // 'egh
        initMap.put("zeH", R.raw.zeh);
        initMap.put("zej", R.raw.zej);   // 'ej
        initMap.put("zel", R.raw.zel);
        initMap.put("zem", R.raw.zem);
        initMap.put("zeF", R.raw.zef);
        initMap.put("zep", R.raw.zep);
        initMap.put("zeq", R.raw.zeq);
        initMap.put("zeQ", R.raw.zek);
        initMap.put("zer", R.raw.zer);
        initMap.put("zeS", R.raw.zes);
        initMap.put("zet", R.raw.zet);
        initMap.put("zex", R.raw.zex);
        initMap.put("zev", R.raw.zev);
        initMap.put("zey", R.raw.zey);
        initMap.put("zez", R.raw.zez);   // 'e'

        initMap.put("zIb", R.raw.zib);
        initMap.put("zIg", R.raw.zig);
        initMap.put("zIH", R.raw.zih);
        initMap.put("zIj", R.raw.zij);
        initMap.put("zIl", R.raw.zil);
        initMap.put("zIm", R.raw.zim);
        initMap.put("zIn", R.raw.zin);
        initMap.put("zIp", R.raw.zip);
        initMap.put("zIq", R.raw.ziq);
        initMap.put("zIQ", R.raw.zik);
        initMap.put("zIr", R.raw.zir);
        initMap.put("zIS", R.raw.zis);
        initMap.put("zIt", R.raw.zit);
        initMap.put("zIx", R.raw.zix);
        initMap.put("zIv", R.raw.ziv);
        initMap.put("zIz", R.raw.ziz);

        initMap.put("zIw", R.raw.ziw);
        initMap.put("zob", R.raw.zob);
        initMap.put("zoC", R.raw.zoc);
        initMap.put("zoD", R.raw.zod);
        initMap.put("zoG", R.raw.zog);
        initMap.put("zoH", R.raw.zoh);
        initMap.put("zoj", R.raw.zoj);   // 'oj
        initMap.put("zol", R.raw.zol);
        initMap.put("zom", R.raw.zom);
        initMap.put("zof", R.raw.zof);
        initMap.put("zop", R.raw.zop);
        initMap.put("zoQ", R.raw.zok);
        initMap.put("zor", R.raw.zor);   // From {ghe''or}.
        initMap.put("zoS", R.raw.zos);
        initMap.put("zov", R.raw.zov);
        initMap.put("zox", R.raw.zox);
        initMap.put("zoyz", R.raw.zoyz);
        initMap.put("zoz", R.raw.zoz);
        initMap.put("zuC", R.raw.zuc);
        initMap.put("zuD", R.raw.zud);
        initMap.put("zuG", R.raw.zug);
        initMap.put("zuH", R.raw.zuh);
        initMap.put("zuj", R.raw.zuj);
        initMap.put("zul", R.raw.zul);
        initMap.put("zum", R.raw.zum);
        initMap.put("zun", R.raw.zun);
        initMap.put("zup", R.raw.zup);
        initMap.put("zuQ", R.raw.zuk);   // 'uQ
        initMap.put("zur", R.raw.zur);
        initMap.put("zuS", R.raw.zus);   // 'uS
        initMap.put("zut", R.raw.zut);
        initMap.put("zux", R.raw.zux);
        initMap.put("zuy", R.raw.zuy);
        initMap.put("zuyz", R.raw.zuyz);<commit_msg>possibly sorted<commit_after>/*
 * Copyright (C) 2014 <NAME> (<NAME>)
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.tlhInganHol.android.klingonttsengine;

import android.content.Context;
import android.media.AudioFormat;
import android.media.MediaPlayer;
import android.speech.tts.SynthesisCallback;
import android.speech.tts.SynthesisRequest;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeechService;
import android.util.Log;

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

/**
 * A text to speech engine that generates Klingon speech.
 * The engine supports two different Klingon voices.
 *
 * It exercises all aspects of the Text to speech engine API
 * {@link android.speech.tts.TextToSpeechService}.
 */
public class KlingonSpeakTtsService extends TextToSpeechService implements android.media.MediaPlayer.OnCompletionListener {
    private static final String TAG = "KlingonSpeakTtsService";

    // The media player object used to play the sounds.
    private MediaPlayer mMediaPlayer = null;

    private volatile String[] mCurrentLanguage = null;
    private volatile boolean mStopRequested = false;

    // This map contains the front half of full syllables.
    private static final Map<String, Integer> FRONT_HALF_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();

        // THIS IS AUTOGENERATED CODE. DO NOT EDIT BELOW THIS LINE.
        // BEGIN: FRONT_HALF_SYLLABLE_TO_AUDIO_MAP
        initMap.put("bI-", R.raw.bi0);
        initMap.put("bo-", R.raw.bo0);
        initMap.put("Ce-", R.raw.ce0);
        initMap.put("CI-", R.raw.ci0);
        initMap.put("Co-", R.raw.co0);
        initMap.put("Cu-", R.raw.cu0);
        initMap.put("Da-", R.raw.da0);
        initMap.put("DI-", R.raw.di0);
        initMap.put("Do-", R.raw.do0);
        initMap.put("Du-", R.raw.du0);
        initMap.put("Go-", R.raw.go0);
        initMap.put("HI-", R.raw.hi0);
        initMap.put("jI-", R.raw.ji0);
        initMap.put("ju-", R.raw.ju0);
        initMap.put("lI-", R.raw.li0);
        initMap.put("lu-", R.raw.lu0);
        initMap.put("ma-", R.raw.ma0);
        initMap.put("mu-", R.raw.mu0);
        initMap.put("na-", R.raw.na0);  // From {naDev}.
        initMap.put("nI-", R.raw.ni0);
        initMap.put("nu-", R.raw.nu0);
        initMap.put("pe-", R.raw.pe0);
        initMap.put("pI-", R.raw.pi0);
        initMap.put("qa-", R.raw.qa0);
        initMap.put("re-", R.raw.re0);
        initMap.put("Sa-", R.raw.sa0);
        initMap.put("Su-", R.raw.su0);
        initMap.put("te-", R.raw.te0);  // From {tera'ngan}.
        initMap.put("tI-", R.raw.ti0);
        initMap.put("tu-", R.raw.tu0);
        initMap.put("vI-", R.raw.vi0);
        initMap.put("wI-", R.raw.wi0);
        initMap.put("xa-", R.raw.xa0);
        initMap.put("xI-", R.raw.xi0);  // From {tlhIngan}.
        initMap.put("ya-", R.raw.ya0);
        initMap.put("yI-", R.raw.yi0);
        initMap.put("za-", R.raw.za0);
        // END: FRONT_HALF_SYLLABLE_TO_AUDIO_MAP
        // THIS IS AUTOGENERATED CODE. DO NOT EDIT ABOVE THIS LINE.

        FRONT_HALF_SYLLABLE_TO_AUDIO_MAP = Collections.unmodifiableMap(initMap);
    }

    // This map contains short syllables, i.e., those of the form CV.
    // Unlike for the corresponding front half of a full syllable, the audio for a short syllable
    // doesn't end abruptly. For example, "Da-" (a front half syllable) is the prefix for "you-it",
    // whereas "Da" (a short syllable) is the verb for "behave as".
    private static final Map<String, Integer> SHORT_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();
        // bo, cha, Da, DI, Do, gho, ghu, He, Hu, ja, je, jo, lu, po, QI, ra, ro, So, ta, tI, va, ya, yu, 'a, 'o

        // THIS IS AUTOGENERATED CODE. DO NOT EDIT BELOW THIS LINE.
        // BEGIN: SHORT_SYLLABLE_TO_AUDIO_MAP
        initMap.put("bo", R.raw.bo);
        initMap.put("Ca", R.raw.ca);
        initMap.put("DI", R.raw.di);
        initMap.put("Da", R.raw.da);
        initMap.put("Do", R.raw.do_);  // Can't use "do" because it's a Java keyword!
        initMap.put("Go", R.raw.go);
        initMap.put("je", R.raw.je);
        initMap.put("no", R.raw.no);
        initMap.put("ya", R.raw.ya);
        initMap.put("yu", R.raw.yu);
        initMap.put("za", R.raw.za);
        initMap.put("zo", R.raw.zo);
        // END: SHORT_SYLLABLE_TO_AUDIO_MAP
        // THIS IS AUTOGENERATED CODE. DO NOT EDIT ABOVE THIS LINE.

        SHORT_SYLLABLE_TO_AUDIO_MAP = Collections.unmodifiableMap(initMap);
    }

    // This map contains the back half of full syllables. It is preferable to avoid constructing
    // syllables by concatenating the front and back parts, as there is a noticeable discontinuity
    // in the audio if the vowel sound is not perfectly matched.
    private static final Map<String, Integer> BACK_HALF_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();
        // -a, -e, -I, -o, -u

        BACK_HALF_SYLLABLE_TO_AUDIO_MAP = Collections.unmodifiableMap(initMap);
    }

    // This map contains full syllables, i.e., those of the form CVC, CVrgh, or CV[wy]'.
    private static final Map<String, Integer> MAIN_SYLLABLE_TO_AUDIO_MAP;
    static {
        Map<String, Integer> initMap = new HashMap<String, Integer>();

        // THIS IS AUTOGENERATED CODE. DO NOT EDIT BELOW THIS LINE.
        // BEGIN: MAIN_SYLLABLE_TO_AUDIO_MAP

        initMap.put("baC", R.raw.bac);
        initMap.put("baF", R.raw.baf);
        initMap.put("baG", R.raw.bag);
        initMap.put("baH", R.raw.bah);
        initMap.put("baj", R.raw.baj);
        initMap.put("bal", R.raw.bal);
        initMap.put("bam", R.raw.bam);
        initMap.put("baQ", R.raw.bak);
        initMap.put("baq", R.raw.baq);
        initMap.put("barG", R.raw.barg);
        initMap.put("bar", R.raw.bar);
        initMap.put("baS", R.raw.bas);
        initMap.put("bav", R.raw.bav);
        initMap.put("bax", R.raw.bax);
        initMap.put("baz", R.raw.baz);   // ba'
        initMap.put("beb", R.raw.beb);
        initMap.put("beC", R.raw.bec);
        initMap.put("beG", R.raw.beg);
        initMap.put("beH", R.raw.beh);
        initMap.put("bej", R.raw.bej);
        initMap.put("bel", R.raw.bel);
        initMap.put("bem", R.raw.bem);
        initMap.put("ben", R.raw.ben);
        initMap.put("bep", R.raw.bep);
        initMap.put("beQ", R.raw.bek);
        initMap.put("beq", R.raw.beq);
        initMap.put("berG", R.raw.berg);
        initMap.put("ber", R.raw.ber);
        initMap.put("bet", R.raw.bet);
        initMap.put("bey", R.raw.bey);
        initMap.put("bez", R.raw.bez);   // be'
        initMap.put("bID", R.raw.bid);
        initMap.put("bIF", R.raw.bif);
        initMap.put("bIG", R.raw.big);
        initMap.put("bIH", R.raw.bih);
        initMap.put("bIj", R.raw.bij);
        initMap.put("bIl", R.raw.bil);
        initMap.put("bIm", R.raw.bim);
        initMap.put("bIp", R.raw.bip);
        initMap.put("bIQ", R.raw.bik);
        initMap.put("bIr", R.raw.bir);
        initMap.put("bIS", R.raw.bis);
        initMap.put("bIt", R.raw.bit);
        initMap.put("bIv", R.raw.biv);
        initMap.put("bIz", R.raw.biz);
        initMap.put("bob", R.raw.bob);
        initMap.put("boC", R.raw.boc);
        initMap.put("boD", R.raw.bod);
        initMap.put("boF", R.raw.bof);
        initMap.put("boG", R.raw.bog);   // bogh
        initMap.put("boH", R.raw.boh);
        initMap.put("boj", R.raw.boj);
        initMap.put("bol", R.raw.bol);
        initMap.put("bom", R.raw.bom);
        initMap.put("bop", R.raw.bop);
        initMap.put("boQ", R.raw.bok);
        initMap.put("boq", R.raw.boq);
        initMap.put("bor", R.raw.bor);
        initMap.put("boS", R.raw.bos);
        initMap.put("bot", R.raw.bot);
        initMap.put("bov", R.raw.bov);
        initMap.put("box", R.raw.box);
        initMap.put("buD", R.raw.bud);
        initMap.put("buH", R.raw.buh);
        initMap.put("bup", R.raw.bup);
        initMap.put("buQ", R.raw.buk);
        initMap.put("buq", R.raw.buq);
        initMap.put("burG", R.raw.burg);
        initMap.put("bur", R.raw.bur);
        initMap.put("buS", R.raw.bus);
        initMap.put("buv", R.raw.buv);
        initMap.put("bux", R.raw.bux);
        initMap.put("buyz", R.raw.buyz);
        initMap.put("Cab", R.raw.cab);
        initMap.put("CaC", R.raw.cac);
        initMap.put("CaD", R.raw.cad);
        initMap.put("CaF", R.raw.caf);
        initMap.put("CaG", R.raw.cag);
        initMap.put("CaH", R.raw.cah);
        initMap.put("Caj", R.raw.caj);   // chaj
        initMap.put("Cal", R.raw.cal);
        initMap.put("Cam", R.raw.cam);
        initMap.put("Can", R.raw.can);
        initMap.put("Cap", R.raw.cap);   // chaq
        initMap.put("CaQ", R.raw.cak);
        initMap.put("Caq", R.raw.caq);   // chaq
        initMap.put("CarG", R.raw.carg);
        initMap.put("Car", R.raw.car);
        initMap.put("CaS", R.raw.cas);
        initMap.put("Cav", R.raw.cav);
        initMap.put("Cawz", R.raw.cawz);
        initMap.put("Cax", R.raw.cax);
        initMap.put("Cayz", R.raw.cayz);
        initMap.put("Caz", R.raw.caz);
        initMap.put("Ceb", R.raw.ceb);
        initMap.put("CeC", R.raw.cec);
        initMap.put("CeF", R.raw.cef);  // cheng
        initMap.put("CeG", R.raw.ceg);
        initMap.put("CeH", R.raw.ceh);
        initMap.put("Cej", R.raw.cej);
        initMap.put("Cel", R.raw.cel);
        initMap.put("Cem", R.raw.cem);
        initMap.put("Cen", R.raw.cen);
        initMap.put("Cep", R.raw.cep);
        // initMap.put("CeQ", R.raw.cek);
        // initMap.put("Ceq", R.raw.ceq);
        initMap.put("CerG", R.raw.cerg);
        initMap.put("Cer", R.raw.cer);
        initMap.put("CeS", R.raw.ces);
        initMap.put("Cet", R.raw.cet);
        initMap.put("Cev", R.raw.cev);
        // initMap.put("Cey", R.raw.cey);
        initMap.put("Cez", R.raw.cez);
        initMap.put("CIC", R.raw.cic);
        initMap.put("CID", R.raw.cid);
        // initMap.put("CIF", R.raw.cif);
        // initMap.put("CIG", R.raw.cig);
        // initMap.put("CIH", R.raw.cih);
        initMap.put("CIj", R.raw.cij);
        initMap.put("CIl", R.raw.cil);
        initMap.put("CIm", R.raw.cim);
        initMap.put("CIn", R.raw.cin);
        initMap.put("CIp", R.raw.cip);
        // initMap.put("CIQ", R.raw.cik);
        initMap.put("CIrg", R.raw.cirg);
        // initMap.put("CIr", R.raw.cir);
        initMap.put("CIS", R.raw.cis);
        // initMap.put("CIt", R.raw.cit);
        initMap.put("CIv", R.raw.civ);
        initMap.put("CIw", R.raw.ciw);
        initMap.put("CIz", R.raw.ciz);
        initMap.put("Cob", R.raw.cob);
        // initMap.put("CoC", R.raw.coc);
        // initMap.put("CoD", R.raw.cod);
        initMap.put("CoF", R.raw.cof);
        initMap.put("CoG", R.raw.cog);
        initMap.put("CoH", R.raw.coh);  // choH
        // initMap.put("Coj", R.raw.coj);
        initMap.put("Col", R.raw.col);
        initMap.put("Com", R.raw.com);
        initMap.put("Con", R.raw.con);
        initMap.put("Cop", R.raw.cop);
        initMap.put("CoQ", R.raw.cok);
        initMap.put("Coq", R.raw.coq);
        initMap.put("CorG", R.raw.corg);
        initMap.put("Cor", R.raw.cor);
        initMap.put("CoS", R.raw.cos);
        initMap.put("Cot", R.raw.cot);
        initMap.put("Cov", R.raw.cov);
        // initMap.put("Cox", R.raw.cox);
        initMap.put("Coz", R.raw.coz);
        initMap.put("CuC", R.raw.cuc);
        initMap.put("CuD", R.raw.cud);
        initMap.put("CuF", R.raw.cuf);
        initMap.put("CuG", R.raw.cug);  // chugh
        initMap.put("CuH", R.raw.cuh);
        initMap.put("Cun", R.raw.cun);
        initMap.put("Cup", R.raw.cup);
        // initMap.put("CuQ", R.raw.cuk);
        initMap.put("Cuq", R.raw.cuq);  // chuq
        // initMap.put("CurG", R.raw.curg);
        // initMap.put("Cur", R.raw.cur);
        initMap.put("CuS", R.raw.cus);
        initMap.put("Cut", R.raw.cut);
        initMap.put("Cuv", R.raw.cuv);
        // initMap.put("Cux", R.raw.cux);
        initMap.put("Cuy", R.raw.cuy);
        // initMap.put("Cuyz", R.raw.cuyz);
        initMap.put("Cuz", R.raw.cuz);  // chu'
        initMap.put("Dab", R.raw.dab);
        initMap.put("Dac", R.raw.dac);
        initMap.put("Dag", R.raw.dag);
        initMap.put("DaH", R.raw.dah);
        initMap.put("Daj", R.raw.daj);
        initMap.put("Dal", R.raw.dal);
        initMap.put("Dan", R.raw.dan);
        initMap.put("Dap", R.raw.dap);
        initMap.put("DaQ", R.raw.dak);
        initMap.put("Daq", R.raw.daq);
        initMap.put("Darg", R.raw.darg);
        initMap.put("DaS", R.raw.das);
        initMap.put("Dat", R.raw.dat);
        initMap.put("Dav", R.raw.dav);
        initMap.put("Dawz", R.raw.dawz);  // Daw'
        initMap.put("Day", R.raw.day);
        initMap.put("Daz", R.raw.daz);
        initMap.put("Deb", R.raw.deb);
        initMap.put("DeC", R.raw.dec);  // Dech
        initMap.put("Deg", R.raw.deg);
        initMap.put("DeH", R.raw.deh);
        initMap.put("Dej", R.raw.dej);
        initMap.put("Del", R.raw.del);
        initMap.put("Den", R.raw.den);
        initMap.put("Dep", R.raw.dep);
        initMap.put("DeQ", R.raw.dek);
        initMap.put("Deq", R.raw.deq);
        initMap.put("Der", R.raw.der);
        initMap.put("DeS", R.raw.des);
        initMap.put("Dev", R.raw.dev);
        initMap.put("Dez", R.raw.dez);   // De'
        initMap.put("DIb", R.raw.dib);
        initMap.put("DIc", R.raw.dic);
        initMap.put("DIF", R.raw.dif);
        initMap.put("DIg", R.raw.dig);
        initMap.put("DIj", R.raw.dij);
        initMap.put("DIl", R.raw.dil);
        initMap.put("DIn", R.raw.din);
        initMap.put("DIp", R.raw.dip);
        initMap.put("DIr", R.raw.dir);
        initMap.put("DIS", R.raw.dis);
        initMap.put("DIv", R.raw.div);
        initMap.put("DIz", R.raw.diz);  // DI'
        initMap.put("DoC", R.raw.doc);   // Doch
        initMap.put("DoD", R.raw.dod);
        initMap.put("DoG", R.raw.dog);   // Dogh
        initMap.put("DoH", R.raw.doh);
        initMap.put("Doj", R.raw.doj);
        initMap.put("Dol", R.raw.dol);
        initMap.put("Dom", R.raw.dom);
        initMap.put("Don", R.raw.don);
        initMap.put("Dop", R.raw.dop);
        initMap.put("DoQ", R.raw.dok);
        initMap.put("Doq", R.raw.doq);
        initMap.put("Dor", R.raw.dor);
        initMap.put("DoS", R.raw.dos);
        initMap.put("Dov", R.raw.dov);
        initMap.put("Dox", R.raw.dox);
        initMap.put("Doyz", R.raw.doyz);   // Doy'
        initMap.put("Doz", R.raw.doz);   // Do'
        initMap.put("Duj", R.raw.duj);
        initMap.put("DuQ", R.raw.duk);   // DuQ
        initMap.put("Duz", R.raw.duz);   // Du'
        initMap.put("FaG", R.raw.fag);   // ngagh
        initMap.put("Fan", R.raw.fan);  // From {tlhIngan}, etc.
        initMap.put("FaS", R.raw.fas);   // ngaS
        initMap.put("Fuz", R.raw.fuz);   // ngu'
        initMap.put("Gab", R.raw.gab);
        initMap.put("GaC", R.raw.gac);   // ghach
        initMap.put("GaF", R.raw.gaf);
        initMap.put("GaG", R.raw.gag);
        initMap.put("GaH", R.raw.gah);
        initMap.put("Gaj", R.raw.gaj);   // ghaj
        initMap.put("Gal", R.raw.gal);
        initMap.put("Gam", R.raw.gam);
        initMap.put("Gan", R.raw.gan);
        initMap.put("Gap", R.raw.gap);   // ghap
        initMap.put("Gaq", R.raw.gaq);
        initMap.put("GarG", R.raw.garg);   // ghargh
        initMap.put("Gar", R.raw.gar);
        initMap.put("Gaw", R.raw.gaw);
        initMap.put("Gawz", R.raw.gawz);
        initMap.put("Gax", R.raw.gax);
        initMap.put("Gay", R.raw.gay);
        initMap.put("Gayz", R.raw.gayz);
        initMap.put("Gaz", R.raw.gaz);
        initMap.put("Geb", R.raw.geb);
        initMap.put("GeD", R.raw.ged);
        initMap.put("GeG", R.raw.geg);
        initMap.put("Gel", R.raw.gel);
        initMap.put("Gem", R.raw.gem);
        initMap.put("Ger", R.raw.ger);
        initMap.put("GeS", R.raw.ges);
        initMap.put("Get", R.raw.get);
        initMap.put("Gev", R.raw.gev);
        initMap.put("Gez", R.raw.gez);   // From {ghe''or}.
        initMap.put("GIx", R.raw.gix);   // ghItlh
        initMap.put("Gob", R.raw.gob);
        initMap.put("GoC", R.raw.goc);
        initMap.put("GoD", R.raw.god);   // ghoD
        initMap.put("GoF", R.raw.gof);
        initMap.put("GoG", R.raw.gog);
        initMap.put("GoH", R.raw.goh);
        initMap.put("Goj", R.raw.goj);   // ghoj
        initMap.put("Gol", R.raw.gol);
        initMap.put("Gom", R.raw.gom);   // ghom
        initMap.put("Gon", R.raw.gon);
        initMap.put("Gop", R.raw.gop);   // ghop
        initMap.put("GoQ", R.raw.gok);
        initMap.put("Goq", R.raw.goq);
        initMap.put("GorG", R.raw.gorg);   // ghorgh
        initMap.put("Gor", R.raw.gor);   // ghor
        initMap.put("GoS", R.raw.gos);   // ghoS
        initMap.put("Got", R.raw.got);
        initMap.put("Gov", R.raw.gov);
        initMap.put("Goz", R.raw.goz);
        initMap.put("GuF", R.raw.guf);   // ghung
        initMap.put("Guz", R.raw.guz);   // ghu'
        initMap.put("Hab", R.raw.hab);
        initMap.put("HaC", R.raw.hac);
        initMap.put("HaD", R.raw.had);
        initMap.put("HaG", R.raw.hag);   // Hagh
        initMap.put("HaH", R.raw.hah);
        initMap.put("Haj", R.raw.haj);
        initMap.put("Ham", R.raw.ham);   // DavHam, Hamlet
        initMap.put("Han", R.raw.han);
        initMap.put("Hap", R.raw.hap);
        initMap.put("HaQ", R.raw.hak);
        initMap.put("Haq", R.raw.haq);
        initMap.put("HarG", R.raw.harg);
        initMap.put("Har", R.raw.har);
        initMap.put("HaS", R.raw.has);
        initMap.put("Hat", R.raw.hat);
        initMap.put("Hawz", R.raw.hawz);
        initMap.put("Hax", R.raw.hax);
        initMap.put("Hayz", R.raw.hayz);
        initMap.put("Haz", R.raw.haz);   // Ha'
        initMap.put("HeG", R.raw.heg);   // Hegh
        initMap.put("Hey", R.raw.hey);
        initMap.put("HIq", R.raw.hiq);
        initMap.put("HIv", R.raw.hiv);
        initMap.put("HoC", R.raw.hoc);   // Hoch
        initMap.put("HoH", R.raw.hoh);
        initMap.put("HoH", R.raw.hoh);
        initMap.put("Hol", R.raw.hol);
        initMap.put("Hom", R.raw.hom);
        initMap.put("HoS", R.raw.hos);
        initMap.put("Hov", R.raw.hov);
        initMap.put("Hoz", R.raw.hoz);   // Ho'
        initMap.put("HuH", R.raw.huh);
        initMap.put("Hum", R.raw.hum);
        initMap.put("Hut", R.raw.hut);
        initMap.put("jaC", R.raw.jac);   // jach
        initMap.put("jaG", R.raw.jag);   // jagh
        initMap.put("jaH", R.raw.jah);   // jaH
        initMap.put("jaj", R.raw.jaj);
        initMap.put("jav", R.raw.jav);
        initMap.put("jax", R.raw.jax);   // jatlh
        initMap.put("jaz", R.raw.jaz);   // ja'
        initMap.put("jeG", R.raw.jeg);   // jegh
        initMap.put("jemS", R.raw.jems);  // From {jemS tIy qIrq}.
        initMap.put("jey", R.raw.jey);
        initMap.put("jez", R.raw.jez);   // je'
        initMap.put("jIb", R.raw.jib);
        initMap.put("jIH", R.raw.jih);
        initMap.put("jon", R.raw.jon);
        initMap.put("joq", R.raw.joq);
        initMap.put("juH", R.raw.juh);   // juH
        initMap.put("laH", R.raw.lah);
        initMap.put("laj", R.raw.laj);   // laj
        initMap.put("larG", R.raw.larg);   // From {veqlargh}.
        initMap.put("lawz", R.raw.lawz);  // law'
        initMap.put("lax", R.raw.lax);   // latlh
        initMap.put("layz", R.raw.layz);   // lay'
        initMap.put("laz", R.raw.laz);   // la', or from {Qapla'}.
        initMap.put("leF", R.raw.lef);   // leng
        initMap.put("leG", R.raw.leg);   // legh
        initMap.put("leH", R.raw.leh);
        initMap.put("lIj", R.raw.lij);
        initMap.put("lIS", R.raw.lis);   // From {qeylIS}.
        initMap.put("lIz", R.raw.liz);   // lI'
        initMap.put("loD", R.raw.lod);   // loD
        initMap.put("loj", R.raw.loj);   // From {lojmIt}.
        initMap.put("loS", R.raw.los);
        initMap.put("loz", R.raw.loz);   // lo'
        initMap.put("luS", R.raw.lus);   // From {luspet}.
        initMap.put("luz", R.raw.luz);   // lu'
        initMap.put("maC", R.raw.mac);
        initMap.put("maH", R.raw.mah);
        initMap.put("maj", R.raw.maj);
        initMap.put("mayz", R.raw.mayz);   // may'
        initMap.put("maz", R.raw.maz);   // ma'
        initMap.put("meH", R.raw.meh);
        initMap.put("mej", R.raw.mej);
        initMap.put("mev", R.raw.mev);
        initMap.put("mey", R.raw.mey);
        initMap.put("mIt", R.raw.mit);   // From {lojmIt}.
        initMap.put("mIz", R.raw.miz);
        initMap.put("moH", R.raw.moh);
        initMap.put("moj", R.raw.moj);
        initMap.put("moz", R.raw.moz);   // mo'
        initMap.put("muz", R.raw.muz);   // mu'
        initMap.put("naj", R.raw.naj);
        initMap.put("naz", R.raw.naz);   // na'
        initMap.put("neH", R.raw.neh);
        initMap.put("neS", R.raw.nes);   // neS
        initMap.put("nex", R.raw.nex);
        initMap.put("nID", R.raw.nid);
        initMap.put("nIH", R.raw.nih);
        initMap.put("nIS", R.raw.nis);
        initMap.put("nob", R.raw.nob);
        initMap.put("noC", R.raw.noc);
        initMap.put("noD", R.raw.nod);
        initMap.put("noF", R.raw.nof);
        initMap.put("noG", R.raw.nog);
        initMap.put("noH", R.raw.noh);
        initMap.put("noj", R.raw.noj);
        initMap.put("nol", R.raw.nol);
        initMap.put("nom", R.raw.nom);
        initMap.put("non", R.raw.non);
        initMap.put("nop", R.raw.nop);
        initMap.put("norG", R.raw.norg);
        initMap.put("nor", R.raw.nor);
        initMap.put("noS", R.raw.nos);   // From {Qo'noS}.
        initMap.put("not", R.raw.not);
        initMap.put("nov", R.raw.nov);
        initMap.put("nox", R.raw.nox);
        initMap.put("noz", R.raw.noz);   // no'
        initMap.put("nuq", R.raw.nuq);
        initMap.put("paG", R.raw.pag);   // pagh
        initMap.put("paw", R.raw.paw);
        initMap.put("paz", R.raw.paz);   // pa'
        initMap.put("peG", R.raw.peg);   // pegh
        initMap.put("pem", R.raw.pem);
        initMap.put("pet", R.raw.pet);   // From {luspet}.
        initMap.put("pIn", R.raw.pin);
        initMap.put("poF", R.raw.pof);
        initMap.put("poS", R.raw.pos);
        initMap.put("puC", R.raw.puc);   // puch
        initMap.put("puq", R.raw.puq);
        initMap.put("puS", R.raw.pus);
        initMap.put("puz", R.raw.puz);   // pu'
        initMap.put("qab", R.raw.qab);
        initMap.put("qaD", R.raw.qad);
        initMap.put("qaF", R.raw.qaf);   // qang
        initMap.put("QaG", R.raw.kag);   // Qagh
        initMap.put("Qap", R.raw.kap);   // From {Qapla'}.
        initMap.put("qarD", R.raw.qard);  // From {pIqarD}.
        initMap.put("qaS", R.raw.qas);
        initMap.put("qaw", R.raw.qaw);
        initMap.put("Qaz", R.raw.kaz);   // From {majQa'}.
        initMap.put("qaz", R.raw.qaz);   // qa'
        initMap.put("qem", R.raw.qem);
        initMap.put("qey", R.raw.qey);   // From {qeylIS}.
        initMap.put("QIH", R.raw.kih);
        initMap.put("qIm", R.raw.qim);
        initMap.put("qIp", R.raw.qip);
        initMap.put("qIrq", R.raw.qirq);  // From {jemS tIy qIrq}.
        initMap.put("QIt", R.raw.kit);
        initMap.put("Qob", R.raw.kob);
        initMap.put("QoF", R.raw.kof);   // Qong
        initMap.put("qoH", R.raw.qoh);
        initMap.put("qoj", R.raw.qoj);
        initMap.put("qoq", R.raw.qoq);
        initMap.put("qoS", R.raw.qos);
        initMap.put("qox", R.raw.qox);   // qotlh
        initMap.put("Qoy", R.raw.koy);   // Qoy
        initMap.put("Qoz", R.raw.koz);   // Qo'
        initMap.put("QuC", R.raw.kuc);   // Quch
        initMap.put("qul", R.raw.qul);
        initMap.put("Qun", R.raw.kun);   // From {chuQun}.
        initMap.put("Quv", R.raw.kuv);
        initMap.put("quv", R.raw.quv);
        initMap.put("quz", R.raw.quz);   // qu'
        initMap.put("raj", R.raw.raj);
        initMap.put("ram", R.raw.ram);
        initMap.put("raz", R.raw.raz);   // ra'
        initMap.put("reG", R.raw.reg);   // regh
        initMap.put("reH", R.raw.reh);
        initMap.put("ruC", R.raw.ruc);   // ruch
        initMap.put("rup", R.raw.rup);
        initMap.put("rur", R.raw.rur);
        initMap.put("SaD", R.raw.sad);
        initMap.put("SaH", R.raw.sah);
        initMap.put("Sayz", R.raw.sayz);   // Say'
        initMap.put("SIQ", R.raw.sik);
        initMap.put("SoC", R.raw.soc);
        initMap.put("SoH", R.raw.soh);
        initMap.put("Soj", R.raw.soj);
        initMap.put("Sop", R.raw.sop);
        initMap.put("SoS", R.raw.sos);
        initMap.put("Sov", R.raw.sov);
        initMap.put("SuD", R.raw.sud);
        initMap.put("Suv", R.raw.suv);
        initMap.put("taH", R.raw.tah);
        initMap.put("taj", R.raw.taj);
        initMap.put("tarG", R.raw.targ);
        initMap.put("tar", R.raw.tar);
        initMap.put("tayz", R.raw.tayz);   // tay'
        initMap.put("taz", R.raw.taz);   // ta'
        initMap.put("teb", R.raw.teb);   // From {nIteb}
        initMap.put("tIn", R.raw.tin);
        initMap.put("tIq", R.raw.tiq);
        initMap.put("tIv", R.raw.tiv);
        initMap.put("tIy", R.raw.tiy);  // From {jemS tIy qIrq}.
        initMap.put("toz", R.raw.toz);   // to'
        initMap.put("tuH", R.raw.tuh);
        initMap.put("tuj", R.raw.tuj);
        initMap.put("tup", R.raw.tup);
        initMap.put("turn", R.raw.turn);  // From {Saturn}.
        initMap.put("tuz", R.raw.tuz);
        initMap.put("vaD", R.raw.vad);
        initMap.put("vaG", R.raw.vag);
        initMap.put("vaj", R.raw.vaj);
        initMap.put("vam", R.raw.vam);
        initMap.put("van", R.raw.van);
        initMap.put("vav", R.raw.vav);
        initMap.put("vax", R.raw.vax);
        initMap.put("vayz", R.raw.vayz);   // vay'
        initMap.put("veq", R.raw.veq);   // From {veqlargh}.
        initMap.put("vex", R.raw.vex);   // vetlh
        initMap.put("vIH", R.raw.vih);
        initMap.put("vIp", R.raw.vip);
        initMap.put("vIS", R.raw.vis);
        initMap.put("vIz", R.raw.viz);   // From {DIvI'}.
        initMap.put("voG", R.raw.vog);   // vogh
        initMap.put("voz", R.raw.voz);   // vo'
        initMap.put("waz", R.raw.waz);
        initMap.put("wej", R.raw.wej);
        initMap.put("wIj", R.raw.wij);
        initMap.put("wIz", R.raw.wiz);   // wI'
        initMap.put("woz", R.raw.woz);   // wo'
        initMap.put("xab", R.raw.xab);
        initMap.put("xaC", R.raw.xac);
        initMap.put("xaG", R.raw.xag);
        initMap.put("xam", R.raw.xam);
        initMap.put("xap", R.raw.xap);   // tlhap
        initMap.put("xaQ", R.raw.xak);
        initMap.put("xaq", R.raw.xaq);
        initMap.put("xarG", R.raw.xarg);
        initMap.put("xaS", R.raw.xas);
        initMap.put("xawz", R.raw.xawz);
        initMap.put("xax", R.raw.xax);
        initMap.put("xay", R.raw.xay);
        initMap.put("xed", R.raw.xed);
        initMap.put("xeF", R.raw.xef);
        initMap.put("xeG", R.raw.xeg);   // tlhegh
        initMap.put("xej", R.raw.xej);
        initMap.put("xep", R.raw.xep);
        initMap.put("xer", R.raw.xer);
        initMap.put("xev", R.raw.xev);
        initMap.put("xex", R.raw.xex);
        initMap.put("xez", R.raw.xez);
        initMap.put("xIb", R.raw.xib);
        initMap.put("xIC", R.raw.xic);
        initMap.put("xIF", R.raw.xif);
        initMap.put("xIG", R.raw.xig);
        initMap.put("xIH", R.raw.xih);
        initMap.put("xIj", R.raw.xij);
        initMap.put("xIl", R.raw.xil);
        initMap.put("xIm", R.raw.xim);
        initMap.put("xIn", R.raw.xin);
        initMap.put("xIq", R.raw.xiq);
        initMap.put("xIS", R.raw.xis);
        initMap.put("xIv", R.raw.xiv);
        initMap.put("xIz", R.raw.xiz);
        initMap.put("xuC", R.raw.xuc);
        initMap.put("xuD", R.raw.xud);
        initMap.put("xuH", R.raw.xuh);
        initMap.put("xup", R.raw.xup);
        initMap.put("xuQ", R.raw.xuk);
        initMap.put("xux", R.raw.xux);   // tlhutlh
        initMap.put("xuz", R.raw.xuz);
        initMap.put("yab", R.raw.yab);
        initMap.put("yaC", R.raw.yac);
        initMap.put("yaD", R.raw.yad);
        initMap.put("yaG", R.raw.yag);
        initMap.put("yaH", R.raw.yah);
        initMap.put("yaj", R.raw.yaj);
        initMap.put("yan", R.raw.yan);
        initMap.put("yap", R.raw.yap);
        initMap.put("yaS", R.raw.yas);
        initMap.put("yat", R.raw.yat);
        initMap.put("yav", R.raw.yav);
        initMap.put("yax", R.raw.yax);
        initMap.put("yay", R.raw.yay);
        initMap.put("yayz", R.raw.yayz);
        initMap.put("yeb", R.raw.yeb);
        initMap.put("yej", R.raw.yej);
        initMap.put("yem", R.raw.yem);
        initMap.put("yep", R.raw.yep);
        initMap.put("yeq", R.raw.yeq);
        initMap.put("yer", R.raw.yer);
        initMap.put("yev", R.raw.yev);
        initMap.put("yIb", R.raw.yib);
        initMap.put("yIC", R.raw.yic);
        initMap.put("yID", R.raw.yid);
        initMap.put("yIH", R.raw.yih);
        initMap.put("yIn", R.raw.yin);
        initMap.put("yIQ", R.raw.yik);
        initMap.put("yIr", R.raw.yir);
        initMap.put("yIS", R.raw.yis);
        initMap.put("yIt", R.raw.yit);
        initMap.put("yIv", R.raw.yiv);
        initMap.put("yIz", R.raw.yiz);
        initMap.put("yob", R.raw.yob);
        initMap.put("yoD", R.raw.yod);
        initMap.put("yoF", R.raw.yof);
        initMap.put("yoH", R.raw.yoh);
        initMap.put("yoj", R.raw.yoj);
        initMap.put("yol", R.raw.yol);
        initMap.put("yon", R.raw.yon);
        initMap.put("yop", R.raw.yop);
        initMap.put("yoq", R.raw.yoq);
        initMap.put("yor", R.raw.yor);
        initMap.put("yoS", R.raw.yos);
        initMap.put("yot", R.raw.yot);
        initMap.put("yov", R.raw.yov);
        initMap.put("yox", R.raw.yox);
        initMap.put("yoy", R.raw.yoy);
        initMap.put("yoz", R.raw.yoz);
        initMap.put("yub", R.raw.yub);
        initMap.put("yuC", R.raw.yuc);
        initMap.put("yuD", R.raw.yud);
        initMap.put("yup", R.raw.yup);
        initMap.put("yuQ", R.raw.yuk);
        initMap.put("yur", R.raw.yur);
        initMap.put("yuv", R.raw.yuv);
        initMap.put("yuz", R.raw.yuz);
        initMap.put("zab", R.raw.zab);
        initMap.put("zaC", R.raw.zac);
        initMap.put("zaD", R.raw.zad);
        initMap.put("zaF", R.raw.zaf);   // 'ang
        initMap.put("zaG", R.raw.zag);
        initMap.put("zaH", R.raw.zah);
        initMap.put("zaj", R.raw.zaj);
        initMap.put("zal", R.raw.zal);
        initMap.put("zam", R.raw.zam);
        initMap.put("zan", R.raw.zan);
        initMap.put("zap", R.raw.zap);
        initMap.put("zaQ", R.raw.zak);
        initMap.put("zaq", R.raw.zaq);
        initMap.put("zarG", R.raw.zarg);
        initMap.put("zar", R.raw.zar);
        initMap.put("zaS", R.raw.zas);
        initMap.put("zat", R.raw.zat);
        initMap.put("zav", R.raw.zav);   // 'av
        initMap.put("zaw", R.raw.zaw);
        initMap.put("zawz", R.raw.zawz);
        initMap.put("zax", R.raw.zax);
        initMap.put("zayz", R.raw.zayz);
        initMap.put("zaz", R.raw.zaz);
        initMap.put("zeb", R.raw.zeb);   // 'eb
        initMap.put("zeC", R.raw.zec);
        initMap.put("zeD", R.raw.zed);
        initMap.put("zeF", R.raw.zef);
        initMap.put("zeG", R.raw.zeg);   // 'egh
        initMap.put("zeH", R.raw.zeh);
        initMap.put("zej", R.raw.zej);   // 'ej
        initMap.put("zel", R.raw.zel);
        initMap.put("zem", R.raw.zem);
        initMap.put("zep", R.raw.zep);
        initMap.put("zeQ", R.raw.zek);
        initMap.put("zeq", R.raw.zeq);
        initMap.put("zer", R.raw.zer);
        initMap.put("zeS", R.raw.zes);
        initMap.put("zet", R.raw.zet);
        initMap.put("zev", R.raw.zev);
        initMap.put("zex", R.raw.zex);
        initMap.put("zey", R.raw.zey);
        initMap.put("zez", R.raw.zez);   // 'e'
        initMap.put("zIb", R.raw.zib);
        initMap.put("zIg", R.raw.zig);
        initMap.put("zIH", R.raw.zih);
        initMap.put("zIj", R.raw.zij);
        initMap.put("zIl", R.raw.zil);
        initMap.put("zIm", R.raw.zim);
        initMap.put("zIn", R.raw.zin);
        initMap.put("zIp", R.raw.zip);
        initMap.put("zIQ", R.raw.zik);
        initMap.put("zIq", R.raw.ziq);
        initMap.put("zIr", R.raw.zir);
        initMap.put("zIS", R.raw.zis);
        initMap.put("zIt", R.raw.zit);
        initMap.put("zIv", R.raw.ziv);
        initMap.put("zIw", R.raw.ziw);
        initMap.put("zIx", R.raw.zix);
        initMap.put("zIz", R.raw.ziz);
        initMap.put("zob", R.raw.zob);
        initMap.put("zoC", R.raw.zoc);
        initMap.put("zoD", R.raw.zod);
        initMap.put("zof", R.raw.zof);
        initMap.put("zoG", R.raw.zog);
        initMap.put("zoH", R.raw.zoh);
        initMap.put("zoj", R.raw.zoj);   // 'oj
        initMap.put("zol", R.raw.zol);
        initMap.put("zom", R.raw.zom);
        initMap.put("zop", R.raw.zop);
        initMap.put("zoQ", R.raw.zok);
        initMap.put("zor", R.raw.zor);   // From {ghe''or}.
        initMap.put("zoS", R.raw.zos);
        initMap.put("zov", R.raw.zov);
        initMap.put("zox", R.raw.zox);
        initMap.put("zoyz", R.raw.zoyz);
        initMap.put("zoz", R.raw.zoz);
        initMap.put("zuC", R.raw.zuc);
        initMap.put("zuD", R.raw.zud);
        initMap.put("zuG", R.raw.zug);
        initMap.put("zuH", R.raw.zuh);
        initMap.put("zuj", R.raw.zuj);
        initMap.put("zul", R.raw.zul);
        initMap.put("zum", R.raw.zum);
        initMap.put("zun", R.raw.zun);
        initMap.put("zup", R.raw.zup);
        initMap.put("zuQ", R.raw.zuk);   // 'uQ
        initMap.put("zur", R.raw.zur);
        initMap.put("zuS", R.raw.zus);   // 'uS
        initMap.put("zut", R.raw.zut);
        initMap.put("zux", R.raw.zux);
        initMap.put("zuy", R.raw.zuy);
        initMap.put("zuyz", R.raw.zuyz);
{'fraction_non_alphanumeric': 0.216326064944881, 'fraction_numerical': 0.0012834956717673734, 'mean_word_length': 1.9748006108942813, 'pattern_counts': {'":': 0, '<': 31, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6276829', 'n_tokens_mistral': 29177, 'n_tokens_neox': 28754, 'n_words': 4232}