From a935e21de5cf94b052a51c05aba8230a2f83ade3 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 2 Sep 2007 10:40:00 +0000 Subject: [PATCH] Keep data for all MIDI note numbers, not just guitar notes --- stepmania/src/NotesLoaderMidi.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/stepmania/src/NotesLoaderMidi.cpp b/stepmania/src/NotesLoaderMidi.cpp index ec23fd40df..739bcf6bea 100644 --- a/stepmania/src/NotesLoaderMidi.cpp +++ b/stepmania/src/NotesLoaderMidi.cpp @@ -649,13 +649,12 @@ using namespace Guitar; 106: player 2 section, expert (A#) 108: vocal track (C) */ -static bool NoteNumberToDifficultyAndNoteNumberType( uint8_t uNoteNumber, GuitarDifficulty &gdOut, NoteNumberType &nntOut ) +static void DifficultyAndNoteNumberTypeToNoteNumber( GuitarDifficulty gd, NoteNumberType nnt, uint8_t &uNoteNumberOut ) { - gdOut = (GuitarDifficulty)((uNoteNumber-60) / 12); - nntOut = (NoteNumberType)((uNoteNumber-60) % 12); + ASSERT( gd >= 0 && gd < NUM_GuitarDifficulty ); + ASSERT( nnt >= 0 && nnt < NUM_NoteNumberType ); - return gdOut >= 0 && gdOut < NUM_GuitarDifficulty && - nntOut >= 0 && nntOut < NUM_NoteNumberType; + uNoteNumberOut = 60 + gd*12 + nnt; } // TODO: Generalize these. These values are specific to guitar midi files. @@ -693,11 +692,12 @@ static bool LoadFromMidi( const RString &sPath, Song &songOut ) } - /* Read the MIDI events into per-difficulty, pre-NoteNumber vector. The guitar processing + /* Read the MIDI events into per-difficulty, pre-NoteNumber vector. The processing * rules for MIDI events often need to look at the next or previous event with the same * NoteNumber. This is difficult using MidiFileIn interfaces, so this intermediate processing * step is helpful. */ - vector vMidiEvent[NUM_GuitarDifficulty][NUM_NoteNumberType]; + const int MAX_MIDI_NOTE_NUMBERS = 256; + vector vMidiEvent[MAX_MIDI_NOTE_NUMBERS]; /* Iterate through each track looking for the track that contains notes by checking the track name. * This is usually track 1, but sometimes is track 2. */ @@ -746,14 +746,9 @@ static bool LoadFromMidi( const RString &sPath, Song &songOut ) if( uVelocity == 0 ) midiEventType = note_off; - GuitarDifficulty gd; - NoteNumberType nnt; - if( NoteNumberToDifficultyAndNoteNumberType( uNoteNumber, gd, nnt ) ) - { - MidiEvent event = { count, midiEventType }; - //float fBeat = NoteRowToBeat( MidiCountToNoteRow(count) ); - vMidiEvent[gd][nnt].push_back( event ); - } + MidiEvent event = { count, midiEventType }; + //float fBeat = NoteRowToBeat( MidiCountToNoteRow(count) ); + vMidiEvent[uNoteNumber].push_back( event ); } break; default: @@ -780,9 +775,12 @@ skip_track: if( nnt >= NUM_FRETS ) continue; // data other than the frets is not handled yet + uint8_t uNoteNumber; + DifficultyAndNoteNumberTypeToNoteNumber( gd, nnt, uNoteNumber ); + bool bNonTerminatedNote = false; long countOfLastNote = 0; - FOREACH_CONST( MidiEvent, vMidiEvent[gd][nnt], iter ) + FOREACH_CONST( MidiEvent, vMidiEvent[uNoteNumber], iter ) { /* 1) Note-on events indicate the start of a guitar note