---
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)
)`}
/>