🎻 Controlling Sonic Pi from the command line
Clone or download
Latest commit 9edf4e3 Dec 27, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
old sonic-pi-tools logs (Unpretty log formatting) Jan 27, 2017
priv Add test case for issue #12 May 14, 2017
src cargo format Aug 24, 2018
.gitignore Start Rust rewrite Jan 20, 2017
.travis.yml Test explicit versions on CI Jan 17, 2018
CODE_OF_CONDUCT.md Add code of conduct Jan 22, 2017
Cargo.lock start-server looks in ~/Applications for Sonic Pi Dec 25, 2017
Cargo.toml Print logs with colours Feb 21, 2017
LICENCE Add licence Feb 21, 2017
README.md Tweak wording Dec 27, 2018


Build Status

Sonic Pi Tool

sonic-pi-tool is a handy command line utility for playing with the Sonic Pi server. It can be used instead of the Sonic Pi GUI for all your music making needs :)

It's ideal for use with sonicpi.vim.


From source

If you have the Rust programming language installed Sonic Pi Tool can be installed like so:

cargo install --git https://github.com/lpil/sonic-pi-tool/

To upgrade to a newer version use the --force flag.

cargo install --git https://github.com/lpil/sonic-pi-tool/ --force

sonic-pi-tool may not build on older versions of Rust. Please see the CI configuration for which versions are explicitly supported.


Sonic Pi Tool can be installed like so using the Homebrew package manager for OSX:

$ brew tap Cj-bc/sonic-pi-tool
$ brew install sonic-pi-tool
# or
$ brew install Cj-bc/sonic-pi-tool/sonic-pi-tool

Homebrew formula is here: Cj-bc/homebrew-sonic-pi-tool



sonic-pi-tool check
# => Sonic Pi server listening on port 4557

Used to check if the Sonic Pi server is running. If the server isn't running many of the tool's commands (such as eval) will not work.

This command returns a non-zero exit code if the server is not running.


sonic-pi-tool eval "play :C4"
# *ding*

Take a string Sonic Pi code and send it to the Sonic Pi server to be played.


sonic-pi-tool eval-file path/to/code.rb
# *music*

Read Sonic Pi code from a file and send it to the Sonic Pi server to be played.


echo "play :C4" | sonic-pi-tool eval-stdin
# *ding*

Read Sonic Pi code from standard in and send it to the Sonic Pi server to be played.


Stop all jobs running on the Sonic Pi server, stopping the music.

sonic-pi-tool stop
# *silence*


Prints out log messages emitted by the Sonic Pi server.

This command won't succeed if the Sonic Pi GUI is running as it will be consuming the logs already.

sonic-pi-tool logs
# [Run 2, Time 32.7]
#  β”” synth :beep, {note: 65.0, release: 0.1, amp: 0.9741}
# [Run 2, Time 32.8]
#  β”” synth :beep, {note: 39.0, release: 0.1, amp: 0.9727}


Attempts start the Sonic Pi server, if the executable can be found.

Not supported on Windows.

sonic-pi-tool start-server
# Sonic Pi server booting...
# Using protocol: udp
# Detecting port numbers...
# ...


Record the audio output of a Sonic Pi session to a local file. Stop and save the recording when the Enter key is pressed.

sonic-pi-tool record /tmp/output.wav
# Recording started, saving to /tmp/output.wav.
# Press Enter to stop the recording...

Other tools

In addition to sonic-pi-tool this project contains sonic-pi-pipe and sonic-pi-logs. These two programs came first and are written in Go rather than Rust.

Everything they can do can be done with the newer sonic-pi-tool, and as a result they are no longer actively maintained. :)

Read more about these tools here.

MPL 2.0 Licence