Interface IMetronome

As you might expect, IMetronome defines an interface for metronomes, though the interface may have many more properties than you'd initially expect to be required for a simple metronome.

In much music, especially that written in 4/4 or 3/4, the concepts of quarter note and beat can often be treated as pretty much synonymous to each other. However, these are in fact quite different. A quarter note is exactly one quarter of a whole note, yet beats are far more free-flowing. For example, the Mission Impossible intro is at this point an over-used example of a piece of music written in 5/4, yet if you tap along, you'll almost certainly find yourself tapping 4 uneven beats per bar.

For this reason, shimi expects that most musical objects which use the metronome will use its beat properties, though quarter notes can still also be incredibly useful, so are provided as well.

To better understand how shimi supports irregular beat patterns, take a look at the TimeSig class.

Note: Shimi's counts of beats and quarter notes are both zero-based, whereas musicians typically count from one. This break from convention has been done because it makes many things significantly simpler from a programming perspective. For example, if we have 4 beats per bar, then the beat value will range from 0 to 3.99999...., then back to 0 at the start of the next bar. If the traditional method of counting was adopted, then the beat would range from 1 to 4.99999...., then back to 1 at the start of the next bar.

Hierarchy

  • IMetronome

Implemented by

Accessors

  • get bar(): number
  • Records what bar the metronome is currently on.

    This should just return barTracker.value.

    Returns number

  • get barBeat(): number
  • Records how many beats have passed within the current bar.

    This should just return barBeatTracker.value.

    Returns number

  • get barBeatTracker(): PropertyTracker<number>
  • Records the difference in bar beat values, enabling inspection of the beat within the current bar from one update cycle to the next.

    Returns PropertyTracker<number>

  • get barQuarterNote(): number
  • Records how many quarter notes have passed within the current bar

    This should just return barQuarterNoteTracker.value.

    Returns number

  • get barQuarterNoteTracker(): PropertyTracker<number>
  • Records the difference in bar quarter note values, enabling inspection of the quarter note within the current bar from one update cycle to the next.

    Returns PropertyTracker<number>

  • get barTracker(): PropertyTracker<number>
  • Records the bar number in the previous update vs the current one.

    Returns PropertyTracker<number>

  • get enabled(): boolean
  • Gets whether the metronome is currently enabled to run.

    Returns boolean

  • set enabled(value: boolean): void
  • Sets whether the metronome is currently enabled to run.

    Parameters

    • value: boolean

    Returns void

  • get tempo(): number
  • Get the current metronome tempo.

    Returns number

  • set tempo(value: number): void
  • Set the current metronome tempo.

    Parameters

    • value: number

    Returns void

  • get tempoMultiplier(): number
  • Get the tempo multiplier. This allows defining the tempo in terms of other duration values than just quarter notes. For example, if tempo == 120:

    tempoMultiplier == 1 means ♩ = 120

    tempoMultiplier == 0.5 means ♪ = 120

    tempoMultiplier == 1.5 means ♩. = 120

    Returns number

  • set tempoMultiplier(value: number): void
  • Set the tempo multiplier. This allows defining the tempo in terms of other duration values than just quarter notes. For example, if tempo == 120:

    tempoMultiplier == 1 means ♩ = 120

    tempoMultiplier == 0.5 means ♪ = 120

    tempoMultiplier == 1.5 means ♩. = 120

    Parameters

    • value: number

    Returns void

  • get timeSig(): TimeSig
  • Get the current metronome time signature.

    Returns TimeSig

  • set timeSig(value: TimeSig): void
  • Set the metronome time signature.

    Note: It's expected that implementations of this shouldn't actually change the time signature straight away, but instead store it so that the time signature changes on the start of the next bar.

    Parameters

    Returns void

  • get totalBeat(): number
  • How many beats have passed in total since the metronome started.

    This should just return totalBeatTracker.value.

    Returns number

  • get totalBeatTracker(): PropertyTracker<number>
  • Records the difference in total beats passed, enabling inspection of the total beat change from one update cycle to the next.

    Returns PropertyTracker<number>

  • get totalQuarterNote(): number
  • How many quarter notes have passed in total since the metronome started.

    This should just return totalQuarterNoteTracker.value.

    Returns number

  • get totalQuarterNoteTracker(): PropertyTracker<number>
  • Records the difference in total quarter notes passed, enabling inspection of the total quarter note change from one update cycle to the next.

    Returns PropertyTracker<number>

Methods

  • This takes in a beat and returns true if the metronome is currently at it, or has only just passed it in the bar within the last update cycle.

    Returns

    Parameters

    • beat: number

      The beat to test if we've recently passed.

    Returns boolean

  • This takes in a beat division and checks if the metronome is currently at some multiple of that division within the current bar, returning what multiple of the division we're currently at. For example: atBarBeatMultiple(0.5) returns 0 if we're at beat 0, 1 if we're at beat 0.5, 2 if we're at beat 1, etc. If not at a multiple of the division, then -1 is returned.

    Parameters

    • division: number

      The beat division to check if the metronome is at a multiple of.

    Returns number

  • This takes a quarter note and returns true if the metronome is currently at it, or has only just passed it in the bar within the last update cycle.

    Parameters

    • quarterNote: number

    Returns boolean

  • This takes in a quarter note division and checks if the metronome is currently at some multiple of that division within the current bar, returning what multiple of the division we're currently at. For example: atBarQuarterNoteMultiple(0.5) returns 0 if we're at QN 0, 1 if we're at QN 0.5, 2 if we're at QN 1, etc. If not at a multiple of the division, then -1 is returned.

    Parameters

    • division: number

      The beat division to check if the metronome is at a multiple of.

    Returns number

  • This method allows for setting the metronome to a specific position.

    Note though, that the bar-related values are calculated under the assumption that the metronome's current time signature is the one that it always has.

    Parameters

    • totalQuarterNote: number

      The new position, as measured in quarter notes.

    Returns void

  • This method is exposed primarily for the TickReceiver, so it can get a metronome to update, using its own calculation of how many quarter notes to update by.

    This method should not be called by consumers of the library.

    Parameters

    • qnDelta: number

      The number of quarter notes to update the metronome by.

    Returns void

Generated using TypeDoc