1# @strudel/gamepad 2 3This package adds gamepad input functionality to strudel Patterns. 4 5## Install 6 7```sh 8npm i @strudel/gamepad --save 9``` 10 11## Usage 12 13```javascript 14import { gamepad } from '@strudel/gamepad'; 15 16// Initialize gamepad (optional index parameter, defaults to 0) 17const pad = gamepad(0); 18 19// Use gamepad inputs in patterns 20const pattern = sequence([ 21 // Button inputs 22 pad.a, // A button value (0-1) 23 pad.tglA, // A button toggle (0 or 1) 24 25 // Analog stick inputs 26 pad.x1, // Left stick X (0-1) 27 pad.x1_2, // Left stick X (-1 to 1) 28]); 29``` 30 31## Available Controls 32 33### Buttons 34- Face Buttons 35 - `a`, `b`, `x`, `y` (or uppercase `A`, `B`, `X`, `Y`) 36 - Toggle versions: `tglA`, `tglB`, `tglX`, `tglY` 37- Shoulder Buttons 38 - `lb`, `rb`, `lt`, `rt` (or uppercase `LB`, `RB`, `LT`, `RT`) 39 - Toggle versions: `tglLB`, `tglRB`, `tglLT`, `tglRT` 40- D-Pad 41 - `up`, `down`, `left`, `right` (or `u`, `d`, `l`, `r` or uppercase) 42 - Toggle versions: `tglUp`, `tglDown`, `tglLeft`, `tglRight`(or `tglU`, `tglD`, `tglL`, `tglR`) 43- Stick Buttons 44 - `l3`, `r3` (or `ls`, `rs`) 45 - Toggle versions: `tglL3`, `tglR3` (or `tglLS`, `tglRS`) 46- System Buttons 47 - `start`, `back` (or uppercase `START`, `BACK`) 48 - Toggle versions: `tglStart`, `tglBack` (or `tglSTART`, `tglBACK`) 49 50### Analog Sticks 51- Left Stick 52 - `x1`, `y1` (0 to 1 range) 53 - `x1_2`, `y1_2` (-1 to 1 range) 54- Right Stick 55 - `x2`, `y2` (0 to 1 range) 56 - `x2_2`, `y2_2` (-1 to 1 range) 57 58## Examples 59 60```javascript 61// Use button values to control amplitude 62$: sequence([ 63 s("bd").gain(pad.X), // X button controls gain 64 s("[hh oh]").gain(pad.tglY), // Y button toggles gain 65]); 66 67// Use analog stick for continuous control 68$: note("c4*4".add(pad.y1_2.range(-24,24))) // Left stick Y controls pitch shift 69 .pan(pad.x1_2); // Left stick X controls panning 70 71// Use toggle buttons to switch patterns on/off 72 73// Define button sequences 74const HADOKEN = [ 75 'd', // Down 76 'r', // Right 77 'a', // A 78]; 79 80const KONAMI = 'uuddlrlrba' //Konami Code ↑↑↓↓←→←→BA 81 82// Add these lines to enable buttons(but why?) 83$:pad.D.segment(16).gain(0) 84$:pad.R.segment(16).gain(0) 85$:pad.A.segment(16).gain(0) 86 87// Check button sequence (returns 1 when detected, 0 when not within last 1 second) 88$: sound("hadoken").gain(pad.checkSequence(HADOKEN)) 89 90``` 91 92## Multiple Gamepads 93 94You can connect multiple gamepads by specifying the gamepad index: 95 96```javascript 97const pad1 = gamepad(0); // First gamepad 98const pad2 = gamepad(1); // Second gamepad 99```