Wind Chimes User Manual

Wind Chimes is a playable generative MIDI instrument for iPhone and iPad. A simulated wind field moves a graduated row of hanging chimes. When the chimes collide, Wind Chimes creates MIDI notes whose pitch, velocity, and timing come from the row's tuning and physical motion.

Use the standalone app as an immediately audible instrument with its built-in sampler, send MIDI to other apps or hardware, or load the included AUv3 MIDI Generator in a compatible host.

Table of Contents

  1. Overview
  2. Quick Start
  3. Interface Overview
  4. Playing the Chimes
  5. Wind Controls
  6. Row and Musical Controls
  7. Editing an Individual Chime
  8. MIDI Chime Tuning
  9. Timing and Quantization
  10. MIDI Output and Mapping
  11. Built-in Sampler
  12. Presets
  13. AUv3 MIDI Generator
  14. Settings and Appearance
  15. Tips and Starting Points
  16. Troubleshooting
  17. MIDI Reference
  18. Links

Overview

Wind Chimes models a direct-knock chime set: there is no central clapper. The hanging bodies ring by touching one another. Every chime can collide with any other chime it can physically reach, not only the one beside it.

The row is musical as well as physical:

The animated wind ribbons, drifting debris, sky, and strike flashes show the same wind and collision state that drives the MIDI. They are not a separate decorative simulation.

Quick Start

  1. Open the standalone app. The built-in sampler is enabled, so the row should be audible immediately.
  2. Raise Strength if you want more movement and more frequent collisions.
  3. Tap a bell for a small flick, or hold and drag it horizontally into another chime.
  4. Adjust Turbulence, Frequency, and Gust to shape gust activity.
  5. Use Key, Transpose, and the note-shaped Scale button to shape the row's tuning.
  6. Open the folder button and try a factory preset.
  7. Tap the dice button for an instant new design — chime layout, harmonics, and wind parameters all rolled together.
  8. To control another synth, open Settings, enable a Virtual MIDI Out or a listed MIDI destination, and configure the receiving instrument to listen to the chimes' MIDI channels.

For AUv3 use, insert Wind Chimes as a MIDI Generator and route Wind Chimes Out to an instrument track. The plug-in itself intentionally generates no audio.

Interface Overview

Performance scene

The large scene contains the rail, the chimes, and the animated wind. Bright strike effects identify collisions that became MIDI triggers. A hold ring identifies a chime currently under your finger.

Small perch marks above the rail select individual chimes for editing. The bird is the current selection marker: it flies to the selected perch, moves when you select another chime, and leaves when you clear the selection.

Wind control panel

When no individual chime is selected, the control panel shows six knobs:

Bottom toolbar

From left to right, the toolbar contains a left group and a right group, separated by flexible space:

(flexible space)

Drag a knob vertically to change it. Key, Transpose, Chimes, and Spread also open a list when tapped.

Full-screen performance

Tap the diagonal Expand arrows at the left edge of the toolbar to animate the live performance scene out of the normal layout and across the entire available app or plug-in view. The scene draws to the outer edges rather than stopping at the safe area, while its Collapse button remains safely positioned in the lower-left corner.

Tap the opposing diagonal Collapse arrows to animate the scene back into its original place above the controls. Expanding and collapsing do not restart the wind, clear the selected chime, or create a second scene—the current performance continues through the transition. In an AUv3 host, full-screen mode fills the plug-in view supplied by that host; it does not cover the host application's own interface.

Scene size and physical behavior

Wind Chimes draws the row at whatever size the performance scene actually is on screen, and the chimes' physical behavior—not just their drawn size—follows that scene size directly. A larger drawn scene gives the chimes physically longer cords: they swing more slowly and collide less often. A smaller drawn scene gives them physically shorter cords: they swing faster and collide more often. The row's tuning, notes, and every musical setting stay exactly the same either way—only the pace of the physical motion changes.

This means the same setup can feel different depending on how the scene is currently drawn:

This is intentional rather than a bug: a chime's on-screen size and its physical behavior always agree with each other, at any scene size, so what you see swinging is always exactly what is colliding and sounding. It also means a preset is not guaranteed to strike at exactly the same rate in every context—see Spread for the one control that still shapes density independently of scene size, by changing how tightly the row is packed within whatever scene is currently drawn.

