cadencii.AquesTone2Driver.createNoteOnEvent C# (CSharp) Method

createNoteOnEvent() public method

Note On のための MIDI イベント列を作成する
public createNoteOnEvent ( int note, int dynamics, String phrase ) : MidiEvent[]
note int ノート番号
dynamics int Dynamics
phrase String 歌詞
return MidiEvent[]
        public MidiEvent[] createNoteOnEvent( int note, int dynamics, String phrase )
        {
            var matcher = new SyllableMatcher();
            var syllable = matcher.find( phrase );
            if ( syllableMap.ContainsKey( syllable ) ) {
                var position = syllableMap[syllable];
                int lineIndex = position.lineIndex;
                int columnIndex = position.columnIndex;

                var result = new List<MidiEvent>();

                {
                    MidiEvent moveLine = new MidiEvent();
                    moveLine.firstByte = 0xB0;
                    moveLine.data = new[] { 0x31, lineIndex };
                    result.Add( moveLine );
                }
                for ( int i = 1; i <= columnIndex; ++i ) {
                    {
                        MidiEvent dummyNoteOn = new MidiEvent();
                        dummyNoteOn.firstByte = 0x90;
                        dummyNoteOn.data = new int[] { note, 0x40 };
                        result.Add( dummyNoteOn );
                    }
                    {
                        MidiEvent dummyNoteOff = new MidiEvent();
                        dummyNoteOff.firstByte = 0x80;
                        dummyNoteOff.data = new int[] { note, 0x40 };
                        result.Add( dummyNoteOff );
                    }
                }
                {
                    MidiEvent noteOn = new MidiEvent();
                    noteOn.firstByte = 0x90;
                    noteOn.data = new int[] { note, dynamics };
                    result.Add( noteOn );
                }
                return result.ToArray();
            } else {
                return new MidiEvent[] { };
            }
        }

Usage Example

 /// <summary>
 /// 音符の note on/off のためのイベントを作成し、イベントキューに追加する
 /// </summary>
 /// <param name="track">生成元のトラック</param>
 /// <param name="result">生成したイベントの追加先</param>
 private void appendNoteEvent(VsqTrack track, EventQueueSequence result)
 {
     foreach (var item in track.MetaText.Events.Events)
     {
         if (item.ID.type != VsqIDType.Anote)
         {
             continue;
         }
         var note = item.ID.Note;
         {
             var clock  = item.Clock;
             var queue  = result.get(clock);
             var noteOn = driver_.createNoteOnEvent(item.ID.Note,
                                                    item.ID.Dynamics,
                                                    item.ID.LyricHandle.L0.Phrase);
             queue.noteon.AddRange(noteOn);
         }
         {
             var clock   = item.Clock + item.ID.Length;
             var queue   = result.get(clock);
             var noteOff = createNoteOffEvent(clock, item.ID.Note);
             queue.noteoff.add(noteOff);
         }
     }
 }