GitShow/torvalds/GuitarPedal
torvalds

GuitarPedal

Linus learns analog circuits

by torvalds
Star on GitHubFork

C

2.4k stars120 forks8 contributorsActive · 14h agoSince 2025GPL-2.0

Meet the team

See all 8 on GitHub →
torvalds
torvalds652 contributions
clevelandmusicco
clevelandmusicco11 contributions
LMSBAND
LMSBAND1 contribution
jackyphuti
jackyphuti1 contribution
quotentiroler
quotentiroler1 contribution
Priyanshu-byte-coder
Priyanshu-byte-coder1 contribution
felix314159
felix3141591 contribution

Languages

View on GitHub →
C42.5%
Python35%
JavaScript17%
CSS2.3%
CMake1.3%
Makefile0.9%
Other0.9%

Commit activity

Last 12 weeks · 544 commits

Full graph →

Community health

2 of 6 standards met

Community profile →
42
✓README✓License○Contributing○Code of Conduct○Issue Template○PR Template

Recent PRs & issues

Active · 8 in progress · Last activity 14h ago
See all on GitHub →
JerimothLau
Fade the global bypass the right way roundOpenPR

make_one_noise() walks 'disable' towards 'disable_all' one sample at a time so that switching bypass is a 100ms crossfade, and passes single_sample() disable / EFF_ENABLE_STEPS as the mix. But single_sample() takes its mix the other way up: 1.0 is the processed signal and 0.0 the untouched input, which is what bypass() passes. So the ramp runs backwards. Engaging bypass cuts straight to the dry input, fades the effects back in over 100ms, and then cuts to dry again once bypass() takes over. Releasing it is the mirror image. Two steps per footswitch tap, with a tenth of a second of the wrong signal between them. Nothing in Validation/ sees it, because the bench calls single_sample(1.0f) directly and never goes through the ramp. Driving the real make_one_noise() on the host instead, with Test Tone routed and silence on the input, the tone's level in 5ms windows after a tap is before: 1.00 1.00 0.89 0.10 0.15 0.19 ... 0.94 1.00 0.89 0.00 after: 1.00 1.00 0.99 0.95 0.90 0.84 ... 0.09 0.05 0.00

JerimothLau · 1d ago
Jovinull
WebMIDI: fix two comments that no longer match the codeOpenPR

Two comments in WebMIDI/app.js no longer match the code. No behaviour change. EQ graph gain helper. The comment says the firmware's takes the linear gain and square-roots it, so the app and firmware use different units. That was true until d3dcddc ("Have the biquads take A, like the cookbook does"), which didn't touch app.js. Both take A now. I checked it with , comparing the firmware's coefficients with the app's functions. The test covered 300 filters: peaking/loshelf/hishelf, 40 Hz–12 kHz, Q 0.5–8, −20..+20 dB. They agree to 2.4e-5. If the app did what the comment describes (passing 10^(dB/20)), the gain would be off by up to 20.65 dB. I fixed the comment and renamed to to match . Positional anchors. Above there is an older comment saying the anchors are the first and last effects. That stopped being true with 666abc7 and 6cd5aa4, and the comment below it already describes the current behaviour. Removed. Tested with , which passes. test-webmidi draws every graphed effect, so the renamed function is exercised.

Jovinull · 1d ago
Vitorxd12
docs: clarify where to run validation commandsOpenPR

The build instructions leave the reader in the repository root, where 'make check' fails because the target lives in Validation/Makefile. State which directory to use for the commands in the Testing section.

Vitorxd12 · 1d ago

Recent fixes

View closed PRs →
jackyphuti
Effects: Add Auto-Wah envelope filterMergedPR

Add an envelope filter audio effect (priority 35) that modulates a resonant biquad filter based on guitar pick dynamics. Features: Lowpass (Mu-Tron style) and Bandpass (vocal Crybaby style) modes Upwards and downwards sweep directions Tunable sensitivity, base frequency, resonance (Q), octave range, decay time, and output level trim Real-time activity LED indication when filter is actively sweeping Soft-saturation on output to keep high resonance peaks musical Document the effect in README.md to keep check-readme.py in sync.

jackyphuti · 2d ago
quotentiroler
Validation: ask the map for effect ids, and see the ones written as a tupleMergedPR

reports clean on current master while two scripts hold stale effect ids. A comma is enough to get past it. The blind spot is false for an , and a tuple target is not an . The call-site rule does not fire either, since the calls pass names rather than literals. Both offending files use the tuple form. What got past it and declare and . carries , landing between klon/phaser at 50 and flanger at 60 - the move the header of already describes. The generated map on current master: So routed , which generates no tone, and set Wet/Dry on a pot. heard nothing, and the run reported on a correctly cabled pedal. already says "It has already moved once, from 18 to 19, when an effect went in above it". These two were missed because nothing pointed at them. Before and after Testing passes: , , , . The hardware targets were not run, as I have no pedal. returns when has no , so both files skip on that the way they already skip on no numpy or no pedal.

quotentiroler · 6d ago
Structured data for AI agents

Repository: torvalds/GuitarPedal. Description: Linus learns analog circuits Stars: 2416, Forks: 120. Primary language: C. Languages: C (42.5%), Python (35%), JavaScript (17%), CSS (2.3%), CMake (1.3%). License: GPL-2.0. Open PRs: 8, open issues: 5. Last activity: 14h ago. Community health: 42%. Top contributors: torvalds, clevelandmusicco, LMSBAND, jackyphuti, quotentiroler, Priyanshu-byte-coder, felix314159.

·@ofershap

Replace github.com with gitshow.dev