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[] { };
}
}