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)
| File | Size | Uploaded | |
|---|---|---|---|
| st_language-2.7.0.tar.gz | 200.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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