Playing the Chimes

Let the wind play

The default workflow is generative. Set the wind controls, then let the row evolve. Wind moves across the row with local variation, so chimes do not swing in perfect lockstep. Gusts travel through the row and create changes in density and dynamics.

At Strength = 0, the wind is silent by design. A row can also be quiet at low-energy settings simply because no bodies are reaching one another. Increase Strength, Turbulence, Gust Frequency, or Gust Strength; make the row more compact with Spread; or play a chime by touch.

Tap, hold, drag, and release

The touch target is intentionally larger than the narrow drawn bell. Multi-touch is supported; separate fingers can hold separate chimes.

Select a chime without playing it

Tap the small perch mark directly above a chime. The per-chime editor replaces the wind controls. Tap the selected perch again to clear the selection and return to the wind panel. Perch taps are resolved before bell touches, so selecting a chime does not also strike it.

Wind Controls

Control Range Default Effect
Overall Strength 0–1 0.45 Sets the total wind drive. Zero prevents wind-generated strikes.
Direction −1–1 0.00 Reverses and biases the prevailing wind across the row.
Turbulence 0–1 0.35 Adds faster, irregular local motion and helps chimes separate and collide.
Gust Frequency 0–1 0.25 Sets how often discrete gusts tend to arrive.
Gust Strength 0–1 0.35 Sets the size of each gust impulse.
Inertia 0–1 0.55 Higher values produce slower, smoother, more damped movement.

These controls interact. High Strength with low Turbulence can create broad coordinated sways, while more Turbulence breaks the row into busier local motion. Gust Frequency controls event density; Gust Strength controls how disruptive each event is.

New Wind changes the runtime seed and restarts the simulation. It keeps every visible control, chime setting, key, scale, and preset value unchanged. Use it when you like the setup but want a different performance.

Randomize goes further: it rolls a brand-new chime layout, harmonic pattern, and every wind parameter together, replacing the current design rather than just its wind sequence. Rolls stay musical — the randomizer samples from a set of named wind characters (still air, gentle breeze, playful, gusty, ceremonial, storm, and machine, weighted toward the calmer characters) rather than choosing every value independently, so a roll never lands silent or floods with strikes. Use New Wind when you like the design and only want a new performance of it; use Randomize when you want a new design.

Row and Musical Controls

Chimes

Choose between 2 and 16 chimes. Two is the minimum because a collision needs a pair.

Changing the count rebuilds the physical silhouette from longer bodies on the left to shorter bodies on the right. For positions that survive the resize, Wind Chimes preserves edited weight, pitch, MIDI channel, CC settings, and enable states. Length is regenerated, but preserved pitch edits are not forced back into ascending order.

Spread

Spread is displayed from 0% to 100%:

A compact row generally makes contact easier. A wide row allows more independent movement before collisions. At very wide settings, outer chimes can swing partly beyond the scene edge; this does not stop the simulation.

Spread reshapes the row within whatever scene is currently drawn; it does not change how large that scene is. For the separate effect of the scene's own size—full screen versus inline, portrait versus landscape, device, or an AUv3 host's window—see Scene size and physical behavior.

Key and Scale

The Key control steps through available note names. The note icon opens the searchable scale picker, which also supports favoriting scales for quick access. Changing either retunes the entire row immediately.

Each chime stores a position in the current key/scale note pool rather than a permanently fixed MIDI note. Retuning therefore preserves the chime's musical role while moving it into the new key or scale. Length, weight, and spacing do not change when you retune.

The default row begins around C4/MIDI note 60 and ascends by scale steps from left to right. You can override each chime's pitch in its individual editor.

Transpose

Transpose shifts every chime together by scale-pool positions, from -24 to +24. A positive value moves upward through the current scale; a negative value moves downward. Because the control advances through the current Key and Scale's pitch pool, it stays in-scale instead of applying a fixed semitone offset.

Transpose is a global offset: each chime keeps its own stored pitch choice, so returning Transpose to 0 restores the original tuning. If the offset would pass below MIDI 0 or above MIDI 127, the affected notes clamp to the nearest available pitch.

Editing an Individual Chime

