chipmusic.org — Advanced LSDj Tutorial: The Ghost Channel (2013)
The thread accompanying tyler-barnes's video tutorial (s-tylerbarnes-ghost-channel-tutorial), and the place the name ghost channel comes from. Its value beyond the video is the reply by nitro2k01, which supplies the arithmetic the video leaves implicit, and bryface's note on what the trick costs.
Key claims#
- TylerBarnes, post 1: "This is a method I've devised for getting an extra channel of sound out of LSDj. This hidden channel of sound is given to us via custom waveforms + frame switching." Afterthought: squares taller than 3 pixels have to be paid for out of the sine's amplitude — "you must create more headroom by sacrificing some of your sine wave's amplitude".
- nitro2k01, post 6 — the harmonic series that fixes which second note you can have, given as overtone index → interval above the base note: 1 base, 2 one octave, 3 octave + 7 semitones (fifth), 4 two octaves, 5 two octaves + 4 semitones (major third), 6 two octaves + 7 semitones, 7 two octaves + 10 semitones (minor seventh), 8 three octaves.
- The spacing rule: "To figure out how many steps you should move the cursor to the right between each half wave, you calculate 16/x and that's the number of steps between each alternation. For example, for the 1 octave 5th, that's 16/3 = 5.333... so on average 5 1/3 steps between each step." (The rider's full cycle is therefore 32/x of the 32-sample wave; x is the overtone index.) Since 5⅓ is not a whole number of samples the pattern comes out uneven — his own reading of the generated list: "move the waveform up for 5 samples, leave the next 5 samples untouched, move the next 6 samples up, leave the next 5 samples untouched and so on." His one-line generator:
mod = 32/3; acc = 0; i=32; while(i--){console.log((i%mod)>=mod/2)}, varying the3for other overtones. - Why the higher overtones disappoint: "these are perfect intervals and slightly detuned from our modern equal temperament tuning", and the uneven step counts make "each interval sound a bit different due to aliasing". His verdict: "In practice, perhaps only index 3 (octave + fifth) is really useful, unless you want to get waves that sound 'bad'."
- Wave-editor shortcuts that cut the manual labour: SELECT+B starts a selection and the cursor extends it, UP/DOWN then offsets the whole selection (this also copies, paste with SELECT+A); holding A and pressing LEFT/RIGHT or UP/DOWN flips the selection horizontally/vertically. "By using these tricks and abusing symmetries in the waveforms, you can speed up the manual labor a lot." He also points at VSHIFT in the synth screen as a way to move the waveform while generating it.
- Riders other than a square work: "you can also make other waveforms, like a sawtooth by moving up 1,2,3,4,1,2,3,4 etc amplitude steps."
- TylerBarnes, post 7: every wave was drawn by hand, pixel by pixel, with no synth-screen generation — "No synth screen commands were used. They didn't produce the tones I was after." He had tried a saw rider "but I could get more octaves and a louder sine when using the square". After running nitro's script he agrees: "only the 1oct,5th is really useful. The others are too saturated and detuned … Having only one usable 5th out of five octaves is far from ideal, but I'm still happy to now have the option."
- bryface, post 14: "few people realize the WAV channel's potential for doing neat stuff with overtones and additive synthesis." The cost: "because you're additively piling on waveforms on top of each other, you need extra volume headroom, which means your wav sounds will sound quieter on average. But that can be worked around somewhat by making all your other instruments quieter." He was doing the same thing on a tune of his own, with waves that were not hand-drawn — "mostly trial and error to get the necessary overtones" — and asks for a generator: "i wonder if there's a tool that can autogenerate these waves and spit out an lsdsng.."
Practical takeaways#
- Pick the interval first: only the octave (overtone 2) and the octave + fifth (overtone 3) survive contact with equal temperament. Everything above sounds detuned and aliased.
- Draw one wave per (sine volume × rider octave) combination, then use selection-offset and mirroring instead of moving pixels one at a time.
- Budget the amplitude before drawing: rider height comes out of the sine's headroom, and the whole wave channel ends up quieter, so plan to bring the other channels down rather than the wave channel up.
Notable quotes#
"This hidden channel of sound is given to us via custom waveforms + frame switching." — TylerBarnes
"In practice, perhaps only index 3 (octave + fifth) is really useful, unless you want to get waves that sound 'bad'." — nitro2k01
"I would make a video about all this if I didn't hate my voice so much." — nitro2k01
Relevance to the wiki#
The only text source for a technique that is otherwise documented in video: one wave channel voicing two notes at once by additive drawing rather than by time-slicing. It also fixes the vocabulary (ghost channel / phantom channel) and names three people the wiki had no pages for.
Pages touched#
ghost-channel · harmonic-series · wavetable-programming · lsdj · game-boy-apu · channel-interleaving · tyler-barnes · nitro2k01 · bryface · chipmusic-org · levels-and-headroom