Commit a9447b2

ISSOtm committed on
Add mdBook-rendered manual
Looks slick af if you ask me.
Maybe it would be better with the EarthBound font, I'm not sure.
commit a9447b2a9bfb0be44a17d8717710933c7b34a2c7 parent 750a462
30 changed files +412−0
Added.github/workflows/manual.yml +44−0
@@ -0,0 +1,44 @@
1 name: Render manual to Pages
2
3 on:
4 push:
5 branches: ["hUGETracker"]
6 paths: ["manual/**"]
7 workflow_dispatch:
8
9 # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
10 permissions:
11 contents: read
12 pages: write
13 id-token: write
14
15 # Allow one concurrent deployment
16 concurrency:
17 group: "pages"
18 cancel-in-progress: true
19
20 jobs:
21 deploy:
22 environment:
23 name: github-pages
24 url: ${{ steps.deployment.outputs.page_url }}
25 runs-on: ubuntu-latest
26 steps:
27 - name: Checkout
28 uses: actions/checkout@v3
29 - name: Setup Pages
30 uses: actions/configure-pages@v2
31 - name: Install mdBook and some plugins
32 uses: jontze/[email protected]
33 with:
34 token: ${{ github.token }}
35 use-linkcheck: true
36 - name: Render manual
37 run: mdbook build manual/
38 - name: Upload artifact
39 uses: actions/upload-pages-artifact@v1
40 with:
41 path: 'manual/book/html/'
42 - name: Deploy to GitHub Pages
43 id: deployment
44 uses: actions/deploy-pages@v1
Addedmanual/.gitignore +1−0
@@ -0,0 +1 @@
1 book
Addedmanual/book.toml +18−0
@@ -0,0 +1,18 @@
1 [book]
2 authors = ["SuperDisk <[email protected]>", "ISSOtm <[email protected]>"]
3 language = "en"
4 multilingual = false
5 src = "src"
6 title = "hUGETracker manual"
7
8 [output.html]
9 curly-quotes = true
10 print = { enable = true }
11 git-repository-url = "https://github.com/SuperDisk/hUGETracker"
12 edit-url-template = "https://github.com/SuperDisk/hUGETracker/edit/master/manual/{path}"
13 site-url = "/hUGETracker/"
14
15 [output.linkcheck]
16 follow-web-links = true
17 traverse-parent-directories = false
18 optional = true
Addedmanual/src/SUMMARY.md +21−0
@@ -0,0 +1,21 @@
1 [Introduction](./introduction.md)
2
3 # Contents
4
5 - [Glossary](./glossary.md)
6 - [Interface](./interface.md)
7 - [VU meters and oscilloscopes](./vu-meters-oscilloscopes.md)
8 - [Tracker grid](./tracker-grid.md)
9 - [Order editor](./order-editor.md)
10 - [Song components](./song-components.md)
11 - [Toolbar](./toolbar.md)
12 - [Tabs]()
13 - [General](./tabs/general.md)
14 - [Instruments](./tabs/instruments.md)
15 - [Waves](./tabs/waves.md)
16 - [Comments](./tabs/comments.md)
17 - [Effect editor](./effect-editor.md)
18 - [Effect reference](./effect-reference.md)
19 - [Hotkeys](./hotkeys.md)
20 - [Routines](./routines.md)
21 - [Miscellaneous](./miscellaneous.md)
Addedmanual/src/effect-editor.md +7−0
@@ -0,0 +1,7 @@
1 # Effect editor
2
3 **TODO: updated screenshots**
4
5 The effect editor is a tool for creating effect values in the tracker grid.
6 This is especially useful for things like panning, or master volume, which operate on a bit level and may be difficult to input manually.
7 Open the editor by double-<kbd>left click</kbd>ing in the tracker grid, or with the <kbd>right click</kbd> menu.
Addedmanual/src/effect-reference.md +27−0
@@ -0,0 +1,27 @@
1 # Effect reference
2
3 The hUGETracker effect codes are intentionally similar to ProTracker and FastTracker's.
4 If you know those, then many of these effects will look familiar to you.
5
6 Effect | Name | Description
7 -------|-------------------|------------
8 `0xy` | Arpeggio | On every tick switch between the playing note, <math><mi>note</mi> <mo>+</mo> <mi>x</mi></math>, and <math><mi>note</mi> <mo>+</mo> <mi>y</mi></math>, where <var>x</var> and <var>y</var> are values in semitones. Can be used to create "chords" or a strum effect.
9 `1xx` | Portamento up | Slide the pitch up by <var>xx</var> units every tick.
10 `2xx` | Portamento down | Slide the pitch down by <var>xx</var> units every tick.
11 `3xx` | Tone portamento | *Instead of playing the cell's note*, slide the pitch towards that note by <var>xx</var> units every tick. Stop when the note is reached. **This effect cannot be used in a cell with an instrument value.**
12 `4xy` | Vibrato | Rapidly switch between the playing note and <math><mi>note</mi> <mo>+</mo> <mi>y</mi></math>, at the rate of <var>x</var>, where <var>y</var> is a value in units. Valid values for <var>x</var> are 0, 1, 3, 7, and F. This is similar to arpeggio, except you can control the frequency, and the amount is specified in units rather than semitones.
13 `5xx` | Set master volume | Set the [master volume control][NR50] of the Game Boy for the left and right speakers. Use the effect editor to create one of these effects. *Note that a volume of 0 is not completely silent!*
14 `6xx` | Call routine | Call a user-defined [routine](./routines.md). Will crash if an invalid routine is specified.
15 `7xx` | Note delay | Wait <var>xx</var> ticks before playing the note in this cell. *The note won't be played at all if `xx` is strictly greater than the tempo!*
16 `8xx` | Set panning | Set [which channels play on which speakers][NR51]. Use the effect editor to create one of these effects. Can also be used as a mute for a channel, by setting it to output on neither left nor right.
17 `9xx` | Set duty cycle | Select the duty cycle for either channel 1 or channel 2. If this effect appears on the noise or wave channels, it will affect channel 2. Valid values for <var>xx</var> are `00`, `40`, `80`, or `C0`. Under the hood, the <var>xx</var> value is written directly into CH1 or CH2's [length register][NR11], so you could theoretically achieve other effects than just duty cycle changing.
18 `Axy` | Volume slide | Slide the note's volume up by <var>x</var> units, and then down by <var>y</var> units. *This effect actually retriggers the note on each tick*, which might not be noticeable for instruments without length or envelope, but may sound bad if those are present. It is recommended to use either instrument envelopes, or the `C` command instead, if you can. **This effect does not work in the same cell as a note/instrument!**
19 `Bxx` | Position jump | Jump to order <var>xx</var>.
20 `Cxx` | Set volume | Set the volume of the channel to <var>xx</var>. **Must be accompanied by a note and instrument to work** (except on channel 3). Valid values range from `00` to `0F`.
21 `Dxx` | Pattern break | Jump to the next order, and start on row <var>xx</var>.
22 `Exx` | Note cut | Cut the note short after <var>xx</var> ticks.
23 `Fxx` | Set tempo | Set the number of ticks per row to <var>xx</var>. Can be used in an alternating fashion to create a swing beat.
24
25 [NR11]: https://eldred.fr/pandocs/Audio_Registers.html#ff11--nr11-channel-1-length-timer--duty-cycle
26 [NR50]: https://eldred.fr/pandocs/Audio_Registers.html#ff24--nr50-master-volume--vin-panning
27 [NR51]: https://eldred.fr/pandocs/Audio_Registers.html#ff25--nr51-sound-panning
Addedmanual/src/glossary.md +22−0
@@ -0,0 +1,22 @@
1 # Glossary
2
3 Term | Definition
4 -----------|------------
5 Cell | A note, an instrument, and an effect. This is a single row in a **pattern**.
6 Channel | One of the Game Boy's 4 voices for producing sound. There are 2 pulse channels, one wave channel, and one noise channel.
7 Duty | The parameter that determines the waveform of a pulse channel. A pulse channel has two states (on or off), and the [duty cycle](https://en.wikipedia.org/wiki/Duty_cycle) specifies what percentage of the time it's on. A pulse channel with 50% duty would emit a square wave.
8 Effect | Consists of an **effect code** and **effect parameter**. Used for a variety of reasons, including changing the way a specific note sounds, changing global settings such as master volume, affecting song **tempo**, or calling your own custom code.
9 Effect code | A hexadecimal digit which specifies which **effect** to use.
10 Effect parameter | Two hexadecimal digits which tweak the **effect**'s behavior.
11 Instrument | A bunch of parameters which change the way a **channel** produces sound. Each **cell** must include an instrument number.
12 Octave offset | When entering **note** values into the **tracker grid**, the value of the note is increased by <math><mn>12</mn> <mo>×</mo> <mi>octave offset</mi></math>, to allow for more natural entry of higher notes.
13 Order | A row of four **pattern** indices. An **order** is how you arrange **patterns** into a structured **song**.
14 Order table | A list of **orders**, representing the structure of the **song**.
15 Pattern | A list of 64 **cells**, used to represent 2 measures of music. This is the basic building block of your **song**.
16 Render | Exporting a **song** as a `.wav` or `.mp3` file, so anybody can listen to them without hUGETracker or an emulator installed.
17 Routine | A custom **effect** written in [Game Boy assembly](https://eldred.fr/gb-asm-tutorial). An advanced featuer that would typically be used when integrating hUGETracker into a homebrew game, or perhaps for making custom effects.
18 Song | The whole track, which includes **patterns**, **orders**, **instruments**, **waves**, and **routines**.
19 Sweep | A change of pitch over time. The Game Boy sound hardware provides the ability for the first pulse **channel** to perform a sweep as specified by some **instrument** parameters.
20 Tick | Every time the sound driver update function is called, it advances the **song** by one **tick**. This is usually done at around 60 Hz.
21 Tempo | The tempo of a song specifies how many **ticks** have to elapse before switching to the next row. The greater it is, the slower the song is.
22 Wave | A waveform which changes the timbre of the wave channel when selected. You can draw these in the wave tab. They must be associated to an **instrument** in the instruments tab.
Addedmanual/src/hotkeys.md +19−0
@@ -0,0 +1,19 @@
1 # Hotkeys
2
3 The keyboard interface to hUGETracker is intentionally designed to be similar to ModPlug's.
4 If you are used to it, then most of these keybindings will look familiar.
5
6 Hotkey | Action | Description
7 ----------------------------------------------|----------------|------------
8 <kbd>Ctrl</kbd>+<kbd>C</kbd> | Copy | Copies the selected pattern data into the clipboard.
9 <kbd>Ctrl</kbd>+<kbd>X</kbd> | Cut | Copies the selected pattern data into the clipboard, then erases the selected pattern data.
10 <kbd>Ctrl</kbd>+<kbd>V</kbd> | Paste | Pastes any pattern data stored in the clipboard.
11 <kbd>Shift</kbd>+<kbd>V</kbd> | Flood paste | Repeatedly pastes stored pattern data until reaching the bottom of the pattern. Useful for repeating beats/phrases/swing tempos.
12 <kbd>Ctrl</kbd>+<kbd>Q</kbd> | Semitone up | Transposes the selected notes one semitone up.
13 <kbd>Ctrl</kbd>+<kbd>A</kbd> | Semitone down | Transposes the selected notes one semitone down.
14 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Q</kbd> | Octave up | Transposes the selected notes one octave up.
15 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>A</kbd> | Octave down | Transposes the selected notes one octave down.
16 <kbd>Ctrl</kbd>+<kbd>L</kbd> | Select channel | Selects the entire pattern that the cursor is located in.
17 <kbd>Delete</kbd> | Erase | Erases the selected note data.
18 <kbd>Ctrl</kbd>+<kbd>Z</kbd> | Undo | Undoes the previous action.
19 <kbd>Ctrl</kbd>+<kbd>Y</kbd> | Redo | Redoes that action last undone.
Addedmanual/src/interface.md +13−0
@@ -0,0 +1,13 @@
1 # Interface
2
3 The hUGETracker interface is styled similarly to conventional trackers such as [ModPlug Tracker](https://www.modplug.com) / [OpenMPT](https://openmpt.org) or [ProTracker](https://en.wikipedia.org/wiki/ProTracker).
4 If you're comfortable composing in a tracker interface, then you'll feel right at home.
5
6 **TODO: screenshot of the pattern interface**
7
8 Legend:
9 1. [VU meters and oscilloscopes](./vu-meters-oscilloscopes.md)
10 1. [Tracker grid](./tracker-grid.md)
11 2. [Order editor](./order-editor.md)
12 3. [Song components](./song-components.md)
13 4. [Toolbar](./toolbar.md)
Addedmanual/src/introduction.md +29−0
@@ -0,0 +1,29 @@
1 ![hUGETracker logo](https://camo.githubusercontent.com/47f1b09f240985f1e93c3188ebb73f503a050430a67f18a12411838cc41270b5/68747470733a2f2f6e69636b66612e726f2f696d616765732f485547454c6f676f2e676966)
2
3 Hi!
4 This is the manual to [hUGETracker](https://github.com/SuperDisk/hUGETracker).
5 I wrote this program because there wasn't a music editing tool for the Game Boy which fulfilled the following requirements:
6
7 - Has a tracker interface
8 - Produces small output
9 - ...which is usable for homebrew titles
10 - Is open-source
11
12 But now, there is!
13
14 I'd like to acknowledge:
15
16 1. [Christian Hackbart](https://github.com/TetrisSQC) for creating UGE, which serves as hUGETracker's emulation core;
17 1. [Rusty Wagner](https://github.com/D0ntPanic) for writing the sound code which was adapted for UGE;
18 1. [Lior "LIJI32" Halphon](https://github.com/LIJI32) for SameBoy, a super-accurate emulator which I used for debugging, and copied the LFSR code from;
19 1. [Declan "Dooskington" Hopkins](https://github.com/Dooskington) for [GameLad](https://github.com/Dooskington/GameLad), which I yanked the timing code from;
20 1. [Eldred "ISSOtm" Habert](https://github.com/ISSOtm), who helped me navigate the Game Boy's peculiarities, and for writing [an alternative sound driver](https://github.com/ISSOtm/fortISSimO) for the tracker;
21 1. [Evelyn "Eevee" Woods](https://github.com/eevee), whose article on the Game Boy sound system was valuable in writing the music driver;
22 1. [B00daW](https://battleofthebits.org/barracks/Profile/b00daw), for invaluable testing and debugging support on Linux;
23 1. [The folks who created RGBDS](https://github.com/gbdev/rgbds/contributors), the assembler used for building ROMs from songs.
24
25 I hope you enjoy composing in hUGETracker, and if you make any cool songs, I'd love to hear from you and potentially include them as demo tunes that come with the tracker.
26
27 E-mail me at [[email protected]](mailto:[email protected]) and get in touch!
28
29 —Nick "[SuperDisk](https://nickfa.ro)" Faro
Addedmanual/src/miscellaneous.md +19−0
@@ -0,0 +1,19 @@
1 # Miscellaneous
2
3 Here are some random things about hUGETracker.
4
5 ## The clipboard
6
7 The clipboard format for hUGETracker is compatible with [ModPlug Tracker](https://www.modplug.com) / [OpenMPT](https://openmpt.org)!
8 This means that you can convert your existing `.mod`, `.xm`, `.s3m`, or `.it` chiptunes into Game Boy tunes very quickly by just copying and pasting your patterns into hUGETracker.
9 Note that the effects are not converted when pasted, so you'll need to manually adjust the effects to work in hT.
10
11 ![Screenshot of the clipboard format of hUGETracker and ModPlug](img/clipboards.png)
12
13 ![Screenshot of the same clipboards, pasted into hUGETracker and ModPlug](img/pasted.png)
14
15 ## File format
16
17 The hUGETracker file format is very simple; the reading/writing code [can be found here](https://github.com/SuperDisk/hUGETracker/blob/hUGETracker/song.pas).
18
19 The file format might change to an NBT-, JSON-, or XML-based format in the future.
Addedmanual/src/order-editor.md +24−0
@@ -0,0 +1,24 @@
1 <figure style="float: right;">
2
3 ![Screenshot of the order editor](img/order_editor.png)
4
5 </figure>
6
7 # Order editor
8
9 The **order editor** is where you arrange the structure of your song.
10 Since most music tends to be fairly repetitive (a single drum pattern is often enough for the majority of the song, for instance), you can define any number of patterns and arrange them here.
11
12 Each column corresponds to a channel in the tracker grid.
13
14 Much like the tracker grid, the order editor's highlighted row moves downward each time a new **order** is reached.
15 The song loops back to the first order when the last order is finished playing.
16
17 An **order** is a row in this table.
18
19 <kbd>Right-click</kbd> to open the popup menu, where you can:
20
21 - **Insert new row** — Inserts a row with all brand-new pattern numbers.
22 - **Insert empty row** — Inserts a row with all zeros in it.
23 - **Duplicate row** — Inserts a row which has the same pattern numbers as the one currently highlighted.
24 - **Replicate row** — Inserts a row with all brand-new pattern numbers, and these new patterns are copies of the highlighted row's.
Addedmanual/src/routines.md +5−0
@@ -0,0 +1,5 @@
1 # Routines
2
3 Routines allow you to implement your own effects.
4 The feature is currently not documented here, and is subject to change soon.
5 If you're *really* interested, check out the `hUGEDriver/driverLite.z80` file.
Addedmanual/src/song-components.md +12−0
@@ -0,0 +1,12 @@
1 # Song components
2
3 <figure style="float: left;">
4
5 ![Screenshot of the song components](img/song_components.png)
6
7 </figure>
8
9 The components of a hUGETracker song are shown here.
10 Listed are instruments along with their names, waves numbered from 0 to 15, and routines numbered from 0 to 15.
11
12 Double-<kbd>left click</kbd>ing on any of these will bring you to the tab for editing it.
Addedmanual/src/tabs/comments.md +6−0
@@ -0,0 +1,6 @@
1 # Comments
2
3 **TODO: updated screenshot**
4
5 The **comments** tab allows you to include a comment section with your song, which you can use for acknowledgements, contact information, or anything you want.
6 The comment is limited to 255 characters.
Addedmanual/src/tabs/general.md +9−0
@@ -0,0 +1,9 @@
1 # General
2
3 **TODO: updated screenshot**
4
5 The **general** tab allows specifying the name, artist, and tempo of your song.
6 Name and artist are limited to 255 characters each.
7 Tempo is limited to a value between 0 and 20.
8
9 > The **tempo** actually has an inverse relationship to the speed of the song: a higher value results in a slower song.
Addedmanual/src/tabs/instruments.md +25−0
@@ -0,0 +1,25 @@
1 # Instruments
2
3 **TODO: updated screenshot**
4
5 Legend:
6
7 1. **Instrument number**: This selects which instrument of its type to edit. Ranges from 1 to 15 (inclusive).
8 2. **Instrument name**: This is the name for the instrument. It is shows in the instrument combobox in the [toolbar](../toolbar.md) and in the [song components](../song-components.md).
9 3. **Instrument type**: Selects which "type" of instrument this is. Can be **square**, for instruments to be played on the pulse channels; **wave**, for instruments to be played on the wave channel; and **noise**, for instruments to be played on the noise channel.
10 4. **Length**: When enabled, a playing note will be cut off immediately after a certain amount of time elapses.
11 5. **Test C-5**: Plays a test note for a few seconds, to test what the instrument will sound like.
12 6. **Import/Export buttons**: Used to import or export an instrument's settings to/from a file.
13 7. **Sweep time**: Selects the "sweep time" for the note to take. The greater the value, the slower the sweep.
14 8. **Sweep direction**: Selects the direction of the sweep the note should take. "Up" portamentos the note up, "Down" portamentos it down.
15 9. **Sweep size**: Selects the magnitude of sweep for the note to take per "tick" as specified by sweep time.
16 10. **Duty**: Selects the timbre of note to play. Each setting sounds different, and they are useful when you don't want both of the duty channels to clash with one another.
17 11. **Start vol**: Selects the starting volume for the envelope. When there's no change on the envelope, this functions simple as the volume for the note, unless overridden by a [volume effect command](../effect-reference.md).
18 12. **Direction**: This specifies which direction for the envelope to go.
19 13. **Change**: This specifies for how long the envelope goes. The higher the value, the more the note will fade in or out.
20 14. **Wave volume**: Specifies at what volume a wave instrument shall play, unless overridden by a [volume effect command](../effect-reference.md).
21 15. **Waveform**: Specifies which waveform should play as part of this instrument. See [waves](./waves.md).
22 16. **Shift clock mask**: A component of the noise generation algorithm. Tweak it however you want.
23 17. **Dividing ratio**: A component of the noise generation algorithm. Tweak it however you want.
24 18. **7-bit counter**: When checked, the instrument will sound more like a musical tone rather than noise.
25 19. **Randomize**: Rather than manually tweaking the sliders, you can click this button until you hear something you like. Plays a random configuration of sliders, with a random length, at a random pitch.
Addedmanual/src/tabs/waves.md +7−0
@@ -0,0 +1,7 @@
1 # Waves
2
3 **TODO: updated screenshot**
4
5 The **waves** tab allows you to edit **waveforms** for use by instruments.
6 Use the spinner to select which wave you want to edit, and draw manually with the mouse in the displayed waveform viewer.
7 Waves can also be imported from and exported to files.
Addedmanual/src/toolbar.md +19−0
@@ -0,0 +1,19 @@
1 # Toolbar
2
3 ![Screenshot of the toolbar](img/toolbar.png)
4
5 The toolbar contains various functions that are useful when writing music:
6
7 - **Save as...** — Saves your song to a file.
8 - **Start** — Plays your song from the very beginning.
9 - **Cursor** — Plays your song starting from the current cursor position. Useful when editing a specific pattern.
10 - **Stop** — Halts playback.
11 - **Export .GB** — Assembles your song into a standalone `.gb` file, for playback in an emulator or a real Game Boy!
12 - **Export .GBS** — Assembles your song into a standalone `.gbs` file, for playback in a program such as [gbsplay](https://mmitch.github.io/gbsplay).
13 - **Render song** — Exports your song in either `.wav` or `.mp3` format.
14 - **Panic** — Silences all channels immediately. Useful when something has happened, and a tone is playing that you want to make stop.
15 - **Octave** — Selects the octave offset for the [tracker grid].
16 - **Instrument** — Selects the instrument with which to input new notes in the [tracker grid]. Any new note entered will be accompanied by this instrument number, and a preview note will play with this instrument.
17 - **Step** — Selects the **step** for the [tracker grid]. After inputting a new note, the cursor will move down by this many rows; useful for inputting drum tracks or arpeggios.
18
19 [tracker grid]: ./tracker-grid.md
Addedmanual/src/tracker-grid.md +85−0
@@ -0,0 +1,85 @@
1 # Tracker grid
2
3 ![Screenshot of the tracker grid](./img/tracker_grid.png)
4
5 The **tracker grid** displays four patterns together.
6 This represents one row in the **order table**, and is the component used to compose a song.
7 When a different order is selected in the **order table**, the patterns in the **tracker grid** are updated to reflect their contents.
8
9 <style>
10 .note {
11 color: red;
12 fill: red;
13 }
14 .instr {
15 color: green;
16 fill: green;
17 }
18 .fx {
19 color: #55f;
20 fill: #55f;
21 }
22 rect { fill-opacity: 0.5; }
23
24 figure { float: left; }
25
26 use { stroke: red; stroke-width: 6px; }
27 </style>
28
29 <figure>
30 <svg width="191" height="623">
31 <image href="img/pattern.png"/>
32 <rect x="0" y="32" width="50" height="589" class="note"/>
33 <rect x="58" y="32" width="34" height="589" class="instr"/>
34 <rect x="130" y="32" width="50" height="589" class="fx"/>
35 </svg>
36 </figure>
37
38 In a given pattern, there are 64 rows of cells.
39 Each cell is divided into three parts: the **<span class="note">note</span>**, the **<span class="instr">instrument</span>**, and the **<span class="fx">effect</span>**.
40
41 A note ranges from `C-3` to `B-8`, and is the pitch of the tone that will play on that cell.
42
43 An instrument is a value from 01 to 15, which specifies which instrument parameters will be applied to the playing note.
44
45 An effect is the combination of an **effect code** (the first hexadecimal digit, from `0` to `F`) and its **effect parameter** (the last two hexadecimal digits, from `00` to `FF`).
46 See the [effect reference](./effect-reference.md) for more details.
47 You can use the Effect Editor to create the effect values for you, if you're not comfortable entering hexadecimal directly.
48
49 The keyboard is used to enter values into the three parts of a cell: the keys <kbd>Q</kbd> through <kbd>\\</kbd>, <kbd>A</kbd> through <kbd>\`</kbd>, and <kbd>Z</kbd> through <kbd>/</kbd> each represent an octave with which to enter notes.
50 The **octave offset** can be modified in the toolbar to allow for higher or lower note values.
51
52 The numeric keys can enter values into the instrument column.
53
54 The numeric keys, as well as keys <kbd>A</kbd> through <kbd>F</kbd>, enter values into the effect column.
55
56 <svg width="780" height="110" style="clear: left;">
57 <defs>
58 <g id="arrow">
59 <polyline points="0,70 0,0"/>
60 <polyline points="-13,13 0,0 13,13" fill="none"/>
61 </g>
62 </defs>
63 <image href="img/highlighted_row.png"/>
64 <use href="#arrow" x="300" y="65"/>
65 </svg>
66
67 While a song is playing, the highlighted row, representing the row currently being played, moves downwards on the patterns.
68 The tempo of your song (speed at which the highlighted row moves) can be adjusted in the General tab.
69
70 <svg width="780" height="251">
71 <image href="img/channel_headers.png"/>
72 <use href="#arrow" x="15" y="50"/>
73 <use href="#arrow" x="407" y="50"/>
74 </svg>
75
76 The **headers** of the channels are clickable, and will mute/unmute the playback of a specific channel when playing a song.
77
78 <figure>
79
80 ![Test](img/right_click_menu.png)
81
82 </figure>
83
84 The tracker grid also features a right-click menu for opening the [effect editor](./effect-editor.md), and performing various editing tasks.
85 These can all be accomplished by [using the hotkeys](./hotkeys.md) as well.