本文へ移動
cccskills
無料GitHub で公開

yup-review

Reviews YUP audio plugin code for YUP-specific correctness issues: AudioProcessor lifecycle, AudioParameterBuilder and AudioParameterHandle usage, editor gestures, AudioBusLayout handling, CLAP/VST3 wrapper contracts, state recall, and MIDI safety. Use when the user asks to review a YUP plugin, check a processBlock, audit parameter smoothing, or asks "is this YUP code safe?". Trigger when you see yup::AudioProcessor, yup_audio_plugin, AudioParameterBuilder, AudioParameterHandle, AudioProcessorEditor, or createPluginProcessor in the code.

インストール方法を見る

含まれるファイル(2)

  • SKILL.md6.3 KB
  • references/yup-violations.md10.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

YUP Audio Plugin Review

YUP looks JUCE-like in places, but its plugin API has its own parameter handles, bus layout, editor contract, and wrapper behavior. Review those directly instead of applying APVTS rules.

Step 0 - Run universal checks first

Invoke audio-dsp-review and audio-numerics-review before this skill. This skill adds YUP-specific checks on top; it does not replace realtime-safety or numerics reviews.

Step 1 - Identify plugin structure

Locate the core classes and boundaries:

  • yup::AudioProcessor - audio thread owns processBlock; wrapper/host code calls lifecycle, state, and preset methods
  • yup::AudioProcessorEditor - UI/message thread only; never call from audio thread
  • yup::AudioParameter - atomic scalar value plus listeners for host/UI notification
  • yup::AudioParameterHandle - audio-thread smoothing/read path; initialise in prepareToPlay
  • yup::AudioBusLayout - immutable I/O contract exposed to plugin wrappers
  • extern "C" yup::AudioProcessor* createPluginProcessor() - plugin entry point used by wrappers

Step 2 - Scan for YUP violations

ViolationWhere to lookRisk
AudioParameterHandle default-constructed and used before prepareToPlayMembers and processBlockNull parameter assertion/crash; wrong smoothing state
Missing handle.updateNextAudioBlock()processBlockAutomation and smoothing lag or never update
Recreating AudioParameterHandle in processBlockAudio callbackReinitialises smoothing and may add avoidable work/glitches
setValueNotifyingHost(), beginChangeGesture(), or endChangeGesture() from audio codeprocessBlock, MIDI handlers, DSP helpersListener/host notification path is not a realtime data path
Allocating voices, buffers, MemoryBlock, String, std::vector, or smart-pointer objects in processBlockMIDI note-on, scratch buffers, meteringHeap traffic causes xruns
YUP_DBG, Logger::writeToLog, File, URL, JSON/XML, or string formatting in audio codeDebug and error pathsLogging/I/O/allocation on audio thread
Hard-coded channel pointers without layout checksgetWritePointer(0/1) and bus setupMono, sidechain, or unusual host layout crashes/corrupts audio
Mutating MidiBuffer while iterating itMIDI loopsIterator invalidation or unbounded allocation
prepareToPlay not resetting all DSP and note stateLifecycle methodsHost reactivation leaves stale filter history, held notes, or ramps
flush() missing for synths/effects with tails or voicesCLAP reset handlingHost reset leaves hanging notes or stale delay/reverb tails
State load/save left unimplementedloadStateFromMemory, saveStateIntoMemoryDAW session recall and presets fail
Long work under getProcessLock() or state swaps with no handoffUI/state/background codeProcessing may skip under CLAP try-lock or race under other wrappers
Editor stores raw processor-owned UI pointers or processor stores editor pointerEditor/processor membersDangling pointer when host closes editor

Step 3 - Check YUP API contracts

  • Constructor: parameters are added once; IDs are unique and stable; bus layout matches PLUGIN_IS_SYNTH / PLUGIN_IS_MONO intent.
  • prepareToPlay: allocates and resets all state; constructs handles with current sample rate; tolerates repeated calls.
  • processBlock: reads smoothed parameters through handles; respects audioBuffer.getNumSamples() and actual channel count; clears or writes every output sample it owns.
  • MIDI: consumes events in sample order; uses bounded voice/event storage; clears or rewrites outgoing MIDI deliberately.
  • Editor: uses gesture begin/end around drags; calls setValueNotifyingHost() for user changes; polls parameter values with a timer using dontSendNotification.
  • State/presets: serialises all host-visible parameters and preset data; validates memory before applying; does not assume state callbacks are the audio thread.
  • Format wrappers: CLAP and VST3 builds are enabled only as needed; CLAP/VST3/standalone targets all link the same ${target_name}_shared code.

Step 4 - Write the review

## YUP Plugin Review: `[file / class]`

### Verdict
[Safe | Has critical violations | Warnings only] - [one sentence summary]

