Пример #1
0
 public virtual void setState(int idx, HMMState st)
 {
     if (this.states[idx] == null && st != null)
     {
         this.nbEmittingStates++;
     }
     this.states[idx] = st;
 }
Пример #2
0
 public virtual int getStateIdx(HMMState st)
 {
     return(st.gmmidx);
 }
Пример #3
0
        protected internal virtual void loadHMMPool(bool useCDUnits, HTKLoader.HTKStruct htkModels, string path)
        {
            if (!this.tie1ph)
            {
                Iterator iterator = htkModels.hmmsHTK.get1phIt();
                while (iterator.hasNext())
                {
                    SingleHMM singleHMM = (SingleHMM)iterator.next();
                    if (singleHMM == null)
                    {
                        break;
                    }
                    string baseName = singleHMM.getName();
                    string text;
                    if (String.instancehelper_equals(baseName, "sil") || String.instancehelper_equals(baseName, "sp") || String.instancehelper_equals(baseName, "bb") || String.instancehelper_equals(baseName, "xx") || String.instancehelper_equals(baseName, "hh"))
                    {
                        text = "filler";
                    }
                    else
                    {
                        text = "nofiller";
                    }
                    int   trIdx   = singleHMM.trIdx;
                    int   nstates = singleHMM.getNstates();
                    int[] array   = new int[singleHMM.getNbEmittingStates()];
                    int   num     = 0;
                    for (int i = 0; i < nstates; i++)
                    {
                        if (singleHMM.isEmitting(i))
                        {
                            HTK.HMMState state = singleHMM.getState(i);
                            array[num] = htkModels.hmmsHTK.getStateIdx(state);
                            num++;
                        }
                    }
                    Unit unit = this.unitManager.getUnit(baseName, String.instancehelper_equals(text, "filler"));
                    this.contextIndependentUnits.put(unit.getName(), unit);
                    if (this.logger.isLoggable(Level.FINE))
                    {
                        this.logger.fine(new StringBuilder().append("Loaded ").append(unit).toString());
                    }
                    if (unit.isFiller() && String.instancehelper_equals(unit.getName(), "SIL"))
                    {
                        unit = UnitManager.__SILENCE;
                    }
                    float[][]      transitionMatrix = (float[][])this.matrixPool.get(trIdx);
                    SenoneSequence senoneSequence   = this.getSenoneSequence(array);
                    SenoneHMM      hmm = new SenoneHMM(unit, senoneSequence, transitionMatrix, HMMPosition.lookup("-"));
                    this.hmmManager.put(hmm);
                }
            }
            else
            {
                for (int j = 0; j < htkModels.hmmsHTK.getNhmms(); j++)
                {
                    SingleHMM singleHMM = htkModels.hmmsHTK.getHMM(j);
                    if (singleHMM == null)
                    {
                        break;
                    }
                    string baseName = singleHMM.getBaseName();
                    if (!this.contextIndependentUnits.containsKey(baseName))
                    {
                        string text;
                        if (String.instancehelper_equals(baseName, "SIL") || String.instancehelper_equals(baseName, "SP") || String.instancehelper_equals(baseName, "BB") || String.instancehelper_equals(baseName, "XX") || String.instancehelper_equals(baseName, "HH"))
                        {
                            text = "filler";
                        }
                        else
                        {
                            text = "nofiller";
                        }
                        int   trIdx   = singleHMM.trIdx;
                        int   nstates = singleHMM.getNstates();
                        int[] array   = new int[singleHMM.getNbEmittingStates()];
                        int   num     = 0;
                        for (int i = 0; i < nstates; i++)
                        {
                            if (singleHMM.isEmitting(i))
                            {
                                HTK.HMMState state = singleHMM.getState(i);
                                array[num] = htkModels.hmmsHTK.getStateIdx(state);
                                num++;
                            }
                        }
                        Unit unit = this.unitManager.getUnit(baseName, String.instancehelper_equals(text, "filler"));
                        this.contextIndependentUnits.put(unit.getName(), unit);
                        if (this.logger.isLoggable(Level.FINE))
                        {
                            this.logger.fine(new StringBuilder().append("Loaded ").append(unit).toString());
                        }
                        if (unit.isFiller() && String.instancehelper_equals(unit.getName(), "SIL"))
                        {
                            unit = UnitManager.__SILENCE;
                        }
                        float[][]      transitionMatrix = (float[][])this.matrixPool.get(trIdx);
                        SenoneSequence senoneSequence   = this.getSenoneSequence(array);
                        SenoneHMM      hmm = new SenoneHMM(unit, senoneSequence, transitionMatrix, HMMPosition.lookup("-"));
                        this.hmmManager.put(hmm);
                    }
                }
            }
            string text2 = "";
            Unit   unit2 = null;

            int[]          ssid            = null;
            SenoneSequence senoneSequence2 = null;
            ArrayList      arrayList       = new ArrayList();
            Iterator       iterator2       = htkModels.hmmsHTK.get3phIt();

            while (iterator2.hasNext())
            {
                SingleHMM singleHMM2 = (SingleHMM)iterator2.next();
                if (singleHMM2 == null)
                {
                    break;
                }
                string baseName2 = singleHMM2.getBaseName();
                string text3     = singleHMM2.getLeft();
                string text4     = singleHMM2.getRight();
                if (String.instancehelper_equals(text3, "-"))
                {
                    text3 = "SIL";
                }
                if (String.instancehelper_equals(text4, "-"))
                {
                    text4 = "SIL";
                }
                string text5 = new StringBuilder().append(text3).append(' ').append(baseName2).append(' ').append(text4).toString();
                if (!arrayList.contains(text5))
                {
                    arrayList.add(text5);
                    text5 = "i";
                    int   trIdx2  = singleHMM2.trIdx;
                    int   nstates = singleHMM2.getNstates();
                    int[] array2  = new int[singleHMM2.getNbEmittingStates()];
                    int   num2    = 0;
                    for (int k = 0; k < nstates; k++)
                    {
                        if (singleHMM2.isEmitting(k))
                        {
                            HTK.HMMState state2 = singleHMM2.getState(k);
                            array2[num2] = htkModels.hmmsHTK.getStateIdx(state2);
                            num2++;
                        }
                    }
                    if (useCDUnits)
                    {
                        string text6 = new StringBuilder().append(baseName2).append(' ').append(text3).append(' ').append(text4).toString();
                        Unit   unit3;
                        if (String.instancehelper_equals(text6, text2))
                        {
                            unit3 = unit2;
                        }
                        else
                        {
                            LeftRightContext context = LeftRightContext.get(new Unit[]
                            {
                                (Unit)this.contextIndependentUnits.get(text3)
                            }, new Unit[]
                            {
                                (Unit)this.contextIndependentUnits.get(text4)
                            });
                            unit3 = this.unitManager.getUnit(baseName2, false, context);
                        }
                        text2 = text6;
                        unit2 = unit3;
                        if (this.logger.isLoggable(Level.FINE))
                        {
                            this.logger.fine(new StringBuilder().append("Loaded ").append(unit3).toString());
                        }
                        float[][]      transitionMatrix2 = (float[][])this.matrixPool.get(trIdx2);
                        SenoneSequence senoneSequence3   = senoneSequence2;
                        if (senoneSequence3 == null || !this.sameSenoneSequence(array2, ssid))
                        {
                            senoneSequence3 = this.getSenoneSequence(array2);
                        }
                        senoneSequence2 = senoneSequence3;
                        ssid            = array2;
                        SenoneHMM hmm2 = new SenoneHMM(unit3, senoneSequence3, transitionMatrix2, HMMPosition.lookup(text5));
                        this.hmmManager.put(hmm2);
                    }
                }
            }
        }
