/// <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; }
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)); } }
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); }
public MImt(INIT i, MED m = MED._, TONE t = TONE.NEUTRAL) { _syl = new MSyl(i, m, FIN.ZERO, t); }
public MImt(INIT i, MED m = MED._, TONE t = TONE.NEUTRAL) { _syl = new MSyl(i,m,FIN.ZERO,t); }
public MRt(FIN fin, TONE tone) : this(fin, MED._, tone) { }
public MRt(RIME rime, TONE tone) { _syl = new MSyl((byte)tone, (byte)rime); }
public MRt(FIN fin, MED med = MED._, TONE tone = TONE.NEUTRAL) { _syl = new MSyl(INIT.Void, med, fin, tone); }
int mTrackNo = 0; // トラック番号 /// <summary> /// コンストラクタ /// </summary> /// <param name="_trackNo"></param> /// <param name="_tone"></param> public MidiTrack(int _trackNo, TONE _tone) { mTrackNo = _trackNo; tone = _tone; }
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))); }
public MSyl(INIT init, MED med, FIN fin, TONE tone) : this((byte)((byte)init | (byte)tone), (byte)((byte)med | (byte)fin)) { }