hooring 🎐
Play cool-sounding furin (Japanese wind chime) tones, driven by a wandering breeze.
Glass (Edo furin) and metal (iron furin) timbres are additively synthesized and struck at irregular intervals, following the wind. Strike loudness and spacing wander with 1/f fluctuation, like a tanzaku paper strip catching the air and moving the clapper.
Installation
Install with pipx from GitHub:
pipx install git+https://github.com/tos-kamiya/hooring.git
That puts hooring on your PATH. Upgrade later with pipx upgrade hooring.
Playback needs aplay (ALSA) or ffplay (ffmpeg). Writing a WAV file does not.
Development
Clone the repository and set up the virtualenv with uv:
uv sync
uv run hooring
Tests:
uv run pytest
Usage
hooring
It keeps ringing. Stop with Ctrl+C. To hear the same breeze again, pass the printed seed= to --seed.
# A single strike
hooring --once
# Light breeze, three furin, 45 seconds
hooring -d 45 --wind breeze --voices 3
# Metal timbre
hooring --material metal --wind gusty
# Write a WAV file (defaults to 30 seconds if duration is omitted)
hooring -o natsu.wav -d 20 --seed 7
# Half volume (1 is the current maximum)
hooring --volume 0.5
Options
| Flag | Meaning |
|---|---|
-d, --duration SEC |
Seconds to play or write. Omit to keep ringing |
-o, --output FILE |
Write a WAV file instead of playing |
--seed N |
Random seed |
--wind breeze|moderate|gusty |
Wind strength |
--voices N |
Number of furin (1–6, default 2) |
--material glass|metal|mixed |
Timbre |
--once |
Play a single strike and exit |
--mono |
Mono output |
--sample-rate HZ |
Sample rate |
--volume GAIN |
Volume 0–1 (1 is the current maximum, default 1) |
From Python:
from hooring import render
audio = render(duration=8, seed=1, wind="breeze", material="glass", volume=0.5)
# stereo: shape (n, 2), float64 in [-1, 1]
Release notes
License
hooring is distributed under the terms of the MIT license.
Metadata
Release files for hooring 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hooring-0.1.5.tar.gz | 44.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hooring-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.9 kB
Release files / hooring-0.1.5.tar.gz
| Download URL | hooring-0.1.5.tar.gz |
|---|---|
| Size | 44.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
22855ac08bc2da0623d1350623379647f312f6ec00e0eafc7cdfa0e1793f1d64
|
|
BLAKE2b-256 checksum How to use checksums |
c25d3b4c9c195fa7ca0cb2d4ddffefc7d49d569a082c7be1cd509acb4eb4ccad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.18.0 {"ci":null,"cpu":"x86_64","distro":{"id":"trixie","libc":{"lib":"glibc","version":"2.41"},"name":"Debian GNU/Linux","version":"13"},"implementation":{"name":"CPython","version":"3.13.5"},"installer":{"name":"hatch","version":"1.18.0"},"openssl_version":"OpenSSL 3.5.7 9 Jun 2026","python":"3.13.5","system":{"name":"Linux","release":"7.1.8+deb13-amd64"}} HTTPX2/2.12.0
|
Release files / hooring-0.1.5-py3-none-any.whl
| Download URL | hooring-0.1.5-py3-none-any.whl |
|---|---|
| Size | 14.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fc9e46ba1ef47331ae37f38eba51b81db7a9573f1b745ea29a6db7b79da75b66
|
|
BLAKE2b-256 checksum How to use checksums |
99dd56770c8796658a80a876cb6c134e4fdb761c1ca1e68b317460874000e21b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.18.0 {"ci":null,"cpu":"x86_64","distro":{"id":"trixie","libc":{"lib":"glibc","version":"2.41"},"name":"Debian GNU/Linux","version":"13"},"implementation":{"name":"CPython","version":"3.13.5"},"installer":{"name":"hatch","version":"1.18.0"},"openssl_version":"OpenSSL 3.5.7 9 Jun 2026","python":"3.13.5","system":{"name":"Linux","release":"7.1.8+deb13-amd64"}} HTTPX2/2.12.0
|