Tap a perch mark to open the selected chime's editor. Its header shows Chime N, the current pitch, and two toggles.

Header controls

Chime knobs

Control Display range Meaning
Length 0–100% Total cord-plus-bell drop. It changes swing period, reach, and contact geometry, but does not select the MIDI pitch.
Weight 0–100% Bell proportion and mass. It changes visible bell length, damping, momentum, and collision response, but does not select the MIDI pitch.
Channel 1–16 MIDI channel for this chime's notes and CC.
CC# 0–127 Controller number used for swing-angle output.
CC Min 0–127 Value sent at the negative swing extreme.
CC Max 0–127 Value sent at the positive swing extreme.

The MIDI mapper chooses the note from the struck chime's configured Pitch: its normal pitch for an ordinary strike or the next in-scale pitch for a hard strike. Length and Weight are not part of that note lookup. Because they change the physics, however, they can indirectly affect whether and when collisions happen, which chime is considered struck, and the collision force used for velocity.

CC#, CC Min, and CC Max are dimmed until the CC toggle is enabled. Set CC Min above CC Max to invert the movement mapping.

Factory/default rows start on channel 1, assign CC numbers upward from CC 20, use a 0–127 CC range, and leave CC output disabled.

MIDI Chime Tuning

Open Settings → Chimes → MIDI Chime Tuning to retune the whole row from an external MIDI keyboard or controller, one chime at a time, instead of adjusting each chime's Pitch knob individually. This works the same way in the standalone app and inside the AUv3 plug-in.

How it works

  1. Opening the screen discards any MIDI input that arrived before you got there, so a stray note played while navigating menus can't unexpectedly retune the first chime.
  2. Play a note on a connected keyboard or controller — in the standalone app, from Virtual MIDI In or an enabled CoreMIDI input; inside the AUv3 plug-in, from whatever MIDI the host sends into the plug-in. The chime under the cursor is assigned that pitch immediately.
  3. With Auto Advance on (the default), the cursor moves to the next chime after every note, cycling back to the first chime once it passes the last one — play a scale, one note per chime, and keep going past the end without getting stuck.
  4. With Auto Advance off, the cursor stays put: every further note retunes the same chime, which is useful for auditioning a few pitches on one chime before moving on. Tap a different cell at any time to move the cursor there directly.

Tuning always happens on a Chromatic draft with Transpose reset to 0 for the session, so every note you play maps directly onto the chime's sound with no scale-degree math in the way. A note far enough below the current Key's root clamps to the lowest available pitch, the same way an extreme Transpose value does.

Reading the grid

Each numbered cell shows:

The cell with the accent-colored border is the cursor: the chime the next note you play will retune.

Undo, Reset, Done, and Cancel

Timing and Quantization

Open Settings → Quantization.

Timing Mode

Grid Subdivision

The grid appears when Timing Mode is Quantized. Available values are:

In the AUv3 plug-in, Quantized mode follows the host's real tempo and playhead whenever the host reports them, so quantized output locks to the DAW's tempo grid. The standalone app has no host to query and always uses an internal free-running 120 BPM clock instead; the AUv3 plug-in falls back to the same 120 BPM clock only if a host doesn't report musical context/transport state.

New Wind, Randomize, preset loading, and state resets restart the generated run. If you need DAW-synchronous rhythm, use Free mode and quantize the recorded MIDI in the host, or use a host-side MIDI timing tool after Wind Chimes.

MIDI Output and Mapping

Note generation

Each sounding collision produces:

  1. A note-on on the struck chime's MIDI channel.
  2. Velocity from 1 to 127 based on collision force.
  3. The normal pitch, or the next in-scale accent pitch for a hard collision—unless Accented Notes is off, which keeps every collision on the normal pitch (see Accented Notes).
  4. A note-off about 20 ms later.

This short gate is intentional. Wind Chimes is a trigger generator; the receiving sampler or synthesizer's release envelope determines how long the sound rings.

All generated messages use MIDI cable/bus 0.

Swing-angle CC

When a chime's CC toggle is enabled, its current swing angle is mapped continuously between CC Min and CC Max and evaluated at 60 Hz. Repeated identical values are suppressed. The short smoothing applied to this stream keeps motion fluid without disconnecting it from the chime.

