Skip to main content

Python bindings for using SoundFonts (sf2/sf3/sfo formats), generating audio samples, and playing MIDI songs

Project description

TinySoundFont-pybind

This tinysoundfont Python package provides Python bindings for TinySoundFont and lets you generate audio using SoundFont instruments (.sf2, .sf3, or .sfo files) in Python. The audio data can be played by PyAudio in a separate thread if requested. This package also includes support for loading and playing MIDI data using a SoundFont instrument.

What you might want to use this package for:

  • Play MIDI files with SoundFonts in Python
  • Play MIDI files with modifications and customizations (mute tracks, change instruments, etc.)
  • Procedurally generate and play music or sounds
  • Play music and sounds in an interactive way in your Python program

Documentation

Main tinysoundfont documentation

The documentation contains:

Installation

This package depends on pyaudio for playing sounds. To install pyaudio for common platforms:

Windows

py -m pip install pyaudio

macOS

brew install portaudio
pip install pyaudio

GNU/Linux (Ubuntu)

sudo apt install python3-pyaudio

To install tinysoundfont, for all platforms do:

pip install tinysoundfont

Basic Usage

Here is an example program that plays a chord:

import tinysoundfont
import time

synth = tinysoundfont.Synth()
sfid = synth.sfload("florestan-piano.sf2")
synth.program_select(0, sfid, 0, 0)
synth.start()

time.sleep(0.5)

synth.noteon(0, 48, 100)
synth.noteon(0, 52, 100)
synth.noteon(0, 55, 100)

time.sleep(0.5)

synth.noteoff(0, 48)
synth.noteoff(0, 52)
synth.noteoff(0, 55)

time.sleep(0.5)

Please see the Guide for more examples and notes about the examples.

Local build and test

Note that a local build and test is not required to use the package, only for developing tinysoundfont itself.

Build and install locally with:

python -m pip install .

Test in the root directory with:

pytest

You may want to build and test in a virtualenv environment.

The python -m pip install . will perform a compilation step for C++ code. Your environment must have access to a working C++ compiler as well as the Python development headers.

Editable build

To speed up development you can do an "editable build". This will cache a lot of compiling and setup. First install all needed dependencies in pip:

pip install scikit_build_core pyproject_metadata pathspec pybind11

Then install with editable.rebuild on:

pip install . --no-build-isolation --config-setting=editable.rebuild=true -Cbuild-dir=build .

In my experience you still need to rerun this command when editing files, but it will go faster.

Packaging

Building wheels for PyPI is done by GitHub Actions and does not need to be done manually.

Documentation

Documentation is done using Sphinx. GitHub Actions builds automatically and pushes pages to the Documentation Page.

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

tinysoundfont-0.3.4.tar.gz (372.1 kB view hashes)

Uploaded Source

Built Distributions

tinysoundfont-0.3.4-pp310-pypy310_pp73-win_amd64.whl (144.4 kB view hashes)

Uploaded PyPy Windows x86-64

tinysoundfont-0.3.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (187.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (195.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (156.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

tinysoundfont-0.3.4-pp39-pypy39_pp73-win_amd64.whl (144.3 kB view hashes)

Uploaded PyPy Windows x86-64

tinysoundfont-0.3.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (187.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (195.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (156.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

tinysoundfont-0.3.4-pp38-pypy38_pp73-win_amd64.whl (144.2 kB view hashes)

Uploaded PyPy Windows x86-64

tinysoundfont-0.3.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (187.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (195.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (156.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

tinysoundfont-0.3.4-pp37-pypy37_pp73-win_amd64.whl (144.0 kB view hashes)

Uploaded PyPy Windows x86-64

tinysoundfont-0.3.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (187.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (194.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (156.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

tinysoundfont-0.3.4-cp312-cp312-win_amd64.whl (145.4 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

tinysoundfont-0.3.4-cp312-cp312-win32.whl (126.8 kB view hashes)

Uploaded CPython 3.12 Windows x86

tinysoundfont-0.3.4-cp312-cp312-musllinux_1_1_x86_64.whl (710.6 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

tinysoundfont-0.3.4-cp312-cp312-musllinux_1_1_i686.whl (770.2 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

tinysoundfont-0.3.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (188.1 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (196.4 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-cp312-cp312-macosx_10_9_x86_64.whl (159.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

tinysoundfont-0.3.4-cp311-cp311-win_amd64.whl (146.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

tinysoundfont-0.3.4-cp311-cp311-win32.whl (127.7 kB view hashes)

Uploaded CPython 3.11 Windows x86

tinysoundfont-0.3.4-cp311-cp311-musllinux_1_1_x86_64.whl (714.1 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

tinysoundfont-0.3.4-cp311-cp311-musllinux_1_1_i686.whl (773.3 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

tinysoundfont-0.3.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (189.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (198.1 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-cp311-cp311-macosx_10_9_x86_64.whl (158.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

tinysoundfont-0.3.4-cp310-cp310-win_amd64.whl (145.1 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

tinysoundfont-0.3.4-cp310-cp310-win32.whl (126.6 kB view hashes)

Uploaded CPython 3.10 Windows x86

tinysoundfont-0.3.4-cp310-cp310-musllinux_1_1_x86_64.whl (714.1 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

tinysoundfont-0.3.4-cp310-cp310-musllinux_1_1_i686.whl (772.4 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

tinysoundfont-0.3.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (187.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (197.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-cp310-cp310-macosx_10_9_x86_64.whl (156.9 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

tinysoundfont-0.3.4-cp39-cp39-win_amd64.whl (145.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

tinysoundfont-0.3.4-cp39-cp39-win32.whl (126.6 kB view hashes)

Uploaded CPython 3.9 Windows x86

tinysoundfont-0.3.4-cp39-cp39-musllinux_1_1_x86_64.whl (714.4 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

tinysoundfont-0.3.4-cp39-cp39-musllinux_1_1_i686.whl (772.3 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

tinysoundfont-0.3.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (188.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (197.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-cp39-cp39-macosx_10_9_x86_64.whl (157.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

tinysoundfont-0.3.4-cp38-cp38-win_amd64.whl (144.9 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

tinysoundfont-0.3.4-cp38-cp38-win32.whl (126.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

tinysoundfont-0.3.4-cp38-cp38-musllinux_1_1_x86_64.whl (713.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

tinysoundfont-0.3.4-cp38-cp38-musllinux_1_1_i686.whl (772.0 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

tinysoundfont-0.3.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (187.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (196.2 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-cp38-cp38-macosx_10_9_x86_64.whl (156.8 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

tinysoundfont-0.3.4-cp37-cp37m-win_amd64.whl (145.3 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

tinysoundfont-0.3.4-cp37-cp37m-win32.whl (128.2 kB view hashes)

Uploaded CPython 3.7m Windows x86

tinysoundfont-0.3.4-cp37-cp37m-musllinux_1_1_x86_64.whl (714.6 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

tinysoundfont-0.3.4-cp37-cp37m-musllinux_1_1_i686.whl (773.8 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

tinysoundfont-0.3.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (189.5 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

tinysoundfont-0.3.4-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (199.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

tinysoundfont-0.3.4-cp37-cp37m-macosx_10_9_x86_64.whl (155.3 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

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