{"_id":"@beatbax/plugin-chip-spectrum-128","_rev":"6-c7d759b4ad69429f68220e24e7c2e249","name":"@beatbax/plugin-chip-spectrum-128","dist-tags":{"latest":"0.2.5"},"versions":{"0.2.0":{"name":"@beatbax/plugin-chip-spectrum-128","version":"0.2.0","keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"author":{"name":"BeatBax Contributors"},"license":"MIT","_id":"@beatbax/plugin-chip-spectrum-128@0.2.0","maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"homepage":"https://github.com/kadraman/beatbax#readme","bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"dist":{"shasum":"e24c9b8253b7b716ca2e10fa3406a03161cbae39","tarball":"https://registry.npmjs.org/@beatbax/plugin-chip-spectrum-128/-/plugin-chip-spectrum-128-0.2.0.tgz","fileCount":75,"integrity":"sha512-GL3IKQaenai0LM6BSzTAP0IjAyRwi8LYK0DY9LR6QZRw40V7Ot4KagkAYhLa1a3FxuCsFyRH3g6cIX6EABSszg==","signatures":[{"sig":"MEQCIHaVXu+9vQOwoBg30810srA4MIo3QTVRxO4tR3bb0HFqAiA0pGGrjK9Z2wl72uVoW7Jj5O43QOHgzO9Y8q0piphU8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338901},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"168859eeedf975dbae1e2d0124fc067a1cc1f045","private":false,"scripts":{"test":"jest --config ./jest.config.cjs --passWithNoTests","build":"tsc -b","clean":"rimraf dist","pretest":"npm run build --if-present"},"_npmUser":{"name":"kadraman","email":"kevinalee@me.com"},"repository":{"url":"git+https://github.com/kadraman/beatbax.git","type":"git","directory":"packages/plugins/chip-spectrum-128"},"_npmVersion":"11.6.4","description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.2","ts-jest":"^29.3.3","typescript":"^5.6.3","@types/jest":"^29.5.12","@types/node":"^22.7.4"},"peerDependencies":{"@beatbax/engine":">=0.11.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-chip-spectrum-128_0.2.0_1780596307001_0.8633691621843984","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@beatbax/plugin-chip-spectrum-128","version":"0.2.1","keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"author":{"name":"BeatBax Contributors"},"license":"MIT","_id":"@beatbax/plugin-chip-spectrum-128@0.2.1","maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"homepage":"https://github.com/kadraman/beatbax#readme","bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"dist":{"shasum":"a8253a03797ceac86ec32fc2bd548e1b0e881368","tarball":"https://registry.npmjs.org/@beatbax/plugin-chip-spectrum-128/-/plugin-chip-spectrum-128-0.2.1.tgz","fileCount":75,"integrity":"sha512-Uk5PBoa814g9q1NyvPRBAJSFme9H2ICXOOZ1RDczSU87I8584D1l8oQycefkZc0SHAVb6G1peyGQrWnmQBgzSw==","signatures":[{"sig":"MEUCIQD3bUnyPM0Vd75rafqQlARWXn8pieRvxSkak8oPMcqX2wIgD/xVFxxL3BY+F656zMmYgzsO1bTjPJT+jx+OOtf1ajA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340058},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"15a88f188ae392e97403d1962457b2d623cda3f3","private":false,"scripts":{"test":"jest --config ./jest.config.cjs --passWithNoTests","build":"tsc -b","clean":"rimraf dist","pretest":"npm run build --if-present"},"_npmUser":{"name":"kadraman","email":"kevinalee@me.com"},"repository":{"url":"git+https://github.com/kadraman/beatbax.git","type":"git","directory":"packages/plugins/chip-spectrum-128"},"_npmVersion":"11.17.0","description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.2","ts-jest":"^29.3.3","typescript":"^5.6.3","@types/jest":"^29.5.12","@types/node":"^22.7.4"},"peerDependencies":{"@beatbax/engine":">=0.11.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-chip-spectrum-128_0.2.1_1781453894472_0.09688394513060516","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@beatbax/plugin-chip-spectrum-128","version":"0.2.2","keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"author":{"name":"BeatBax Contributors"},"license":"MIT","_id":"@beatbax/plugin-chip-spectrum-128@0.2.2","maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"homepage":"https://github.com/kadraman/beatbax#readme","bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"dist":{"shasum":"5aa01ae41dd5d82cf948eeee7af6d0acefca0854","tarball":"https://registry.npmjs.org/@beatbax/plugin-chip-spectrum-128/-/plugin-chip-spectrum-128-0.2.2.tgz","fileCount":75,"integrity":"sha512-3AK7VJezX7LAcmAe2JzaRGvXaed8wd76SZC4p7wwAXpPhOInpPDSY6sY6ls2UEdX4QF/PSiRSXlZUrRi1cAMXw==","signatures":[{"sig":"MEYCIQCZJOm0s31TolcKjaSy6r5jiOyd7kWwmxG6HHJIO09UdgIhALGdeiVTES00XmYEUEGMU/WuPJNTke85O/4s+nvKdIkt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339063},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"198c79c23d7ff070e7e0e44b5c9aca7ee9de395e","private":false,"scripts":{"test":"jest --config ./jest.config.cjs --passWithNoTests","build":"tsc -b","clean":"rimraf dist","pretest":"npm run build --if-present"},"_npmUser":{"name":"kadraman","email":"kevinalee@me.com"},"repository":{"url":"git+https://github.com/kadraman/beatbax.git","type":"git","directory":"packages/plugins/chip-spectrum-128"},"_npmVersion":"11.17.0","description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.2","ts-jest":"^29.3.3","typescript":"^5.6.3","@types/jest":"^29.5.12","@types/node":"^22.7.4"},"peerDependencies":{"@beatbax/engine":">=0.11.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-chip-spectrum-128_0.2.2_1782757313429_0.7437179627499675","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@beatbax/plugin-chip-spectrum-128","version":"0.2.3","keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"author":{"name":"BeatBax Contributors"},"license":"MIT","_id":"@beatbax/plugin-chip-spectrum-128@0.2.3","maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"homepage":"https://github.com/kadraman/beatbax#readme","bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"dist":{"shasum":"47016c36ec9dd0074eb54a7386dd68b0f18261b9","tarball":"https://registry.npmjs.org/@beatbax/plugin-chip-spectrum-128/-/plugin-chip-spectrum-128-0.2.3.tgz","fileCount":79,"integrity":"sha512-jSFdlaUySu/aK/wcs+EcFoDyOgXocrqqX3mBPTVn7jxpSITNXeCbynRs+7bmsU8Ir5Zx8SuuSZ8LO87gSd6eoA==","signatures":[{"sig":"MEUCIAEG96IjxvbktCO8rzG/wEpiLwaQJFE33c8qIthOBU8UAiEA+rbPNp5eP/phIB3AJtFTDpjb9N1j+8yV0CfLTS7XniI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346614},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"448d313839d6038ac87786ec6eeaf8a7a44c3797","private":false,"scripts":{"test":"jest --config ./jest.config.cjs --passWithNoTests","build":"tsc -b","clean":"rimraf dist","pretest":"npm run build --if-present"},"_npmUser":{"name":"kadraman","email":"kevinalee@me.com"},"repository":{"url":"git+https://github.com/kadraman/beatbax.git","type":"git","directory":"packages/plugins/chip-spectrum-128"},"_npmVersion":"11.17.0","description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.2","ts-jest":"^29.3.3","typescript":"^5.6.3","@types/jest":"^29.5.12","@types/node":"^22.7.4"},"peerDependencies":{"@beatbax/engine":">=0.11.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-chip-spectrum-128_0.2.3_1784475161867_0.32891791771122225","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@beatbax/plugin-chip-spectrum-128","version":"0.2.4","keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"author":{"name":"BeatBax Contributors"},"license":"MIT","_id":"@beatbax/plugin-chip-spectrum-128@0.2.4","maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"homepage":"https://github.com/kadraman/beatbax#readme","bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"dist":{"shasum":"dba7bcd5c1823125729128505aca7eb51bdbeed0","tarball":"https://registry.npmjs.org/@beatbax/plugin-chip-spectrum-128/-/plugin-chip-spectrum-128-0.2.4.tgz","fileCount":79,"integrity":"sha512-TD9JhxqleU5YjMMhNgYJMlf4wKKNK/IpC1Vt3y5dB5ckRHLywRgmhPWsf3NFWNMncKspKq0KvagGzEIiRas0BA==","signatures":[{"sig":"MEUCIBlOGAvo6qgFge2i8ZWXqvZL0lKttFKMDJkNInD3KmPxAiEAxSson55iNdEpzGUz+QBfwHkbxhVGSMpoQIS/5QrCNxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353958},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"93790b44a03e47d9eceb7f5384377032bea4d395","private":false,"scripts":{"test":"jest --config ./jest.config.cjs --passWithNoTests","build":"tsc -b","clean":"rimraf dist","pretest":"npm run build --if-present"},"_npmUser":{"name":"kadraman","email":"kevinalee@me.com"},"repository":{"url":"git+https://github.com/kadraman/beatbax.git","type":"git","directory":"packages/plugins/chip-spectrum-128"},"_npmVersion":"11.17.0","description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.2","ts-jest":"^29.3.3","typescript":"^5.6.3","@types/jest":"^29.5.12","@types/node":"^22.7.4"},"peerDependencies":{"@beatbax/engine":">=0.11.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-chip-spectrum-128_0.2.4_1785086395871_0.547583004957247","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@beatbax/plugin-chip-spectrum-128","version":"0.2.5","description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","private":false,"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"repository":{"type":"git","url":"git+https://github.com/kadraman/beatbax.git","directory":"packages/plugins/chip-spectrum-128"},"license":"MIT","author":{"name":"BeatBax Contributors"},"scripts":{"clean":"rimraf dist","build":"tsc -b","test":"jest --config ./jest.config.cjs --passWithNoTests","pretest":"npm run build --if-present"},"peerDependencies":{"@beatbax/engine":">=0.11.2"},"devDependencies":{"@types/jest":"^29.5.12","@types/node":"^22.7.4","jest":"^29.7.0","rimraf":"^6.1.2","ts-jest":"^29.3.3","typescript":"^5.6.3"},"gitHead":"f5018b9fd456479ab63821734d336ea9c637c2ab","_id":"@beatbax/plugin-chip-spectrum-128@0.2.5","bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"homepage":"https://github.com/kadraman/beatbax#readme","_nodeVersion":"24.12.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-R1o2RSblf8smv7yARazXpOA4HmxWD9v25qBuU5XDlpA+L7AyiGA2MucgSHs/yOs72N+b8CO0WmxbAsZiQg6k6g==","shasum":"e2ccb9659ae52bd21a44ea96becdc79da75f6060","tarball":"https://registry.npmjs.org/@beatbax/plugin-chip-spectrum-128/-/plugin-chip-spectrum-128-0.2.5.tgz","fileCount":79,"unpackedSize":354248,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCSTwe03/fwP0g9ESqLMWFgw7q4xtxFxarQe0E/k+e8DwIgXFpJpvO72KalVjUNVH7ZcT9pF7vYpTX6o9nzWIdT8pI="}]},"_npmUser":{"name":"kadraman","email":"kevinalee@me.com"},"directories":{},"maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin-chip-spectrum-128_0.2.5_1787774036331_0.32319125708282526"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T18:05:06.863Z","modified":"2026-08-26T19:53:56.709Z","0.2.0":"2026-06-04T18:05:07.174Z","0.2.1":"2026-06-14T16:18:14.664Z","0.2.2":"2026-06-29T18:21:53.559Z","0.2.3":"2026-07-19T15:32:42.009Z","0.2.4":"2026-07-26T17:19:56.030Z","0.2.5":"2026-08-26T19:53:56.516Z"},"bugs":{"url":"https://github.com/kadraman/beatbax/issues"},"author":{"name":"BeatBax Contributors"},"license":"MIT","homepage":"https://github.com/kadraman/beatbax#readme","keywords":["beatbax","plugin","chiptune","zx-spectrum","spectrum-128","amstrad-cpc","ay-3-8912","ay8910","psg"],"repository":{"type":"git","url":"git+https://github.com/kadraman/beatbax.git","directory":"packages/plugins/chip-spectrum-128"},"description":"ZX Spectrum 128 / Amstrad CPC AY-3-8912 PSG chip plugin for BeatBax.","maintainers":[{"name":"kadraman","email":"kevinalee@me.com"}],"readme":"# @beatbax/plugin-chip-spectrum-128\r\n\r\nZX Spectrum 128 / Amstrad CPC chip plugin for BeatBax.\r\n\r\nTargets the **AY-3-8912** PSG with Spectrum 128 as the primary platform and Amstrad CPC as a secondary profile.\r\n\r\n## Features\r\n\r\n- 3 tone channels (A/B/C) → `tone1`, `tone2`, `tone3`\r\n- Shared noise generator (R6, 5-bit period)\r\n- Shared hardware envelope generator (R11–R13, 16 shapes)\r\n- Per-channel mixer routing (R7, independent tone/noise enable)\r\n- Software macros: `arp_env`, `pitch_env`\r\n- Hardware envelope: `vol_env` (global R11–R13; one program at a time)\r\n- Buzz-bass mode (`env_bass`) — envelope as sub-oscillator\r\n- Conflict detection for simultaneous `noise_rate` and `vol_env` writes\r\n- Amstrad CPC platform profile (`chip cpc` / `chip amstrad-cpc`, 1 MHz AY clock)\r\n- New Song Wizard with Spectrum 128 and CPC variants\r\n- Full UI contributions (Copilot system prompt, hover docs, help sections)\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @beatbax/plugin-chip-spectrum-128\r\n```\r\n\r\n## Usage\r\n\r\n```typescript\r\nimport { BeatBaxEngine } from '@beatbax/engine';\r\nimport spectrumPlugin from '@beatbax/plugin-chip-spectrum-128';\r\n\r\nconst engine = new BeatBaxEngine();\r\nengine.registerChipPlugin(spectrumPlugin);\r\n```\r\n\r\n## BeatBax Script\r\n\r\n```bax\r\nchip spectrum-128\r\nbpm 120\r\n\r\ninst lead type=tone1 vol=12 arp_env=[0,4,7|0]\r\ninst bass type=tone2 vol=14\r\ninst pad  type=tone3 vol=10\r\n\r\npat melody = C4 E4 G4 C5 B4 G4 E4 .\r\npat bass   = C2 . . . G1 . . .\r\n\r\nchannel 1 => inst lead pat melody\r\nchannel 2 => inst bass pat bass\r\nchannel 3 => inst pad  pat melody\r\n\r\nplay\r\n```\r\n\r\n## AY-3-8912 Hardware Model\r\n\r\n| Voice | BeatBax type | AY register | Notes |\r\n|-------|--------------|-------------|-------|\r\n| A | `tone1` | R0–R1 tone period, R8 attenuation | Square wave, 12-bit period |\r\n| B | `tone2` | R2–R3, R9 | Square wave |\r\n| C | `tone3` | R4–R5, R10 | Square wave; commonly bass or drum borrow |\r\n| — | *(mixer)* | R7 | Per-channel tone/noise enable bits (active-low) |\r\n| — | *(shared)* | R6 | **One** noise period (5-bit) for entire chip |\r\n| — | *(shared)* | R11–R13 | **One** envelope period + shape; global |\r\n\r\n## Platform Profiles\r\n\r\n| Chip directive | Machine | AY clock | Frame rate |\r\n|---|---|---|---|\r\n| `chip spectrum-128` (default) | ZX Spectrum 128 | 1,773,400 Hz | 50 Hz |\r\n| `chip cpc` or `chip amstrad-cpc` | Amstrad CPC 464/6128 | 1,000,000 Hz | 50 Hz |\r\n\r\nTo target Amstrad CPC:\r\n```bax\r\nchip cpc\r\n```\r\n\r\nAliases `cpc` and `amstrad-cpc` use the same `@beatbax/plugin-chip-spectrum-128` plugin with the 1 MHz clock preset. Note content and macros are identical across profiles.\r\n\r\n## Preview loudness (volume curve)\r\n\r\nBeatBax preview maps AY `vol` / R8–R10 through a **logarithmic DAC table** (hardware-accurate step relationships), then scales so three channels at `vol=15` target ~**0.85** peak — the same full-mix headroom as NES and SMS.\r\n\r\n| Concern | Behaviour |\r\n|---------|-----------|\r\n| Step shape | AY DAC (e.g. `vol=10` ≪ linear `10/15` of max) |\r\n| Overall level | Peak-normalised for cross-chip comfort in the app |\r\n| vs Arkos Tracker | Relative `vol` steps should match; absolute WAV LUFS may still differ |\r\n\r\nConstants: `AY_DAC_LEVELS`, `AY_TARGET_PEAK`, `AY_CHANNEL_PEAK`, `amplitudeToGain()` in `src/ay-volume.ts`.\r\n\r\n## Instrument Fields\r\n\r\n| Field | Type | Range | Description |\r\n|-------|------|-------|-------------|\r\n| `vol` | number | 0–15 | Fixed amplitude (AY log DAC; 0=silent, 15=loudest) |\r\n| `vol_env` | array/string | `[0-15,...\\|loopIdx]` | Hardware envelope program (global R11–R13) |\r\n| `arp_env` | array/string | semitone offsets | Arpeggio macro |\r\n| `pitch_env` | array/string | semitone offsets | Pitch bend macro |\r\n| `tone_mix` | boolean | — | Enable noise in R7 mixer for this channel |\r\n| `noise_rate` | number | 0–31 | R6 noise period (global — conflicts when different values overlap) |\r\n| `noise_frames` | number | 0–60 | Mix noise for first N 60 Hz frames only (transient attack) |\r\n| `tone_frames` | number | 0–60 | Mix tone for first N 60 Hz frames only (stick transient) |\r\n| `tone_vol` | number | 0–15 | Cap tone-path volume separately from noise (`vol` / `vol_env`) |\r\n| `env_bass` | boolean | — | Buzz-bass mode (envelope as oscillator) |\r\n| `env_shape` | integer | 8 | R13 envelope shape (0–15); only with `env_bass=true` |\r\n\r\nSelect the platform with the chip directive: use `chip spectrum-128` for ZX Spectrum 128 or `chip cpc` / `chip amstrad-cpc` for the Amstrad CPC AY clock.\r\n\r\n## Shared-Resource Constraints\r\n\r\n### Noise period (R6)\r\nOnly **one** noise period is active per tick. When multiple channels request different `noise_rate` values on the same tick, the last writer wins and a diagnostic warning is emitted.\r\n\r\n**Working pattern:**\r\n```bax\r\n; All percussion uses the same noise_rate — stagger hits\r\ninst kick  type=tone3 vol=15 tone_mix=true noise_rate=10\r\ninst snare type=tone2 vol=12 tone_mix=true noise_rate=10\r\n```\r\n\r\n### Envelope (R11–R13)\r\nOnly **one** hardware envelope program (`vol_env` or `env_bass`) should be active at a time. For independent per-channel volume shaping, use BeatBax software volume slides instead.\r\n\r\n## Sample Songs\r\n\r\nSee `songs/spectrum-128/` for example BeatBax songs:\r\n\r\n**Full arrangements**\r\n\r\n- `spectral_phantoms.bax` — Spectrum 128 gothic action theme (buzz bass, dense arps)\r\n- `steel_justice.bax` — Spectrum 128 punchy action title (ostinato, kit)\r\n- `cave_run_theme.bax` — Amstrad CPC platformer theme (`chip cpc`)\r\n\r\n**Instrument demos** (`instruments/`)\r\n\r\n| Song | Purpose |\r\n|------|---------|\r\n| `ay_synth_channels.bax` | Minimal tone A/B/C smoke check |\r\n| `ay_macro_arp_pitch.bax` | `arp_env` and `pitch_env` on three channels |\r\n| `ay_percussion_demo.bax` | Named drum kit (split + multiplexed) |\r\n| `ay_noise_mixing.bax` | Tone / tone+noise / noise-only mixer routing |\r\n| `ay_buzz_bass.bax` | Buzz bass (`env_bass`) |\r\n| `ay_all_macros.bax` | Valid macro combination without illegal overlaps |\r\n| `ay_noise_rate_conflict.bax` | Intentional R6 conflict — expect `verify` warning |\r\n| `ay_vol_env_conflict.bax` | Intentional R11–R13 conflict — expect `verify` warning |\r\n\r\n**Effect demos** (`effects/`)\r\n\r\n| Song | Purpose |\r\n|------|---------|\r\n| `ay_effects_showcase.bax` | Supported inline effect coverage |\r\n| `ay_unsupported_effects_demo.bax` | Invalid / SMS-only effects for `verify` |\r\n\r\n## Development\r\n\r\n```bash\r\ncd packages/plugins/chip-spectrum-128\r\nnpm install\r\nnpm run build\r\nnpm test\r\n```\r\n","readmeFilename":"README.md"}