CC output uses the same per-chime channel as notes. It is independent of the built-in sampler, which ignores these controller messages.

Standalone MIDI routing

Open Settings in the standalone app:

The standalone MIDI In section lists a Virtual MIDI In switch plus one switch per available CoreMIDI input port. Outside of MIDI Chime Tuning, this is not a surface for playing or retriggering the chimes: incoming notes and CC do not drive the instrument during normal performance, and the current input path only passes incoming pitch-wheel data through to connected outputs.

Built-in Sampler

The standalone app includes an Apple sampler so you can hear the generated notes without connecting another instrument.

Open Settings → Sampler:

The sampler receives the same notes that are sent to CoreMIDI, but it plays all notes on its own channel 1. Per-chime channel differences still apply to external MIDI destinations. Swing-angle CC messages do not control the sampler.

The app's audio session mixes with other audio. If you want Wind Chimes only as a MIDI source, disable the sampler while leaving MIDI outputs enabled.

Presets

Tap the folder button to open two tabs.

Factory Presets

Wind Chimes includes 21 factory choices including Init: a curated set of 20 presets grouped into calm and airy rows, nocturnal and ceremonial bells, bright and geometric tunings, and rhythmic and propulsive quantized weather. Examples include Morning Dew, Sunken Cathedral, Obsidian Bells, Crystal Orbit, Silver Machine, Harmonic Spire, Monsoon Pulse, Prayer Wheels, and Aurora Drift.

Tap a preset to apply it. Use the previous and next arrow buttons to audition neighboring entries.

User Presets

Open User Presets and tap + to save the current setup under a name. A user preset stores:

Swipe a user preset to Rename or Delete it. User presets use iCloud Documents when available and otherwise use the app's shared container. The standalone app and AUv3 extension share that preset location.

Presets intentionally do not preserve an exact wind sequence. Loading any preset starts it with a fresh runtime seed, so the controls and chime design return but the motion unfolds differently.

The appearance theme is part of the preset. If you choose a theme in Settings and save a user preset, loading that preset restores the theme along with its wind, tuning, and chime design. The theme also applies to the preset browser and the complete animated scene. New documents use the last selected theme, and older theme-less documents use it as a fallback; a saved preset keeps its own theme afterward.

AUv3 MIDI Generator

Wind Chimes includes an AUv3 component registered as a MIDI Generator. In a compatible host, look for Cem Olcay: Wind Chimes or Wind Chimes among MIDI effects/generators.

Basic host setup

  1. Add Wind Chimes to a MIDI-generator or MIDI-effect slot.
  2. Route its MIDI output, named Wind Chimes Out, to a software instrument or external MIDI destination.
  3. Open the plug-in UI to set the wind, row, tuning, and per-chime mappings.
  4. Keep the destination instrument armed/monitored according to the host's routing model.

The AUv3 produces silence on its audio output by design and has no built-in sampler. Hearing nothing from its audio bus is expected; the host must route its MIDI output to an instrument.

Automation parameters

The host-visible parameter tree contains eleven parameters:

Key, Scale, and Transpose are discrete indexed choices. Per-chime fields, Chime Count, Spread, and the selected theme are not AU parameters, but they are included in the plug-in's saved full state along with all other preset data.

Wind Chimes exposes factory presets and supports host user presets. Compatible hosts should restore the full row, tuning, per-chime configuration, Spread, and parameters with the session. Each plug-in instance owns its own running simulation and state.

The AUv3 accepts parameter automation but does not process incoming MIDI notes or CC during normal performance. The one exception is MIDI Chime Tuning: while that screen is open, note-on messages the host sends into the plug-in retune the row instead of being ignored. Host tempo/transport IS connected to quantization when the host reports them; see Timing and Quantization.

Plug-in settings

The AUv3 Settings screen contains Appearance, Quantization, and Support. Standalone-only features—CoreMIDI input/output selection, MIDI Panic, and the built-in sampler—do not appear inside the plug-in. Note that the Support section's Tutorial button opens a URL only the standalone app can handle, so it will not do anything inside a host.

Settings and Appearance

Accented Notes

