Skip to main content
A modifier changes how the notes it covers are played, instead of adding a note. In a .mid file a modifier is a note, or a pair of SysEx events, and it covers the notes that start from its start up to its end:
Here the forced HOPO modifier makes the green and red chord at tick 1920 a HOPO chord. Guitar tracks, 5-fret and 6-fret, have these modifiers: Drums tracks have modifiers of their own. See Drums.

Which notes a modifier covers

A modifier covers the notes of its difficulty, or of every difficulty, that start at or after its start and before its end. Only where a note starts counts, not its sustain.
  • A note on the modifier’s end tick isn’t covered, except by a tap. See Taps.
  • At one tick, a modifier and its notes may come in any order.
  • Required: at least one note under each modifier.
  • A modifier written as a note pairs as Note pairing says.
Edge case: a modifier of length 0. A note-on and its note-off at one tick: the modifier covers the notes on its tick. A .chart modifier applies to the notes at its own tick, and its length has no effect. See Note modifiers.

Forced

The numbers are the same on 5-fret and 6-fret, and each modifier covers only its own difficulty. A forced HOPO modifier makes the notes it covers HOPOs, and a forced strum modifier makes them strums, whatever they would naturally be. So a forced HOPO chord is a HOPO chord, and a track’s first note under a forced HOPO modifier is a HOPO. Forcing a note doesn’t change whether the notes after it are HOPOs. Unlike a .chart file’s forced modifier, which flips a note between strum and HOPO, .mid forcing sets it. The two agree on chords and first notes, and differ on a note that is already a natural HOPO: N 5 makes it a strum, and a forced HOPO modifier keeps it a HOPO. Required: a note is forced HOPO or forced strum, not both.

Taps

A tap makes every note it covers a tap, which the player can play without strumming. It has two forms:
  • Note 104 covers every difficulty of the track.
  • Tap SysEx events cover one difficulty, or every difficulty. See The Phase Shift SysEx event.
Recommended: tap SysEx events for each difficulty, which can differ between difficulties. scan-chart’s export writes this form.
  • Required: a note is tapped or forced, not both.
  • Unlike other modifiers, a tap covers the notes on its end tick too.
Edge case: a note on a tap’s end tick. YARG doesn’t tap a note on the end tick. Recommended: end a tap after its last tapped note, and before the next note.

Open notes

An open note is strummed with no fret held. On 6-fret it’s a note. On 5-fret it has two forms.

5-fret

  • Notes 59, 71, 83 and 95 are open notes on Easy, Medium, Hard and Expert, in a track that has ENHANCED_OPENS. Without it, they aren’t notes: Rock Band charts use 59 for animations.
  • Open SysEx events turn every note they cover into an open note, whatever its fret. The open note keeps the covered note’s length, and forcing and taps still apply to it.
Recommended: open SysEx events over a green note, for each difficulty. A scanner that doesn’t read the SysEx events then plays a green note. Use ENHANCED_OPENS instead when an open note is in a chord, or when its sustain overlaps a green note. scan-chart’s export writes open notes this way. ENHANCED_OPENS is a text event, FF 01, in the 5-fret track:
  • It’s written ENHANCED_OPENS, Recommended, or [ENHANCED_OPENS].
  • Required: before the track’s first note. Recommended: at tick 0.
An open note may be in a chord with fret notes only after ENHANCED_OPENS. Open SysEx events turn a chord into one open note. Required: open SysEx events over single notes only.

6-fret

Notes 58, 70, 82 and 94 are open notes on Easy, Medium, Hard and Expert. They need no text event, and an open note may be in a chord. See 6-fret.

The Phase Shift SysEx event

Taps and opens can be written as SysEx events, a form from Phase Shift. A start event and an end event mark the modifier’s range:
  • An end event ends the modifier its start began: the same difficulty byte and type.
  • Required: exactly this 8-byte form, with a difficulty byte from the table, a type byte below 14, and a value byte of 00 or 01.
  • Recommended: a difficulty byte from 00 to 03, for each difficulty, rather than FF.

