Exemple #1
0
        /// <summary>
        /// トラックの生成
        /// </summary>
        /// <param name="tone"></param>
        /// <returns></returns>
        public MidiTrack CreateTrack(TONE tone)
        {
            MidiTrack track = new MidiTrack(mNextTrackNo, tone);

            mTrackList.Add(track);
            mNextTrackNo++;

            return track;
        }
Exemple #2
0
        Transcribe(MSyl syl)
        {
            string init = "";
            INIT   i    = syl.Initial;
            TONE   t    = syl.Tone;

            if (t == TONE.NEUTRAL)
            {
                init = ".";
                t    = TONE.CLEAR;
            }

            try {
                if (i == INIT.Void)
                {
                    if (syl.Medial > MED._)
                    {
                        if (t > TONE.MUDDY && t < TONE.NEUTRAL || syl.Rime == RIME.ONG)                  //oblique forms
                        {
                            return(init + _ywObliqueTrans [new MRt(syl.Rime, t)]);
                        }
                    }
                }
                else
                {
                    if (syl.InitialGroup == INITGROUP.GGRP && syl.IsPalatized)                      //gi ki hi gni
                    {
                        init += i == INIT.G ? "j" : i == INIT.K ? "ch" : i == INIT.H ? "sh" : "gn";
                    }
                    else
                    {
                        init += _iTrans [i];
                        if (i.IsSonorant())
                        {
                            if (syl.Tone == TONE.CLEAR)
                            {
                                init += "h";
                            }
                            else if (syl.Tone == TONE.MUDDY)
                            {
                                t = TONE.CLEAR;
                            }
                        }
                    }
                }

                return(init + _rTrans [new MRt(syl.Rime, t)]);
            } catch (Exception) {
                throw new ArgumentException(
                          string.Format("Try to transcribe a invalid mandarin syllable:{0} into GwoyeuRomatzyh!", syl));
            }
        }
Exemple #3
0
        Transcribe(MSyl syl)
        {
            string start, end = "";
            INIT   i = syl.Initial;
            TONE   t = syl.Tone;
            MED    m = syl.Medial;
            RIME   r = syl.Rime;


            //initial
            if (i == INIT.Void && m != MED._)           //y w yu
            {
                return(_m0Trans[new MRt(r, t)]);
            }
            else if (syl.InitialGroup == INITGROUP.GGRP && syl.IsPalatized)           //j q x
            {
                start = _specInit[i];
                if (m == MED.IU && syl.Final != FIN.ENG)                //ü -> u but not iong
                {
                    r = (RIME)((byte)MED.U | (byte)syl.Final);          //ju qu xu
                }
            }
            else if (syl.InitialGroup == INITGROUP.TZGRP && m == MED.I && syl.Final == FIN.ZERO)            //zyi cyi syi
            {
                start = _specInit[i];
            }
            else
            {
                start = _miTrans[i];
            }

            //final
            _mfTrans.TryGetValue(new MRt(r, t), out end);

            return(start + end);
        }
Exemple #4
0
 public MImt(INIT i, MED m = MED._, TONE t = TONE.NEUTRAL)
 {
     _syl = new MSyl(i, m, FIN.ZERO, t);
 }
Exemple #5
0
 public MImt(INIT i, MED m = MED._, TONE t = TONE.NEUTRAL)
 {
     _syl = new MSyl(i,m,FIN.ZERO,t);
 }
Exemple #6
0
 public MRt(FIN fin, TONE tone) : this(fin, MED._, tone)
 {
 }
Exemple #7
0
 public MRt(RIME rime, TONE tone)
 {
     _syl = new MSyl((byte)tone, (byte)rime);
 }
Exemple #8
0
 public MRt(FIN fin, MED med = MED._, TONE tone = TONE.NEUTRAL)
 {
     _syl = new MSyl(INIT.Void, med, fin, tone);
 }
Exemple #9
0
            int mTrackNo = 0;   //  トラック番号

            /// <summary>
            /// コンストラクタ
            /// </summary>
            /// <param name="_trackNo"></param>
            /// <param name="_tone"></param>
            public MidiTrack(int _trackNo, TONE _tone)
            {
                mTrackNo = _trackNo;
                tone = _tone;
            }
Exemple #10
0
        MunchSyllable(string s, ref int idx)
        {
            MImt imt;
            MRt  rt;

            INIT init = 0;
            MED  med = 0;
            FIN  fin = 0;
            TONE t1 = TONE.NEUTRAL, t2 = TONE.NEUTRAL;

            bool match = _miDict.TryMatchStart(s, ref idx, out imt);

            do
            {
                if (match)
                {
                    init = imt.Initial;
                    med  = imt.Medial;
                    t1   = imt.Tone;
                }

                var iMark = idx;
                match = _mfDict.TryMatchStart(s, ref idx, out rt);

                if (match)
                {
                    t2 = rt.Tone;

                    if (t2 != TONE.NEUTRAL && t1 != TONE.NEUTRAL)
                    {
                        idx = iMark;
                        break;
                    }

                    if (rt.Medial == MED.U)                       //IU + ONG
                    {
                        if (rt.Final == FIN.ZERO && med == MED.I) //IU
                        {
                            fin = FIN.OU;
                        }
                        else if (rt.Final == FIN.ENG)                        //ONG
                        {
                            med = med | MED.U;
                            fin = rt.Final;
                        }
                        else
                        {
                            idx = iMark;
                        }
                    }
                    else
                    {
                        fin = rt.Final;
                        if (fin == FIN.Y && med == MED.U)                       //UI
                        {
                            fin = FIN.EI;
                        }
                        else if (fin == FIN.E && ((med & MED.I) == MED.I))                              //ie,üe
                        {
                            fin = FIN.È;
                        }
                    }
                }
            } while(false);

            if (init == 0 && med == 0 && fin == 0)
            {
                return(MSyl.Default);
            }

            return(new MSyl(init, med, fin, (t1 == TONE.NEUTRAL ? t2 : t1)));
        }
Exemple #11
0
 public MSyl(INIT init, MED med, FIN fin, TONE tone)
     : this((byte)((byte)init | (byte)tone), (byte)((byte)med | (byte)fin))
 {
 }