Skip to content

Core & Transport

Core

The Core module provides top-level Tone.js functions for managing the audio context.

Functions

1// Start the audio context (must be called from a user gesture)
2Core.start() // promise<unit>
3
4// Get the current audio time
5Core.now() // seconds
6
7// Get the most recent audio time
8Core.immediate() // seconds
9
10// Get references to global singletons
11Core.getContext() // Context.t
12Core.getTransport() // Transport.t
13Core.getDestination() // Destination.t
14
15// Wait for all audio buffers to load
16Core.loaded() // promise<unit>
17
18// Check Web Audio API support
19Core.supported() // bool
20
21// Get the Tone.js version string
22Core.version // string

Context

The Context wraps the native Web Audio AudioContext and provides additional features.

1// Create a new context
2let ctx = Context.make()
3
4// Properties
5ctx->Context.currentTime // seconds
6ctx->Context.state // audioContextState
7ctx->Context.sampleRate // float
8ctx->Context.lookAhead // seconds
9ctx->Context.setLookAhead(0.1)
10ctx->Context.latencyHint // string
11
12// Lifecycle
13ctx->Context.resume() // promise<unit>
14ctx->Context.close() // promise<unit>
15ctx->Context.dispose()

Transport

The Transport is Tone.js's main timekeeper. It provides scheduling, tempo, time signature, and looping.

Playback

1let transport = Core.getTransport()
2
3transport->Transport.start()
4transport->Transport.startAt(~time="0")
5transport->Transport.stop()
6transport->Transport.pause()
7transport->Transport.toggle()
8transport->Transport.cancel()

Scheduling

1// Schedule a one-time event
2let id = transport->Transport.schedule(time => {
3 Console.log2("event at", time)
4}, "0:0:0")
5
6// Schedule a repeating event
7let id2 = transport->Transport.scheduleRepeat(time => {
8 Console.log2("repeat at", time)
9}, "4n")
10
11// Schedule a one-time event that auto-clears
12let _ = transport->Transport.scheduleOnce(_time => {
13 Console.log("once!")
14}, "1m")
15
16// Clear a scheduled event
17transport->Transport.clear(id)

Tempo & Time

1// BPM (returns Param.t for automation)
2transport->Transport.bpm
3
4// Position
5transport->Transport.position // "0:0:0"
6transport->Transport.setPosition("1:0:0")
7transport->Transport.seconds // float
8transport->Transport.ticks // int
9transport->Transport.state // "started" | "stopped" | "paused"
10
11// Time signature
12transport->Transport.timeSignature // int
13transport->Transport.setTimeSignature(4)
14
15// Swing
16transport->Transport.swing // normalRange
17transport->Transport.setSwing(0.5)

Looping

1transport->Transport.setLoop(true)
2transport->Transport.setLoopStart("0:0:0")
3transport->Transport.setLoopEnd("4:0:0")
4
5// Or set both at once
6transport->Transport.setLoopPoints("0:0:0", "4:0:0")

Destination

Destination represents the master output. All audio is routed here by default.

1let dest = Core.getDestination()
2
3dest->Destination.volume // Param.t
4dest->Destination.mute // bool
5dest->Destination.setMute(true)

AudioNode

AudioNode is the base type for all audio-producing and audio-processing nodes.

1// Connect nodes together
2nodeA->AudioNode.connect(nodeB)
3nodeA->AudioNode.disconnect()
4nodeA->AudioNode.disconnectFrom(nodeB)
5
6// Connect to the speakers
7node->AudioNode.toDestination()
8
9// Chain multiple nodes: A -> B -> C -> ...
10nodeA->AudioNode.chain([nodeB, nodeC])
11
12// Fan out: A -> B, A -> C
13nodeA->AudioNode.fan([nodeB, nodeC])
14
15// Properties
16node->AudioNode.numberOfInputs // int
17node->AudioNode.numberOfOutputs // int
18node->AudioNode.channelCount // int
19
20// Cleanup
21node->AudioNode.dispose()
Was this page helpful?