strudel/packages/motion
2025-01-31 08:19:26 +01:00
..
docs Add DOC for devicemotion 2024-12-17 17:28:53 +08:00
index.mjs Add Device Motion package 2024-11-21 12:01:17 +08:00
motion.mjs Add DOC for devicemotion 2024-12-17 17:28:53 +08:00
package.json chore: bump vite + update lockfile 2025-01-31 08:19:26 +01:00
README.md Update README.md 2025-01-18 07:09:43 +08:00
vite.config.js Add Device Motion package 2024-11-21 12:01:17 +08:00

@strudel/motion

This package adds device motion sensing functionality to strudel Patterns.

Install

npm i @strudel/motion --save

Setup SSL for Local Development

DeviceMotionEvent only works with HTTPS, so you'll need to enable SSL for local development. Try installing an SSL plugin for Vite.

cd website
pnpm install -D @vitejs/plugin-basic-ssl

add the basicSsl plugin to the defineConfig block in strudel/website/astro.config.mjs

vite: {
  plugins: [basicSsl()],
  server: {
    host: '0.0.0.0', // Ensures it binds to all network interfaces
    // https: { 
    //   key: '../../key.pem', //
    //   cert: '../../cert.pem',
    // },
  },
},

generate an SSL certificate to avoid security warnings.

openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout key.pem -out cert.pem

Usage

Motion Long Names & Aliases Description
Acceleration accelerationX (accX), accelerationY (accY), accelerationZ (accZ) X, Y, Z-axis acceleration values
Gravity gravityX (gravX), gravityY (gravY), gravityZ (gravZ) X, Y, Z-axis gravity values
Rotation rotationAlpha (rotA, rotZ), rotationBeta (rotB, rotX), rotationGamma (rotG, rotY) Rotation around alpha, beta, gamma axes and mapped to X, Y, Z
Orientation orientationAlpha (oriA, oriZ), orientationBeta (oriB, oriX), orientationGamma (oriG, oriY) Orientation alpha, beta, gamma values and mapped to X, Y, Z
Absolute Orientation absoluteOrientationAlpha (absOriA, absOriZ), absoluteOrientationBeta (absOriB, absOriX), absoluteOrientationGamma (absOriG, absOriY) Absolute orientation alpha, beta, gamma values and mapped to X, Y, Z

Example

enableMotion() //enable DeviceMotion 

let tempo = 200

$_: accX.segment(16).gain().log()

$:n("[0 1 3 1 5 4]/4")
  .scale("Bb:lydian")
  .sometimesBy(0.5,sub(note(12)))
  .lpf(gravityY.range(20,1000))
  .lpq(gravityZ.range(1,30))
  .lpenv(gravityX.range(2,2))
  .gain(oriX.range(0.2,0.8))
  .room(oriZ.range(0,0.5))
  .attack(oriY.range(0,0.3))
  .delay(rotG.range(0,1))
  .decay(rotA.range(0,1))
  .attack(rotB.range(0,0.1))
  .sound("sawtooth").cpm(tempo)