Skip to content

Research-based VA Drum Synthesis Implementation - #138

Open
Pitrat-wav wants to merge 1 commit into
mainfrom
feat/research-based-drums-dsp-15843690483125918679
Open

Research-based VA Drum Synthesis Implementation#138
Pitrat-wav wants to merge 1 commit into
mainfrom
feat/research-based-drums-dsp-15843690483125918679

Conversation

@Pitrat-wav

Copy link
Copy Markdown
Owner

This PR overhauls the drum machine engine to strictly follow the "Analog Drum Synthesis in Web Audio API" research specifications.

Key improvements:

  • Authentic Synthesis: Moved from basic oscillators to complex VA models (Bridged-T for 808, Triangle-Saturator for 909).
  • Noise Engine: Centralized 2.0s noise buffers with random start offsets and added a 15-bit LFSR implementation for the 909 Snare.
  • State Management: Implemented bulk synchronization between the Zustand store and the Tone.js engine to prevent initial parameter drift.
  • User Experience: Added a musical randomization button (Dice) in the Drums view that generates coherent Euclidean patterns and triggers haptic feedback.
  • Stability: Enforced strict positive values for all exponential ramps and added early exits for silent triggers.

PR created automatically by Jules for task 15843690483125918679 started by @Pitrat-wav

…zation

- Implemented procedural TR-808/909 synthesis based on deep DSP analysis research.
- Added 15-bit LFSR noise generation for authentic vintage digital textures.
- Integrated randomized noise start offsets to eliminate machine-gun effect.
- Added musical drum randomization feature with Telegram haptic feedback.
- Improved engine-to-store synchronization and Web Audio API robustness.

Co-authored-by: Pitrat-wav <255843145+Pitrat-wav@users.noreply.github.com>
@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0dc20f7a32

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

if (velocity <= 0) return;

// Use random start offset in the noise buffer to avoid "machine-gun" effect
const randomStart = Math.random() * (this.noiseBuffer.duration - 0.5);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Leave enough noise buffer for max clap decay

When decay is high, this clap can be scheduled to play for roughly snapCount * snapInterval + (0.1 + decay * 0.5) seconds, up to about 0.69s, but this offset only guarantees 0.5s remains in the 2s buffer. In that setting, offsets above about 1.31s make the buffer source end before stop(finalDecayStart + decayTime), so hits randomly truncate and dispose the noise chain early instead of honoring the decay knob; bound the random offset by the actual scheduled duration or loop the noise source.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant