#parser #python #music #sound-effects #modes

bin+lib tja

TJA file parser written in Rust, working in Rust, Python, and WebAssembly

10 unstable releases (4 breaking)

0.5.0 Dec 28, 2025
0.4.1 Dec 1, 2025
0.4.0 Jun 5, 2025
0.3.5 Apr 16, 2025
0.1.1 Apr 21, 2024

#230 in WebAssembly


Used in taiko-core

MIT license

195KB
2K SLoC

tja-rs

An efficient TJA file parser, written in Rust, that supports Rust, Python, and WebAssembly environments.

It is highly optimized for speed and includes features such as a synthesizer for synthesizing music along with don/ka sound effects from a TJA file.

It's fast! (Parse thousands of TJAs in less than 1 second) Check out the benchmark.

You can also use different parsing modes (e.g. metadata-only or metadata-and-header mode) to make it even faster.

Building Instructions

Rust

The Rust target requires no additional feature flags.

To build the library, run:

cargo build

To build the CLI tool, run:

cargo build --bin tja

Python

We use maturin to build the Python package. The Python package requires the python feature flag to be enabled.

To build the Python package .whl, run:

maturin build -F python --release

To develop and test, run:

maturin develop -F python

Python virtual environment is necessary. (e.g. conda, micromamba, poetry, pixi)

To navigate variable, please check tja.pyi

WebAssembly

We use wasm-pack to build the WebAssembly package. The WebAssembly package requires the wasm feature flag to be enabled.

To build the WebAssembly package, run:

wasm-pack build --features wasm

Performance Benchmarks

The parser is highly optimized for performance.

It can parse a typical TJA file in under 1 ms in full mode, and in metadata-only mode in under 5 µs.

For detailed benchmarks and comparisons, check out our benchmark report.

To run the benchmark:

cargo bench

Synthesizer

The TJA parser includes a synthesizer binary that can synthesize music along with don/ka sound effects from a TJA file:

cargo run -F audio --bin synthesize <TJA file> <music file> <don sound file> <ka sound file> --course <course> --branch <branch>

Dependencies

~0.6–3MB
~71K SLoC