Natural HOPOs

A scanner decides strums and HOPOs as How notes resolve says, with two differences in a .mid file. The HOPO threshold is the resolution divided by 3, rounded down, plus 1: A single note right after a chord is a strum when its fret is in the chord. In a .chart file it can be a HOPO. An open note counts as a fret for this rule. In this example the resolution is 480, so the threshold is 161 ticks: The deprecated hopo_frequency and eighthnote_hopo keys change the threshold as in a .chart file. See How notes resolve.

Deprecated

  • Open SysEx events on 6-fret. Every scanner reads them, but 6-fret has open notes. Write the open note instead.

Ignored

  • Note 104 and SysEx events in a drums track. On drums, 65, 77, 89 and 101 are 5-lane green notes, not modifiers. See Drums.
  • Notes 59, 71, 83 and 95 without ENHANCED_OPENS, on 5-fret.
  • Other SysEx events, such as Phase Shift events of other types. scan-chart writes them back as they are. Some Phase Shift events stop Clone Hero from loading the chart: see Invalid forms.

Invalid forms

It has no effect in any scanner. scan-chart keeps it when saving, and its export leaves it out.
Every scanner reads a HOPO. scan-chart’s export writes only the forcing the note needs.
Every scanner reads the note as a tap. scan-chart keeps both modifiers when saving, and its export writes only the tap.
A scanner reads every note under either of them as covered, as Clone Hero and scan-chart do. YARG reads only the first, up to the first note-off. See Note pairing.
A scanner reads one open note with the longest sustain, and decides whether it’s a HOPO as for a single note, as Clone Hero and scan-chart do. YARG reads it as a chord, so as a strum unless it’s forced.
A scanner applies it only to the notes that start after it, as Clone Hero and scan-chart do, so notes 59, 71, 83 and 95 before it aren’t open notes. YARG decides each note’s type at its note-off, so there one of these notes that starts before the event and ends after it is an open note. scan-chart’s export writes it at tick 0, which keeps the open notes scan-chart read.
A scanner reads it as Clone Hero does: in any letter case, such as [enhanced_opens], but only in a text event, FF 01, and not with spaces around it. scan-chart reads it so. YARG reads it with spaces around it, and in other types of text event, but only in capitals.
A scanner reads a Phase Shift SysEx event only when it’s exactly 8 bytes long, as Clone Hero and YARG do, and ignores one of another length. Saving with scan-chart keeps it as it is. scan-chart reports it, and fixIssues can rewrite it in the 8-byte form, which changes the TrackHash. Every scanner skips an event that has another value in place of the 00 that marks a modifier.
In a 5-fret or 6-fret track, Clone Hero and YARG stop with an error on a tap or open start with such a byte that has an end, so neither loads the chart, and scan-chart refuses the file. Clone Hero and scan-chart ignore such an event in a drums track, and a start with no end.
Clone Hero keeps the Phase Shift SysEx events of each type and difficulty apart, in 100 groups numbered type × 5 + difficulty, in decimal, with FF counted as 4. It fails to load a chart with an event whose number is 100 or more, on any track, with or without an end. So a tap with a difficulty byte from 50 up fails, and so does an event whose type byte is 14 or more. A scanner refuses such a file, as scan-chart does. YARG ignores types other than open and tap.
In a 5-fret or 6-fret track, Clone Hero fails to load a chart with a tap or open SysEx event of such a value, and a scanner refuses the file, as scan-chart does. YARG ignores the event. Every scanner ignores such an event in a drums track, and one of another type.
Every scanner ignores it, as a note-on with no note-off. A scanner ends a SysEx start only with an end of the same difficulty byte and type, and never with a note-off, so an end for one difficulty doesn’t end a start for every difficulty, and a tap SysEx end doesn’t end note 104.