# Write ode by hand

> Skip the prompt and write a track yourself. Free on every account, with no key and no plan. A first loop, one line at a time.

Every track in Songcode is a short text file in ode, and you can write one yourself. Writing by hand needs no prompt, no API key and no plan, so it is free on every account. Nothing is sent to a model: the song is read, checked and played in your browser.

## Start a track by hand

On an empty stage, under the example prompts, press **write it by hand**. **learn ode** next to it opens this page.

![The empty stage. write it by hand is under the example prompts.](https://docs.songco.de/img/write-by-hand.webp)

The editor opens on a short loop that already plays: drums, a bass and a chord part over four bars.

![The loop a track written by hand starts from. No key is saved.](https://docs.songco.de/img/hand-start.webp)

Press play, then change a line and press **update** to hear it. The loop is kept as a draft from your first change, so a start you leave alone leaves nothing behind in your library.

Everything else works as it does on a generated track. You can [publish and share](https://docs.songco.de/app/save-and-share/) it, open it in the [stems view](https://docs.songco.de/app/stems/), [export](https://docs.songco.de/app/export/) audio, stems and MIDI, and, with a key or a plan, regenerate one stem while you write the rest. When **composed by** is on for your [public page](https://docs.songco.de/app/public-page/), a track written by hand shows **by hand** there and **written: by hand** on its song page.

## The loop you start with

```ode
ode
title "untitled"
tempo 120
key c minor
form loop 4
chords [Cm7 | Abmaj7 | Fm7 | G7]

// a stem is one part. x is a hit, . is a rest: sixteen steps to a bar.
stem drums: club {
  kick  [x... x... x... x...]
  snare [.... x... .... x...]
  hat   [..x. ..x. ..x. ..x.]
}

// a pitched stem plays the chords. root is each chord's lowest note.
stem bass: fmbass {
  rhythm [x..x ..x. x... x.x.]
  tones  [root]
  octave 2
}

stem keys: epiano {
  rhythm [x... .... x... ....]
  tones  [all]
}

// how loud each stem is. change a number, then press update.
mix {
  drums 0db
  bass  -4db
  keys  -8db
}
```

Read it from the top:

- `ode` is the first line of every track. It says the text is ode, version 1.
- `title`, `tempo`, `key`, `form` and `chords` are the plan. `form loop 4` makes a four bar loop. `chords` gives one chord a bar, split by `|`.
- Each `stem` is one part: a name, a colon, a sound, and a block in `{ }`.
- `mix` sets how loud each stem is.
- `//` starts a comment. Songcode skips it.

## Change the drums

A drum row is sixteen steps a bar. `x` is a hit and `.` is a rest, and the spaces only make the beats easy to count. Move the snare and add a second kick:

```ode
stem drums: club {
  kick  [x... ..x. x... ....]
  snare [.... x... .... x..x]
  hat   [x.x. x.x. x.x. x.xx]
}
```

`club` is the drum kit. Try `live` or another name from [the drum kits](https://docs.songco.de/audio-engine/sounds/#drum-kits).

## Change the chords

The bass and the keys follow the chord chart, so changing one line changes both:

```ode
chords [Fm9 | Dbmaj7 | Ab | Eb]
```

`tones [root]` plays each chord's lowest note. `tones [all]` plays the whole chord. Change `octave 2` to `octave 1` to drop the bass an octave.

## Add a melody

A `line` row writes notes by name, each with its length: `/4` is a quarter note, `/8` an eighth, `/2` a half. A note with no length keeps the one before it, and `r` is a rest. Each bar has to add up to a whole bar.

```ode
stem lead: sawlead {
  line [c5/4 eb5/8 f5 g5/4 r | ab5/4 g5 f5/2 | eb5/4 f5 g5/2 | d5/2 r/2]
}
```

Add the stem above `mix`, then give it a level there: `lead -10db`. Swap `sawlead` for any [instrument](https://docs.songco.de/audio-engine/sounds/#instruments).

## When something is wrong

Songcode checks the text every time it changes. If a line cannot be read, the status line turns red and says which line and what is wrong, and the other stems keep playing. [Errors](https://docs.songco.de/app/code/#errors) lists what each message means, and `⌘Z` steps back.

## Where to go next

- [The code view](https://docs.songco.de/app/code/) covers the editor, **update** and the playing rows that light up.
- [ode, the song format](https://docs.songco.de/ode/language/) has every part of a track: sections, the arrange table, blocks that change a stem for part of the song, lyrics.
- [Rows and settings](https://docs.songco.de/ode/rows-and-settings/) is everything that goes inside a stem.
- [Sounds](https://docs.songco.de/audio-engine/sounds/) lists every kit and instrument by name.
- Open any generated track and read it. Generated songs are written in the same language, so they are worked examples.

People who write ode are odists. We would love to hear what you make: share it in the [Songcode Discord](https://discord.gg/kM69cqxhA2).

---

This page on the web: https://docs.songco.de/ode/write-by-hand/
Every page of the Songcode docs, for agents: https://docs.songco.de/llms.txt (index) and https://docs.songco.de/llms-full.txt (all of it in one file).
