diff --git a/docs/_static/audio/acid_house.wav b/docs/_static/audio/acid_house.wav index 7394fd4..2eff643 100644 Binary files a/docs/_static/audio/acid_house.wav and b/docs/_static/audio/acid_house.wav differ diff --git a/docs/_static/audio/afrobeat_pattern.wav b/docs/_static/audio/afrobeat_pattern.wav index 7e21e5f..30f7ed6 100644 Binary files a/docs/_static/audio/afrobeat_pattern.wav and b/docs/_static/audio/afrobeat_pattern.wav differ diff --git a/docs/_static/audio/articulations.wav b/docs/_static/audio/articulations.wav index da93572..7693a85 100644 Binary files a/docs/_static/audio/articulations.wav and b/docs/_static/audio/articulations.wav differ diff --git a/docs/_static/audio/bossa_nova.wav b/docs/_static/audio/bossa_nova.wav index 3e5e7f2..f5e0d52 100644 Binary files a/docs/_static/audio/bossa_nova.wav and b/docs/_static/audio/bossa_nova.wav differ diff --git a/docs/_static/audio/bossa_nova_pattern.wav b/docs/_static/audio/bossa_nova_pattern.wav index 5ca4fc0..65bc505 100644 Binary files a/docs/_static/audio/bossa_nova_pattern.wav and b/docs/_static/audio/bossa_nova_pattern.wav differ diff --git a/docs/_static/audio/cajon.wav b/docs/_static/audio/cajon.wav index 5e258ea..0782a4c 100644 Binary files a/docs/_static/audio/cajon.wav and b/docs/_static/audio/cajon.wav differ diff --git a/docs/_static/audio/dhol.wav b/docs/_static/audio/dhol.wav index 09cea92..7c805b0 100644 Binary files a/docs/_static/audio/dhol.wav and b/docs/_static/audio/dhol.wav differ diff --git a/docs/_static/audio/dholak.wav b/docs/_static/audio/dholak.wav index 37a275e..3aa2705 100644 Binary files a/docs/_static/audio/dholak.wav and b/docs/_static/audio/dholak.wav differ diff --git a/docs/_static/audio/djembe.wav b/docs/_static/audio/djembe.wav index 00c046e..ab2047f 100644 Binary files a/docs/_static/audio/djembe.wav and b/docs/_static/audio/djembe.wav differ diff --git a/docs/_static/audio/dub_reggae.wav b/docs/_static/audio/dub_reggae.wav index a9b49a8..89cb015 100644 Binary files a/docs/_static/audio/dub_reggae.wav and b/docs/_static/audio/dub_reggae.wav differ diff --git a/docs/_static/audio/dynamics.wav b/docs/_static/audio/dynamics.wav index 7d467b8..25c3f16 100644 Binary files a/docs/_static/audio/dynamics.wav and b/docs/_static/audio/dynamics.wav differ diff --git a/docs/_static/audio/ensemble.wav b/docs/_static/audio/ensemble.wav index 009df28..12e34fd 100644 Binary files a/docs/_static/audio/ensemble.wav and b/docs/_static/audio/ensemble.wav differ diff --git a/docs/_static/audio/filter_ramp.wav b/docs/_static/audio/filter_ramp.wav index aa5b578..37f9695 100644 Binary files a/docs/_static/audio/filter_ramp.wav and b/docs/_static/audio/filter_ramp.wav differ diff --git a/docs/_static/audio/jazz_ballad.wav b/docs/_static/audio/jazz_ballad.wav index e014c03..4a7df0f 100644 Binary files a/docs/_static/audio/jazz_ballad.wav and b/docs/_static/audio/jazz_ballad.wav differ diff --git a/docs/_static/audio/march_snare.wav b/docs/_static/audio/march_snare.wav index 374a537..ea9e421 100644 Binary files a/docs/_static/audio/march_snare.wav and b/docs/_static/audio/march_snare.wav differ diff --git a/docs/_static/audio/metal_blast.wav b/docs/_static/audio/metal_blast.wav index 025eb51..4e98832 100644 Binary files a/docs/_static/audio/metal_blast.wav and b/docs/_static/audio/metal_blast.wav differ diff --git a/docs/_static/audio/mridangam.wav b/docs/_static/audio/mridangam.wav index c96e9ec..06e9e4b 100644 Binary files a/docs/_static/audio/mridangam.wav and b/docs/_static/audio/mridangam.wav differ diff --git a/docs/_static/audio/piano_hold.wav b/docs/_static/audio/piano_hold.wav index 7a1bbb5..3b71db8 100644 Binary files a/docs/_static/audio/piano_hold.wav and b/docs/_static/audio/piano_hold.wav differ diff --git a/docs/_static/audio/playback_basic.wav b/docs/_static/audio/playback_basic.wav index ee40178..ccb8f1d 100644 Binary files a/docs/_static/audio/playback_basic.wav and b/docs/_static/audio/playback_basic.wav differ diff --git a/docs/_static/audio/quickstart.wav b/docs/_static/audio/quickstart.wav index 7bcbe88..cdbcbdd 100644 Binary files a/docs/_static/audio/quickstart.wav and b/docs/_static/audio/quickstart.wav differ diff --git a/docs/_static/audio/rock_beat.wav b/docs/_static/audio/rock_beat.wav index 98cd17a..cc90d99 100644 Binary files a/docs/_static/audio/rock_beat.wav and b/docs/_static/audio/rock_beat.wav differ diff --git a/docs/_static/audio/salsa_layered.wav b/docs/_static/audio/salsa_layered.wav index 3950520..6137a84 100644 Binary files a/docs/_static/audio/salsa_layered.wav and b/docs/_static/audio/salsa_layered.wav differ diff --git a/docs/_static/audio/salsa_pattern.wav b/docs/_static/audio/salsa_pattern.wav index 76a6576..81a7007 100644 Binary files a/docs/_static/audio/salsa_pattern.wav and b/docs/_static/audio/salsa_pattern.wav differ diff --git a/docs/_static/audio/sequencing_bossa.wav b/docs/_static/audio/sequencing_bossa.wav index 2e56691..30fa388 100644 Binary files a/docs/_static/audio/sequencing_bossa.wav and b/docs/_static/audio/sequencing_bossa.wav differ diff --git a/docs/_static/audio/song_sections.wav b/docs/_static/audio/song_sections.wav index 9cdc4b3..da6baf3 100644 Binary files a/docs/_static/audio/song_sections.wav and b/docs/_static/audio/song_sections.wav differ diff --git a/docs/_static/audio/strum.wav b/docs/_static/audio/strum.wav index a5cafcd..8b8219f 100644 Binary files a/docs/_static/audio/strum.wav and b/docs/_static/audio/strum.wav differ diff --git a/docs/_static/audio/swell.wav b/docs/_static/audio/swell.wav index 87145b1..cb74e0e 100644 Binary files a/docs/_static/audio/swell.wav and b/docs/_static/audio/swell.wav differ diff --git a/docs/_static/audio/tabla.wav b/docs/_static/audio/tabla.wav index 8a1d670..72a3268 100644 Binary files a/docs/_static/audio/tabla.wav and b/docs/_static/audio/tabla.wav differ diff --git a/docs/_static/audio/tabla_chakradar.wav b/docs/_static/audio/tabla_chakradar.wav index 6ba09fd..fa84b67 100644 Binary files a/docs/_static/audio/tabla_chakradar.wav and b/docs/_static/audio/tabla_chakradar.wav differ diff --git a/docs/_static/audio/tabla_keherwa.wav b/docs/_static/audio/tabla_keherwa.wav index 4ec8b53..a1bf317 100644 Binary files a/docs/_static/audio/tabla_keherwa.wav and b/docs/_static/audio/tabla_keherwa.wav differ diff --git a/docs/_static/audio/tabla_teental.wav b/docs/_static/audio/tabla_teental.wav index ab8df4e..7045f30 100644 Binary files a/docs/_static/audio/tabla_teental.wav and b/docs/_static/audio/tabla_teental.wav differ diff --git a/docs/generate_audio.py b/docs/generate_audio.py index 46ee9cf..3dacba4 100644 --- a/docs/generate_audio.py +++ b/docs/generate_audio.py @@ -23,23 +23,33 @@ os.makedirs(AUDIO_DIR, exist_ok=True) def save_wav(buf, path): - """Save a float32 buffer as 16-bit WAV.""" - # Normalize + """Save a float32 buffer as 16-bit stereo WAV.""" + # Handle both mono (n,) and stereo (n, 2) buffers + if buf.ndim == 1: + channels = 1 + n_frames = len(buf) + else: + channels = buf.shape[1] + n_frames = buf.shape[0] peak = numpy.abs(buf).max() if peak > 0: buf = buf / peak * 0.9 samples = (buf * 32767).astype(numpy.int16) + byte_rate = SAMPLE_RATE * channels * 2 + block_align = channels * 2 + data_size = n_frames * channels * 2 with open(path, "wb") as f: - n = len(samples) f.write(b"RIFF") - f.write(struct.pack("