本文整理汇总了C++中MidiEvent::SetVelocity方法的典型用法代码示例。如果您正苦于以下问题:C++ MidiEvent::SetVelocity方法的具体用法?C++ MidiEvent::SetVelocity怎么用?C++ MidiEvent::SetVelocity使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MidiEvent
的用法示例。
在下文中一共展示了MidiEvent::SetVelocity方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Listen
//.........这里部分代码省略.........
break;
}
// User releases the key
// If we delete this line, than all pressed keys will be gray until
// it is unpressed automatically
m_keyboard->SetKeyActive(note_name, false, Track::FlatGray);
userPressedKey(note_number, false);
continue;
}
TranslatedNoteSet::iterator closest_match = m_notes.end();
for (TranslatedNoteSet::iterator i = m_notes.begin(); i != m_notes.end(); ++i) {
const microseconds_t window_start = i->start - (KeyboardDisplay::NoteWindowLength / 2);
const microseconds_t window_end = i->start + (KeyboardDisplay::NoteWindowLength / 2);
// As soon as we start processing notes that couldn't possibly
// have been played yet, we're done.
if (window_start > cur_time)
break;
if (i->state != UserPlayable)
continue;
if (window_end > cur_time && i->note_id == ev.NoteNumber()) {
if (closest_match == m_notes.end()) {
closest_match = i;
continue;
}
microseconds_t this_distance = cur_time - i->start;
if (i->start > cur_time)
this_distance = i->start - cur_time;
microseconds_t known_best = cur_time - closest_match->start;
if (closest_match->start > cur_time)
known_best = closest_match->start - cur_time;
if (this_distance < known_best)
closest_match = i;
}
}
Track::TrackColor note_color = Track::FlatGray;
if (closest_match != m_notes.end()) {
note_color = m_state.track_properties[closest_match->track_id].color;
// "Open" this note so we can catch the close later and turn off
// the note.
ActiveNote n;
n.channel = closest_match->channel;
n.note_id = closest_match->note_id;
n.velocity = closest_match->velocity;
m_active_notes.insert(n);
// Play it
ev.SetChannel(n.channel);
ev.SetVelocity(n.velocity);
bool silently =
m_state.track_properties[closest_match->track_id].mode == Track::ModeYouPlaySilently ||
m_state.track_properties[closest_match->track_id].mode == Track::ModeLearningSilently;
if (m_state.midi_out && !silently)
m_state.midi_out->Write(ev);
// Adjust our statistics
const static double NoteValue = 100.0;
m_state.stats.score += NoteValue * CalculateScoreMultiplier() * (m_state.song_speed / 100.0);
m_state.stats.notes_user_could_have_played++;
m_state.stats.speed_integral += m_state.song_speed;
m_state.stats.notes_user_actually_played++;
m_current_combo++;
m_state.stats.longest_combo = max(m_current_combo, m_state.stats.longest_combo);
TranslatedNote replacement = *closest_match;
replacement.state = UserHit;
m_notes.erase(closest_match);
m_notes.insert(replacement);
}
else
m_state.stats.stray_notes++;
m_state.stats.total_notes_user_pressed++;
// Display a pressed key by an user
// Display a colored key, if it is pressed correctly
// Otherwise display a grey key
//
// If we comment this code, than a missed user pressed key will not shown.
// But correct presed key will be shown as usual.
m_keyboard->SetKeyActive(note_name, true, note_color);
userPressedKey(note_number, true);
}
}