o
odinpkg.dev
packages / library / iris

iris

f700847library

a visualization technique for signals & stories

MIT · updated 8 months ago
      ⌒
 ┬ ┬──┐ ┬ ┌──┐
 │ │  │ │ │  │
 │ ├─┬┘ │ └──┐
 │ │ │  │ │  │
 ┴ ┴ └─ ┴ └──┘

a visualization technique for signals & stories

Iris screenshot Iris screenshot Iris screenshot
Iris screenshot Iris screenshot Iris screenshot

Iris is an art project & visualization system written in Odin & Raylib, which runs on desktop systems that support openGL, including Raspberry Pi.

It contains...

  • an audio engine which performs basic audio analysis (RMS, centroid, FFT)
  • scenes which are passed the audio features for visualizing
  • shaders n stuff
  • keyboard-centric control
  • (hopefully) decent performance for low-powered systems (RPi)
  • (planned) automatic scene switching

Scenes

Scenes are inspired by artefacts from Greek mythology.

AMBROSIA

Food of the gods.

Iris gif - AMBROSIA scene

NECKLACE OF HARMONIA

Cursed jewellery.

Iris gif - HARMONIA scene

HARPE

Blades of sound.

Under construction ⚠️

Key mappings

Iris has a layer-based key mapping system for ready-to-hand & expressive keyboard control.

There are 4 key map layers. In each layer, the alphanumeric keys are used as primary keys for certain actions.

App shortcuts

Activated by holding the Ctrl+Alt modifier

  • Toggle FPS: /
  • Toggle cursor visibility: c
  • Quit: q

Global Scene Mode

Primarily for switching between scenes.

Permanent latch: [Alt/Option]+Enter or [Alt/Option]+Tab
Temporary latch: Alt/Option

  • [a-z] keys switch scenes (currently only a handful do something)
  • [1-9, 0]for setting the audio input level (1 is min, 0 is max, i.e. number-row-as-a-slider)

Global FX Mode

For toggling effects.

Permanent latch: Shift+Enter or Shift+Tab
Temporary latch: Shift

Actions:

  • Toggle pixelate: p
  • Toggle warp: w
  • ...more coming
  • Clear all: backspace

Scene Mode

Under construction ⚠️

For controlling individual scene parameters.

Permanent latch: Ctrl+Enter or Ctrl+Tab
Temporary latch: Ctrl

How to build

Under construction ⚠️

Extending

Iris can be extended with the addition of scenes: simple structs which provide a draw procedure. Scene draw procedures are passed the scene's current state, a set of params (which includes audio features) and a texture to draw to. Scenes are initialised in init_scenes in scene.odin.

scene_utils.odin contains utilities for visualization: a stateless LFO including smoothed random, interpolators, polar/cartesian convertors & colour utilities.

Appearances

References & inspirations


N.B. Iris is in its very early stages and will remain unstable/experimental for some time. I'm not actively seeking contributions but will happily answer any questions about the project.