\subsection{Metronome}

This plugin can be used as a metronome to keep time during music
practice. It supports two modes of operation, depending on it being
started from the plugin menu or as viewer for tempomap (\verb:.tempo:)
files.

The sound is a piercing square wave that can be heard well also
through loud music from a band.
In addition, the display also indicates the beats while playing
so that you can discreetly place the device
in your sight for checking the tempo instead of wearing
headphones at a concert.

\subsubsection{Simple Interactive Mode}

This is the mode of operation that is active when starting the
plugin directly from the menu. It offers a uniform metronome sound at
a constant tempo.
You can adjust the tempo through the interface or by tapping it out
on the appropriate button.

\begin{btnmap}
    \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu}
    \nopt{IPOD_4G_PAD,IPOD_3G_PAD}{\PluginExit}
       \opt{HAVEREMOTEKEYMAP}{& }
        & Exit plugin \\

    \PluginCancel
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCCancel}
        & Stop \\
        
    \PluginSelectRepeat
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCCancel}
       & Start \\

    \PluginSelect
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCSelect}
        & Tap tempo \\

    \PluginLeft{} / \PluginRight
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCLeft{} / \PluginRCRight}
        & Adjust tempo \\

    \opt{scrollwheel}{\PluginScrollFwd{} / \PluginScrollBack}
    \nopt{scrollwheel}{\PluginUp{} / \PluginDown}
        \opt{HAVEREMOTEKEYMAP}{& \PluginRCUp{} / \PluginRCDown}
        & Adjust volume \\

    \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD,SAMSUNG_YH820_PAD}{
      \ButtonRec
        \opt{HAVEREMOTEKEYMAP}{& }
        & Sync tap \\}
\end{btnmap}


\subsubsection{Programmed Track Mode}

When starting the plugin as a viewer for tempomap files
(ending in \verb:.tempo:), it starts in the track mode that offers
playback of a preprogrammed metronome track consisting out of
multiple parts, each with possibly different properties.

In contrast to the simple mode, there exists the notion of
meter and bars, along with emphasis on certain beats.
Parts can have these properties:

\begin{itemize}
    \item finite or infinite duration in bars (navigation only jumps
        to the beginning of infinite parts),
    \item differing meters (4/4, 3/4, 6/8, etc., default 4/4),
    \item differing tempo (always in quarter beats per minute,
        default 120) with
    \begin{itemize}
        \item one tempo per bar or even one tempo per beat, or
        \item smooth tempo changes with configurable acceleration, and
    \end{itemize}
    \item custom beat patterns (tick/tock/silence on each beat),
        default being emphasis (tick) on first beat, normal sound
        (tock) on others.
\end{itemize}

\paragraph{The button mapping}
is different to enable navigation in the programmed track.
\begin{btnmap}
    \PluginExit
       \opt{HAVEREMOTEKEYMAP}{& }
        & Exit plugin \\

    \PluginCancel
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCCancel}
        & Stop (stay at position) \\
        
    \PluginSelect
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCSelect}
        & Start from / Stop at current position \\

    \PluginLeft{} / \PluginRight
       \opt{HAVEREMOTEKEYMAP}{& \PluginRCLeft{} / \PluginRCRight}
        & Seek in track \\

    \opt{scrollwheel}{\PluginScrollFwd{} / \PluginScrollBack}
    \nopt{scrollwheel}{\PluginUp{} / \PluginDown}
        \opt{HAVEREMOTEKEYMAP}{& \PluginRCUp{} / \PluginRCDown}
        & Adjust volume \\

    \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD,SAMSUNG_YH820_PAD}{
      \ButtonRec
        \opt{HAVEREMOTEKEYMAP}{& }
        & Sync tap \\}
\end{btnmap}

\paragraph{Navigation}
The display indicates the part properties and position in track as such:
\begin{verbatim}
    Metronome Track
    ---------------
       "Interlude"
    3/4@120 V-25
    P2/13: B1/5+2
