GitShow/torvalds/GuitarPedal
torvalds

GuitarPedal

Linus learns analog circuits

by torvalds
Star on GitHubFork

C

2.2k stars103 forks6 contributorsActive · 23h agoSince 2025GPL-2.0

Meet the team

See all 6 on GitHub →
torvalds
torvalds399 contributions
clevelandmusicco
clevelandmusicco11 contributions
LMSBAND
LMSBAND1 contribution
Priyanshu-byte-coder
Priyanshu-byte-coder1 contribution
felix314159
felix3141591 contribution

Languages

View on GitHub →
C42.2%
Python31.8%
JavaScript18.8%
CSS3.1%
CMake1.8%
Makefile1%
Other1.3%

Commit activity

Last 12 weeks · 392 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 · 2 in progress · Last activity 23h ago
See all on GitHub →
freealise
Pitch shifter tremoloOpenIssue

Moving this from the old repo as it's still there. Could be fixed if pitchshifter is chained together with the compressor, which has to follow the overall volume of notes being played and adapt to it to keep the dynamics (good feature for the compressor in general).

freealise · 2d ago
diegoMalagrida
MIDI: parse the hardware port as a byte streamOpenPR

The screenless pedal can be programmed over either USB or TRS Type-A MIDI, and the current scene protocol carries schema, state, and routing commands over SysEx. currently treats F0-F7 as zero-length status bytes, so a SysEx request arriving at the physical MIDI input is discarded before sees it. The same reader drops every System Real-Time and System Common message. MIDI Clock arriving at the TRS jack therefore never reaches USB, and a two-byte channel message can retain the final byte of an earlier three-byte packet. This replaces that ad-hoc reader with a byte-stream parser. It preserves channel running status, emits real-time without disturbing a partially received channel or SysEx message, handles System Common and System Reset, packs SysEx into CIN 4..7, and zero-pads unused packet bytes. The host-side validation covers channel running status for two- and three-byte messages, real-time interleaved with channel and SysEx messages, System Reset, System Common, and all three SysEx ending forms. This revision is based on the reorganized tree and updates the validation include to . Validated with: () GCC 13.3 with and AddressSanitizer/UBSan 10,000,000 randomized malformed-stream bytes under AddressSanitizer/UBSan

diegoMalagrida · 1w ago
DhanushPillay
Added safety iteration bound to boost fold()OpenPR

The fold() function in boost.h relies on an unbounded for (;;) loop. While it mathematically converges by halving the overshoot, floating-point precision limits can theoretically cause the convergence to stall just outside the threshold. If this happens, it hangs the audio core indefinitely. Added a hard limit of 20 iterations to guarantee bounded execution time for realtime safety. If it hits the limit, it returns the closest approximated value.

DhanushPillay · 1w ago

Recent fixes

View closed PRs →
Legit-Ox
parametric_eq: fix gain math, pot only delivered ~half the requested dBMergedPR

_biquad_peaking / _biquad_loshelf / _biquad_hishelf (audio/biquad.h) take a gain argument and compute A = sqrtf(gain) internally — i.e. they expect gain = A². Every other caller passes exactly that via db_to_level(db) = 10^(db/20): see klon.h:62, cabsim.h:70, frenchie.h:287. parametric_eq.h is the lone exception. Its peq_pot_A(db) = 10^(db/40) is the correct RBJ value of A itself — but it's passed in where the function wants A². So the internal sqrtf turns it into 10^(db/80), and a band dialed to +20 dB only produces about +10 dB. Both audio and OLED graph share peq_pot_A, so they agree with each other, but the response undershoots the pot labels ("LS Gain" LINEAR(-20.0 20.0) = 0.0 dB) and the graph's own axis (+20dB -> y=0). Fix: drop peq_pot_A(), use db_to_level() like the other three effects. I might be misreading intent here — if thesofter-than-labeled range is deliberate, feel free to ignore. But it looked off against both the dB labels and every other biquad call site, so flagging it.

Legit-Ox · 4d ago
Priyanshu-byte-coder
Don't lose a pot update that arrives while an effect is bypassedMergedPR

The audio core retires the pot sequence number whether or not it acts on it: effect->last = seq; if (effect->mix) effect->init(effect->pot_values[seq & 1]); Skipping ->init() for a bypassed effect is deliberate (49db9df), but 'last' moving anyway turns "skip" into "drop", and nothing recomputes the coefficients when the effect comes back. Route the reverb, turn the room size up, unroute, route it again: the UI reads 0.88 and it still sounds like 0.98. So don't retire a sequence number that isn't being acted on. No Pico SDK here so I couldn't flash it. Modeled the seq/last/mix handshake instead, and the pots and coefficients agree again.

Priyanshu-byte-coder · 6d ago
alekssadowski95
Added 1590B enclosure STEP filesMergedPR

1590B enclosure, for manufacturing via 3D-printing, including the assembly hardware. In a next PR, we can add the mounting posts and cutouts for the PCBs, make a FreeCAD assembly, create a BOM for all the components and create a screenshot of that for the README. Signed-off-by: Aleksander Sadowski

alekssadowski95 · 2w ago
Structured data for AI agents

Repository: torvalds/GuitarPedal. Description: Linus learns analog circuits Stars: 2249, Forks: 103. Primary language: C. Languages: C (42.2%), Python (31.8%), JavaScript (18.8%), CSS (3.1%), CMake (1.8%). License: GPL-2.0. Open PRs: 2, open issues: 1. Last activity: 23h ago. Community health: 42%. Top contributors: torvalds, clevelandmusicco, LMSBAND, Priyanshu-byte-coder, felix314159.

·@ofershap

Replace github.com with gitshow.dev