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.8.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.8.0
File Size Uploaded
st_language-2.8.0.tar.gz 201.5 kB Details

Built distribution (wheel)

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

Total release size: 340.6 kB

Release files / st_language-2.8.0.tar.gz

Download URL st_language-2.8.0.tar.gz
Size 201.5 kB
Tags Source
SHA-256 checksum
How to use checksums
19d321dbe9135a042d81430fa40a5e09873e119cefb7c47c818ec7e7a48d4297
BLAKE2b-256 checksum
How to use checksums
02116ba6c539f57df287499593189461228af2e80ef53cb999cb0b143cc90e83
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 10, 2026.

Transparency log

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

Download URL st_language-2.8.0-py3-none-any.whl
Size 139.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1fbab78ee770f67e750665c92c7a4156090cf281d9241ed1897aa84dbdbe1bbb
BLAKE2b-256 checksum
How to use checksums
28a1e10b713cbfd442de2da19b7ba5d7a53b7ff77823f0ba09c2be603349a704
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 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.8.0 This release

2 release files

2.7.0

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