--- title: Tonal Functions layout: ../../layouts/MainLayout.astro --- import { MiniRepl } from '../../docs/MiniRepl'; import { JsDoc } from '../../docs/JsDoc'; # Tonal Functions These functions use [tonaljs](https://github.com/tonaljs/tonal) to provide helpers for musical operations. ### voicing() Here's an example of how you can play chords and a bassline: *2") .dict('ireal').layer( x=>x.struct("[~ x]*2").voicing() , x=>n("0*4").set(x).mode("root:g2").voicing() .s('sawtooth').cutoff("800:4:2") )`} /> ### scale(name) ### transpose(semitones) Transposes all notes to the given number of semitones: ").note()`} /> This method gets really exciting when we use it with a pattern as above. Instead of numbers, scientific interval notation can be used as well: ").note()`} /> ### scaleTranspose(steps) Transposes notes inside the scale by the number of steps: *2") .note()`} /> ### rootNotes(octave = 2) Turns chord symbols into root notes of chords in given octave. *2".rootNotes(3).note()`} /> Together with layer, struct and voicings, this can be used to create a basic backing track: *2".layer( x => x.voicings('lefthand').struct("[~ x]*2").note(), x => x.rootNotes(2).note().s('sawtooth').cutoff(800) )`} />