The Accented Notes switch, in both standalone and AUv3 settings, turns the accent-note behavior described in Overview on or off for the whole row. On (the default), a hard strike sounds one scale step above the struck chime's normal pitch. Off, every strike sounds the chime's normal pitch regardless of force—velocity still rises with a harder hit, only the pitch stays fixed.

This is a per-preset setting: it saves with a user preset and restores with it, the same as Key, Scale, or Transpose.

Appearance

The Theme picker changes the app chrome and the complete animated scene. Eighteen themes are available, with Sakura as the default:

The chosen theme belongs to the current preset/document and is applied to both the UIKit controls and the complete SpriteKit scene. Saving a user preset captures it; loading a preset restores its own theme. The last selected theme is also remembered as the default for new documents and as a compatibility fallback for older presets that do not contain a theme yet.

Quantization

Timing Mode and Grid Subdivision are available in both standalone and AUv3 settings. See Timing and Quantization for the grid and the host-tempo/120 BPM behavior.

Support

Both the standalone app and the AUv3 plug-in include a Support section with:

Standalone-only sections

The standalone Settings screen also provides Sampler, MIDI In, MIDI Out, and MIDI Panic controls. Tap Done to close Settings. The version number appears at the bottom.

Tips and Starting Points

Troubleshooting

No sound in the standalone app

The chimes move but I hear few or no notes

The chimes feel faster/slower or strike more/less often after rotating, resizing, or going full screen

This is expected. See Scene size and physical behavior: the chimes' physical swing speed and strike rate follow the actual size of the drawn performance scene, so full screen versus inline, portrait versus landscape, device, and (in AUv3) plug-in window size can all change the pace of a preset even though every musical and wind setting is unchanged. If the new pace is not what you want, adjust Spread or the wind controls rather than looking for a setting that "fixes" the size dependency—there isn't one, by design.

No MIDI reaches another app or device

AUv3 is visible but silent

Wind Chimes is a MIDI Generator, not an audio instrument. Route its MIDI output to a synth or sampler. The plug-in's own audio output is intentionally silent, and the standalone built-in sampler is not included inside AUv3.

Quantized notes do not match the DAW tempo, or don't move when the DAW's tempo changes

Quantized mode follows the host's tempo/playhead automatically in a host that reports musical context and transport state each render call. If a host doesn't report either, Wind Chimes falls back to its internal 120 BPM clock and quantized output no longer tracks the DAW. Use Free mode and quantize after recording if that fallback doesn't match what you need.

CC is missing

Notes are stuck

A saved preset plays a different pattern

This is intentional. Presets save the instrument design, not the random seed. Every load begins a fresh wind sequence.

A per-chime editor disappeared after resizing or loading a preset

Selection is temporary UI state and is not stored. A resize or preset can remove the selected chime, so Wind Chimes clears the selection and returns to the global wind controls. Tap a perch to select again.

Incoming MIDI does not play the chimes

Wind Chimes is generated by its own wind simulation and touch surface, not by incoming MIDI. The one exception is MIDI Chime Tuning (Settings → Chimes → MIDI Chime Tuning): while that screen is open, incoming note-on messages retune the row instead of triggering playback. Outside that screen, in the standalone app the only implemented MIDI-input behavior is pitch-wheel pass-through; the AUv3 ignores incoming MIDI during normal performance and accepts parameter automation only.

MIDI Reference

Item Behavior
Direction MIDI output from Wind Chimes to destinations/host
Note channel Per chime, displayed as 1–16; stored on the wire as 0–15
Note number Per-chime pitch in the selected key/scale; hard strikes use the next in-scale pitch when Accented Notes is on (see Accented Notes)
Velocity Collision force mapped to 1–127
Gate Fixed trigger of approximately 20 ms
CC enable Per chime; off by default
Default CC numbers CC 20 upward by row position
CC range 0–127; CC Min above CC Max inverts the mapping
CC update rate 60 Hz with smoothing and duplicate suppression
Cable/bus 0
Panic Standalone only: CC 123 and CC 120 on all 16 channels, plus sampler note stop
AUv3 output name Wind Chimes Out
AUv3 component role MIDI Generator (aumi); silent audio output
Quantization clock AUv3: host tempo/transport when the host reports them; standalone and unreporting hosts: internal 120 BPM