원클릭으로
daw-master-rubber-band-engine
Rubber Band library wrapper — professional-grade time-stretch and pitch-shift
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Rubber Band library wrapper — professional-grade time-stretch and pitch-shift
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | daw-master:rubber-band-engine |
| description | Rubber Band library wrapper — professional-grade time-stretch and pitch-shift |
| version | 0.1.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["audio","time-stretch","pitch-shift","rubberband","dsp","formant"],"related_skills":["daw-master:dawdreamer","daw-master:sox-engine","daw-master:ffmpeg-audio"]}} |
High-quality time-stretching and pitch-shifting via the Rubber Band library.
This skill does exactly two things, and does them exceptionally well:
It's the same algorithm used in professional DAWs. Use this when you need clean, artifact-free transforms on musical material (vocals, chords, polyphonic samples).
| Tool | Time-Stretch Quality | Pitch-Shift Quality | Speed |
|---|---|---|---|
sox-engine | Basic — works at medium lengths | Basic via pitch effect | Fast |
ffmpeg-audio (atempo) | Limited 0.5–2.0 only, okay | No native (needs Rubber Band) | Fast |
dawdreamer (warp) | Good — uses Rubber Band under the hood | Good | Moderate |
rubber-band-engine | Excellent — dedicated algorithm | Excellent | Moderate–Slow (quality-dependent) |
Use Rubber Band when:
Use SoX/FFmpeg when:
speed effect fine)# CLI (recommended)
sudo apt install rubberband-cli # Debian/Ubuntu
sudo dnf install rubberband # Fedora
brew install rubberband # macOS
pacman -S rubberband # Arch
# Python bindings (optional alternative to CLI)
pip install rubberband
# Verify
rubberband --version
python -c "import rubberband; print(rubberband.__version__)"
sox-engine, ffmpeg-audio, or dawdreamer."quick" | "standard" | "high" | "ultra".from daw_master.rubber_band_engine import transform
# Slow down 12% (preserve vocal formants)
transform("sample.wav", [{"op": "time_stretch", "factor": 0.88, "formant": True}], "out.wav")
# Pitch up 5 semitones + formant correction
transform("sample.wav", [{"op": "pitch_shift", "semitones": 5, "formant": True}], "out.wav")
# Both: speed up and pitch up together
transform("sample.wav", [
{"op": "time_stretch", "factor": 1.15, "formant": False},
{"op": "pitch_shift", "semitones": 3}
], "out.wav")
Return value: {success: bool, output: str, command?: str, error?: str}
time_stretchChange tempo while keeping pitch.
| Parameter | Type | Default | Description |
|---|---|---|---|
factor | float | required | Tempo multiplier. 1.0 = unchanged, 0.5 = half speed, 2.0 = double. |
formant | bool | False | Preserve vocal formants (timbre). Set True for vocals/acoustic instruments. |
quality | str | "standard" | "quick" (fast), "standard", "high", "ultra" (best). |
transients | str | "mixed" | How to handle transients: "crisp", "smooth", "mixed" (auto). |
window_size | int | auto | Advanced: processing window size in samples. Leave default. |
preserve | bool | True | Preserve phase relationships (keep True). |
Example:
{"op": "time_stretch", "factor": 0.85, "formant": True, "quality": "high"}
pitch_shiftChange pitch while keeping tempo.
| Parameter | Type | Default | Description |
|---|---|---|---|
semitones | float | required | Pitch shift in semitones (can be fractional: 2.5, -1.5). |
formant | bool | True | Preserve formants (recommended for vocals). |
quality | str | "standard" | "quick", "standard", "high", "ultra". |
transients | str | "mixed" | Transient handling. |
window_size | int | auto | Advanced tuning. |
Example:
{"op": "pitch_shift", "semitones": 4.0, "formant": True, "quality": "ultra"}
You can combine both ops in one pipeline — they will be applied in order. Internally this compiles to a single Rubber Band call (if CLI) or sequential Python calls.
Order matters:
time_stretch → pitch_shift : adjust tempo first, then transposepitch_shift → time_stretch : transpose first, then adjust tempoFor most sampling workflows: adjust tempo to match target BPM, then pitch to target key.
from daw_master.rubber_band_engine import transform
# Slow to ~82% of original tempo, keep vocal character
transform(
input="vocal_phrase.wav",
pipeline=[{"op": "time_stretch", "factor": 0.82, "formant": True, "quality": "high"}],
output="vocal_slow.wav"
)
transform(
input="snare_hit.wav",
pipeline=[{"op": "pitch_shift", "semitones": 4.0, "formant": False, "transients": "crisp"}],
output="snare_hit_higher.wav"
)
transform(
input="speech_sample.wav",
pipeline=[
{"op": "time_stretch", "factor": 1.3, "formant": False, "quality": "quick"},
{"op": "pitch_shift", "semitones": 3.5, "formant": False}
],
output="chipmunk.wav"
)
from pathlib import Path
from daw_master.rubber_band_engine import transform
for wav in Path("raw_samples/").rglob("*.wav"):
out = f"timed/{wav.stem}_timed.wav"
transform(
input=str(wav),
pipeline=[{"op": "time_stretch", "factor": 0.95, "formant": True}],
output=out,
quality="high"
)
| Preset | Speed | Quality | Best For |
|---|---|---|---|
quick | Fastest | Acceptable | Drafts, 1000s of files, realtime preview |
standard | Balanced | Good | General use, instruments, vocals |
high | Slower | Very good | Critical listening, release samples |
ultra | Slowest | Near-transparent | Mastering, archiving, flagship sample libs |
Window size increases with quality; processing time roughly doubles per step.
# Full sample preparation pipeline:
# 1. Rubber Band: tempo/pitch align to project
# 2. SoX: normalize and fade
# 3. FFmpeg: encode to final codec
rubber.transform("raw.wav",
pipeline=[{"op": "time_stretch", "factor": 0.98, "formant": True}],
output"step1.wav"
)
sox.transform("step1.wav",
pipeline=[{"op": "normalize", "peak": -0.1}, {"op": "fade", "type": "out", "length": 0.5}],
output="step2.wav"
)
ffmpeg.transform("step2.wav",
pipeline=[],
output="final.m4a", codec="aac", bitrate="256k"
)
sudo apt update
sudo apt install rubberband-cli
# Optional Python bindings:
pip install rubberband
brew install rubberband
pip install rubberband # optional
git clone https://github.com/breakfastquay/rubberband.git
cd rubberband
./configure && make && sudo make install
FileNotFoundError — input missing or Rubber Band binary not installedValueError — invalid pipeline (missing factor, factor ≤ 0)subprocess.CalledProcessError — Rubber Band CLI failed; inspect stderrAll exceptions caught and returned as {success: False, error: str}.
Use skill daw-master:rubber-band-engine transform input="sample.wav" pipeline=[...] output="out.wav"
transients="crisp".formant=True to avoid the chipmunk effect.Use when working with the Sleepy Circuits Hypno 2 video synthesizer/resampler — 2-channel video mixer/looper, shader engine, MIDI CC mapping, CV/modulation, sampler. Firmware v0.0.163+.
Hardware instrument skills — reference guides for each device in the music studio setup.
GLSL fragment shader techniques adapted for the Hypno 2 video synthesizer — single-pass generative visuals and video effects optimized for Raspberry Pi 5, 5-uniform limit, CC-mapped parameters
Korg KAOSS DJ — USB DJ controller with X-Y touchpad, Serato DJ Intro integration, KAOSS effects, EQ, crossfader, and MIDI on Linux
Korg KAOSSILATOR dynamic phrase synthesizer (2007 model) — X-Y touchpad, 100 programs, gate arpeggiator, phrase loop recording, USB MIDI on Linux
Use when working with the Korg kaossilator 2S dynamic phrase synthesizer — X-Y touchpad, 150 programs, 50 arp patterns, loop recording, audio player, master recorder, microSD storage, and USB MIDI on Linux.