Skip to main content

Python library for Impulse Tracker (IT) module files

Project description

pyIT (upgraded version) – Impulse Tracker Module Library

pyIT is a Python library for reading, writing, and manipulating Impulse Tracker (IT) module files.
It provides a complete toolkit to programmatically create, edit, and convert .it files, with support for patterns, instruments, samples, envelopes, and rendering to audio or SNES soundbanks.

Features

  • Full IT file format support – read/write .it files with all header, pattern, instrument, sample, and envelope data.
  • Pattern construction – build patterns from simple note sequences or guitar-style tablature.
  • Instrument & sample creation – load WAV files, generate basic waveforms (sine, square, saw, etc.), and map samples to notes.
  • Envelope editing – volume, pan, and pitch envelopes with loop and sustain points.
  • Audio rendering – convert modules to OGG Vorbis using Schism Tracker (or a custom renderer).
  • SNES integration – prepare IT files for smconv (PVSNESlib) to create soundbanks for Super Nintendo homebrew.
  • Pure Python – no external runtime dependencies beyond Python and standard scientific libraries.

Installation

From PyPI

pip install pyITupgrade

From Source

Clone the repository and install in editable mode:

git clone https://github.com/BrunoRNS/pyITupgrade.git
cd pyITupgrade
pip install -e .

For development, install the test dependencies:

pip install -r test-requirements.txt

Detailed build instructions are available in BUILDING_FROM_SOURCE.md.

Quick Start

Load and inspect an IT file

from pyIT import ITfile

module = ITfile()
module.open("song.it")
print(f"Song: {module.SongName.decode()}, Patterns: {len(module.Patterns)}")

Create a simple pattern with PatternBuilder

from pyIT import PatternBuilder

builder = PatternBuilder(bpm=180, lines_per_note=2)
pattern = builder.build_pattern(["C-5", "A-4", None, "G-4"], instrument_id=1)

Add a WAV sample as an instrument

from pyIT import WavInstrumentBuilder

instrument, sample = WavInstrumentBuilder.create_from_wav("piano.wav")
for note in range(120):
    instrument.SampleTable[note] = [note, 1]   # map all notes to this sample
module.Instruments.append(instrument)
module.Samples.append(sample)

Render to OGG

from pyIT import IT2ogg

converter = IT2ogg("song.it", "song.ogg", sample_rate=44100)
converter.convert()

For more detailed usage, see the full documentation.

Dependencies

  • Python 3.10+
  • numpy, scipy – for waveform synthesis
  • pydub – for OGG encoding (requires ffmpeg installed separately)
  • flit – for building the package (development only)

Optional test dependencies: pytest, mutagen.

Building from Source

See BUILDING_FROM_SOURCE.md for instructions on building the package and creating a distributable wheel.

Testing

The test suite covers unit tests and integration tests (requires Schism Tracker, PVSNESlib, and a SNES emulator).
Run all tests with:

make test

Detailed testing instructions are in TESTING.md.

Contributing

We welcome contributions! Please read our CONTRIBUTING.md for guidelines on reporting issues, submitting pull requests, and coding standards.

Special Thanks

  • Original PyIT – the initial implementation by mike burke, published as a GitHub Gist, which served as the foundation for this project.
  • Schism Tracker Community – for creating and maintaining the excellent Schism Tracker, which powers the audio rendering capabilities of this library.
  • PVSNESlib Developers – for the tools that enable IT modules to run on SNES hardware.

License

This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later).
See the LICENSE file for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyitupgrade-1.0.1.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyitupgrade-1.0.1-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file pyitupgrade-1.0.1.tar.gz.

File metadata

  • Download URL: pyitupgrade-1.0.1.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyitupgrade-1.0.1.tar.gz
Algorithm Hash digest
SHA256 1f7e705b881634079b123cce8a0e26875ad5b115e23fa4dfa8e50defd5ca2600
MD5 30c8454db11ad1c5e2aec6f5487456d7
BLAKE2b-256 afd82886c433a83a8b651824ec81e4b2016544c6cdd49e5c164b38d06ab8b212

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyitupgrade-1.0.1.tar.gz:

Publisher: python-publish.yml on BrunoRNS/pyITupgrade

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyitupgrade-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: pyitupgrade-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 16.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyitupgrade-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0580c918417a47e0ef8362867aa8a25912cc360f7a71af3e4f6af2f225d09f6e
MD5 c3e17303962616ac314e70071fc68a03
BLAKE2b-256 0f21e3dcdada5b4edab38f9d02e2e05a6fdd1c2190a9977f55db7851b52ebc40

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyitupgrade-1.0.1-py3-none-any.whl:

Publisher: python-publish.yml on BrunoRNS/pyITupgrade

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page