### Critical Violations
**[Category]: [description]**
`file:line` - `offending code`
Why: [one sentence on YUP lifecycle/thread/API risk]
Fix: [concrete YUP-idiomatic suggestion]

### Warnings
[same format]

### What's Done Well
[correct patterns observed]

### Recommended Fixes (priority order)
1. ...

Quick fix table

ViolationFix
Direct unsmoothed parameter read for DSPKeep AudioParameter::Ptr, initialise AudioParameterHandle in prepareToPlay, read via the handle
Missing gesture pairingCall beginChangeGesture() on drag start and endChangeGesture() on drag end
UI value changes with setValue()Use setValueNotifyingHost() for user edits so automation/host state is notified
Allocating voices on note-onPreallocate voice slots and reuse them; reject/steal voices when full
Hard-coded stereoDeclare stereo in AudioBusLayout and guard getNumChannels() before channel access
Missing resetClear voices, delay lines, filters, smoothers, and pending MIDI in both prepareToPlay and flush() where relevant
Unimplemented state recallSerialise parameters and presets into MemoryBlock; validate and apply from non-audio state callbacks
Audio-to-UI updatesWrite scalars to atomics or a preallocated lock-free queue; have editor Timer poll them

For full code examples and YUP-specific BAD/GOOD patterns, see references/yup-violations.md.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

au-review

無料

Reviews AudioUnit v2/v3 plugin implementations for spec compliance, thread safety, and correctness. Use when the user asks to review an AudioUnit plugin, check an AUv3 app extension, audit property or parameter handling, or asks "is my AUComponent thread-safe?" or "why does my AU crash in Logic?". Trigger on phrases like "review my AudioUnit", "check my AUv3", "is my render block safe?", or when you see AURenderCallback, internalRenderBlock, kAudioUnitProperty_*, or AUAudioUnit in the code.

日本語の概要は準備中です。原文の説明を表示しています。

kunitoki/sonic-skills222026年5月21日 更新

Systematic checklist for diagnosing audio artifacts. Use when the user describes a sound quality problem — clicks, pops, crackling, silence, DC offset, aliasing, phase issues, or latency problems. Trigger on phrases like "why do I hear clicks?", "my output has DC offset", "there's aliasing in my oscillator", "phase is wrong in mono", "dropout when CPU spikes". Pairs with audio-dsp-review (realtime safety) and audio-numerics-review (numeric correctness) — use those to fix once the cause is found.

日本語の概要は準備中です。原文の説明を表示しています。

kunitoki/sonic-skills222026年5月21日 更新

Reviews audio DSP and audio processing code for realtime safety violations. Use whenever the user asks to review, audit, or check audio processing code — including plugin process callbacks, audio engine render functions, DSP implementations, or any code that runs on the audio thread. Trigger on phrases like "review my processBlock", "check this DSP code", "is this safe for the audio thread?", "review my JUCE plugin", or when you see an audio callback and spot potential realtime violations. Flag issues proactively even when the user hasn't explicitly asked for a review.

日本語の概要は準備中です。原文の説明を表示しています。

kunitoki/sonic-skills222026年5月21日 更新

Explains DSP math concepts to developers who need the theory behind an algorithm. Use whenever the user asks how a signal-processing concept works, wants intuition behind a formula, or hits a math-shaped bug. Trigger on phrases like "how does a Fourier transform work", "explain z-transforms", "what is convolution", "why does my biquad ring", "what is windowing for", "what causes aliasing", or "how do I convert gain to dB". Also trigger when the user pastes DSP code and asks why it behaves a certain way.

日本語の概要は準備中です。原文の説明を表示しています。

kunitoki/sonic-skills222026年5月21日 更新

Reviews audio DSP code for numerical correctness. Use when the user asks to review, audit, or check DSP code for correctness issues — filters, feedback loops, fixed-point arithmetic, accumulation loops, or any numeric computation in audio code. Trigger on "check this filter for NaN", "why does my reverb blow up?", "is this numerically stable?", "why do I hear DC in my output?". Pairs with audio-dsp-review (realtime safety); this skill covers numeric correctness. Flag issues proactively.

日本語の概要は準備中です。原文の説明を表示しています。

kunitoki/sonic-skills222026年5月21日 更新

Profiling strategy for audio CPU issues — xruns, spikes, and buffer underruns. Use when the user reports CPU overload, audio glitches under load, or performance regressions. Trigger on phrases like "I'm getting xruns", "my plugin causes CPU spikes", "dropouts under high voice count", "audio thread is too slow", "how do I profile my DSP". References audio-numerics-review for denormal slowdown and audio-dsp-review for lock contention.

日本語の概要は準備中です。原文の説明を表示しています。

kunitoki/sonic-skills222026年5月21日 更新

kunitoki のスキルをすべて見る

このスキルの問題を報告する