Пример #4
0
        private SingleHMM loadHMM(BufferedReader bufferedReader, string text, List list)
        {
            GMMDiag gmmdiag = null;
            string  text2   = "";

            while (!String.instancehelper_startsWith(text2, "<NUMSTATES>"))
            {
                text2 = bufferedReader.readLine();
            }
            int num = Integer.parseInt(String.instancehelper_substring(text2, String.instancehelper_indexOf(text2, 32) + 1));

            num--;
            SingleHMM singleHMM = new SingleHMM(num);

            singleHMM.setName(text);
            singleHMM.hmmset = this;
            while (!String.instancehelper_startsWith(text2, "<STATE>"))
            {
                text2 = bufferedReader.readLine();
            }
            while (String.instancehelper_startsWith(text2, "<STATE>"))
            {
                int num2 = Integer.parseInt(String.instancehelper_substring(text2, String.instancehelper_indexOf(text2, 32) + 1));
                num2--;
                text2 = bufferedReader.readLine();
                int gmmidx;
                if (String.instancehelper_startsWith(text2, "~s"))
                {
                    string text3 = String.instancehelper_substring(text2, String.instancehelper_indexOf(text2, 34) + 1, String.instancehelper_lastIndexOf(text2, 34));
                    int    i;
                    for (i = 0; i < list.size(); i++)
                    {
                        gmmdiag = (GMMDiag)list.get(i);
                        if (String.instancehelper_equals(gmmdiag.nom, text3))
                        {
                            break;
                        }
                    }
                    gmmidx = i;
                    if (i == list.size())
                    {
                        java.lang.System.err.println(new StringBuilder().append("Error creatiing HMM : state ").append(text).append(" not found").toString());
                        java.lang.System.exit(1);
                    }
                }
                else
                {
                    this.loadState(bufferedReader, "", text2);
                    gmmidx  = this.__gmms.size() - 1;
                    gmmdiag = (GMMDiag)this.__gmms.get(this.__gmms.size() - 1);
                }
                HMMState hmmstate = new HMMState(gmmdiag, new Lab(text, num2));
                hmmstate.gmmidx = gmmidx;
                this.__states.add(hmmstate);
                singleHMM.setState(num2 - 1, hmmstate);
                text2 = bufferedReader.readLine();
                if (String.instancehelper_startsWith(text2, "<GCONST>"))
                {
                    text2 = bufferedReader.readLine();
                }
            }
            if (String.instancehelper_startsWith(text2, "~t"))
            {
                string text4 = String.instancehelper_substring(text2, String.instancehelper_indexOf(text2, 34) + 1, String.instancehelper_lastIndexOf(text2, 34));
                int    num3  = this.getTrans(text4);
                singleHMM.setTrans(num3);
            }
            else
            {
                if (!String.instancehelper_startsWith(text2, "<TRANSP>"))
                {
                    java.lang.System.err.println(new StringBuilder().append("Error reading model: missing transitions.").append(text2).toString());
                    java.lang.System.exit(1);
                }
                this.loadTrans(bufferedReader, null, text2);
                singleHMM.setTrans(this.trans);
            }
            text2 = bufferedReader.readLine();
            if (!String.instancehelper_startsWith(text2, "<ENDHMM>"))
            {
                java.lang.System.err.println(new StringBuilder().append("Error reading model: missing ENDHMM.").append(text2).toString());
                java.lang.System.exit(1);
            }
            return(singleHMM);
        }