\end{verbatim}
In this example, the part label is ``Interlude'', the meter is 3/4 and
the tempo 120 quarter beats per minute (bpm). The volume setting is at -25
and this is the second part of a track with 13 total. In that part,
the position is at the second beat of the first bar of five.

\paragraph{The syntax of programmed tracks}
in tempomap files follows the format defined by
\url{http://das.nasophon.de/klick/}.
Actually, the goal is to keep compatibility between klick and this
Rockbox metronome.
The parts of a track are specified one line each in this scheme
(pieces in [] optional):
\begin{verbatim}
[name:] bars [meter ]tempo[-tempo2[*accel|/accel] [pattern] [volume]
\end{verbatim}
The bar count and tempo always have to be specified, the rest is optional.

One example is
\begin{verbatim}
part I: 12 3/4 133
\end{verbatim}
for a part named ``part I'' , 12 bars long, in 3/4 meter with
a tempo of 133 quarter beats per minute.
Tempo changes are indicated by specifying a tempo range and the
acceleration in one of these ways:
\begin{verbatim}
0 4/4 90-150*0.25
0 4/4 150-90/4
16 4/4 100-200
\end{verbatim}
The first one goes from 90 to 150 bpm in an endless part with 0.25 bpm
increase per bar. The second one goes down from 150 to 90 with
4 bars per bpm change, which is the same acceleration as in the first line.
The last one is a part of 16 bars length that changes tempo from 100 to 200
smoothly during its whole lifetime (6.25 bpm/bar). For details on how the
acceleration works, see
\url{http://thomas.orgis.org/science/metronome-tempomath/tempomath.html}.

It is also possible to provide a tempo for each individual beat in a part
by separating values with a comma (no spaces),
\begin{verbatim}
varibeat: 3 4/4 135,90,78,100,120,120,99,100,43,94,120,133
\end{verbatim}
where the beat duration is first according to 135 bpm, then 90 bpm,
and so forth. You are required to provide a value for each beat
in all bars of the part.

You can provide a pattern that controls how the beats are played:
\begin{center}
\begin{tabular}{c|l}
    Symbol & Meaning \\
    \hline
    X & emphasized beat (Tick) \\
    x & normal beat (Tock) \\
    . & silent beat
\end{tabular}
\end{center}

Some examples:
\begin{verbatim}
default: 0 4/4 120 Xxxx
rockon2: 0 4/4 120 xXxX
  solea: 0 12/4 180 xxXxxXxXxXxX
shuffle: 0 12/12 120 x.xX.xx.xX..
  funky: 0 16/16 120 x.x.X..X.Xx.X..X
\end{verbatim}
The 12/12 for the shuffle create 1/4 triplets. Just do a bit of math;-)
This is still a metronome, not a drum machine, but it can act like a basic
one, helping you to figure out a certain rhythm within the meter.

The UI is developed so that it fits into the display of a Sansa Clip+ and
that is the hardware device it is tested on. It seems to work reasonably
on some other models in the simulator.

At last, a more complete tempomap file:
\begin{verbatim}
# An example track exercising the programmable Rockbox metronome
# or also http://das.nasophon.de/klick/.
     lead-in: 1 4/4 120 XXXX 0.5 # 4 emphasized but less loud ticks
       intro: 4 4/4 120          # standard beat
tearing down: 4     120-90       # changing tempo from 120 to 90
       break: 2 1/4 90           # 2 1/4 bars at 90
     rolling: 2 6/8 90           # 2 6/8 at same tempo (quarters!)
    rumbling: 4 3/4 90 X.x       # 3/4, first (tick) and last (tock)
     ramp-up: 8 2/4 90-150       # speeding up to 150 bpm again
        flow: 4     150          # steady 4/4 at 150 bpm
       death: 8     150-60       # going down to 60
       final: 1 1/1 60           # one last hit
\end{verbatim}
