Skip to main content

ST-language

ST-language is a plain-text music notation — notes, abstract chords, drums, dynamics, tempo changes, automations (volume, expression, pan, modulation, effect sends, with curved ramps and hairpins), several voices and lyrics — and this is its reference implementation: a pure-Python library (no dependencies) with command-line tools to check songs and export them to MIDI, MusicXML, ABC and MTXT. It also writes grace notes, chord symbols, D.C./D.S. with Coda and Fine, several lyric verses and transposing parts. It is the notation engine of SoundText, usable on its own.

// a blues riff
Tempo: 96 BPM

Bass:
  8: 2c*2 2e*2 2g*2 2a*2 | 2a#*2 2a*2 2g*2 2e*2 |

Piano:
  4: 4C7 | 4F7 |

Install

pip install st-language

Python 3.9 or later, no other packages needed. To work on the library itself, clone this repository and install it in development mode:

git clone https://github.com/openssound/st-language.git
cd st-language
pip install -e .
python -m pytest tests            # the tests and the conformance suite

Command line

st-language check song.st          # syntax errors and warnings (bar checks, lyrics)
st-language midi song.st -o song.mid
st-language musicxml song.st       # -> song.musicxml
st-language abc song.st            # -> song.abc (ABC 2.1)
st-language mtxt song.st           # -> song.mtxt (MTXT 1.0, one event per line)
st-language mtxt take.mtxt         # MTXT -> take.mid
st-language events song.st         # the events as JSON
echo "4: c d e f | 2g 2g" | st2mid - -o melody.mid --instrument Trumpet

stcheck, st2mid, st2musicxml, st2abc and st2mtxt are shortcuts. A file without track headers is a one-track song (choose the instrument with --instrument). Messages are in English, Italian, French or Spanish (--lang, or the ST_LANGUAGE/LANG environment variables).

Python

import st_language as st

events = st.parse("4: c d e f | 2g 2g")           # timed events (beats)
ok, error = st.validate("4: C Am | F G")
warnings = st.check("4: c d e | f g a b |")      # bar 1: 1 quarter note missing

song = st.load_song("song.st")                   # or st.read_song(text)
song = st.Song(name="Demo", tempo_bpm=100)
song.add_track("Bass", "Bass", "4: c*2 g*1 2c*2")
song.add_pattern("Riff", "8: c d e g")
st.to_midi(song, "demo.mid")
st.to_musicxml(song, "demo.musicxml")
st.to_abc(song, "demo.abc")

Specification

The language and the .st song format are defined in the ST-language specification (CC BY 4.0, also in Italian), with a conformance suite for other implementations.

License

GPL-3.0-or-later, © 2026 Sergio Scolaro. The MTXT-derived voice-name table is MIT (see THIRD_PARTY_NOTICES.md).


In italiano: ST-language e' la notazione musicale testuale di SoundText come libreria Python autonoma, senza dipendenze, con i comandi st-language check | midi | musicxml | abc | mtxt | events (e le scorciatoie stcheck, st2mid, st2musicxml, st2abc, st2mtxt). Si installa con pip install st-language. La specifica, anche in italiano, e' in docs/spec/ del repository.

Metadata

Release files for st-language 2.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for st-language 2.7.0
File Size Uploaded
st_language-2.7.0.tar.gz 200.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for st-language 2.7.0
File Interpreter ABI Platform
st_language-2.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 339.4 kB

Release files / st_language-2.7.0.tar.gz

Download URL st_language-2.7.0.tar.gz
Size 200.7 kB
Tags Source
SHA-256 checksum
How to use checksums
c2647c8d7da93410cfa8dbd9fc6bd15bebb3fc76467ef9cc58e71fe9519f1f69
BLAKE2b-256 checksum
How to use checksums
27811ffb34c23df3b5c1c3e92b81be35cfa3a9b2f6b7a8f9ccf725d9e0bd17a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release files / st_language-2.7.0-py3-none-any.whl

Download URL st_language-2.7.0-py3-none-any.whl
Size 138.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eba29f429a2d520dc689bb253e5ce87b4dc2f0ee4d67140d8ec55cae12740f61
BLAKE2b-256 checksum
How to use checksums
f861afc3d831249923736174cb9b57daae85fa2ddccdfe58c7466dd1ca891f54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release history Release notifications | RSS feed

2.8.0

2 release files

This release

2.7.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page