FuncBud User Manual
Overview
FuncBud is a MIDI step sequencer that generates melodies from math formulas instead of a
traditional piano-roll grid. Each step in a pattern is a small function you write yourself โ using
numbers, arithmetic, squares, square roots, sums, products, conditions, or random ranges โ and the
sequencer evaluates that function every step to pick the next note. The same pattern engine is
available in two forms: a standalone iOS app with its own tempo clock, Ableton Link support, and
built-in synth, and an AUv3 MIDI plugin you can load inside a host app to drive other instruments.
Core Concept
Every pattern is built from one or more functions, listed top to bottom. The sequencer keeps a
running value, ๐ณ, which starts equal to the root note, ๐ผ. On each step it evaluates the
current function to produce a new ๐ณ, converts that number to a note in the pattern's key, scale, and
octave range, and plays it. Then it moves on to the next function in the list โ or repeats the same
one, if you've set a repeat count above 1 โ before wrapping back to the first function again.
Every ๐ณ value the sequencer produces is also kept in a rolling history of up to 64 results. Two
special functions, โ (sum) and โ (product), read back into that history โ so a formula can
depend on where the sequence has already been, not just where it is right now.
Interface Overview
The main screen is split into three areas, top to bottom:
- Header โ the root note, key, scale, and min/max octave controls, plus the play button and
document title.
- Function list โ the ordered list of functions that make up the current pattern, each with a
repeat-count stepper.
- Bottom bar โ the current note display (LED), pattern selector, function-list actions (New,
Library, Edit, Clear), the Settings button, and the performance knobs (Rate, Gate, Gate Variety,
Velocity, Velocity Variety, Swing).
Primary Workflow
- Tap New to open the Function Builder and write your first function (or tap Library to
drop in a ready-made one).
- Add more functions the same way โ the sequencer plays them in order, top to bottom, looping back
to the first one after the last.
- Set a repeat count on any function so it fires more than once before the sequencer advances
to the next one.
- Adjust Key, Scale, Root, and Min/Max Octave so the generated notes land where you
want them.
- Press Play. Tune Rate, Gate, Velocity, and Swing live while it runs.
- Use Mute (swipe a function right) to silence a step without deleting it, or swipe left to
delete it outright.
The Sequencer View
- Root (๐ผ) โ the starting note of the sequence. ๐ณ equals ๐ผ at the very start of playback. Drag
the knob or tap it to open a picker of every note in the current key/scale/octave range.
- Min Oct / Max Oct โ the lowest and highest octave the generated notes are allowed to land in.
Drag up/down to adjust, or tap to open the octave menu. FuncBud's full octave range is โ1 to 8.
- Key โ opens the key picker, which changes the scale's key.
- Scale โ opens the scale picker for a quick scale change.
- Function list โ each row shows the function's math notation and a repeat-count stepper. Tap a
row to edit that function in the Function Builder. Tap the stepper's center to type a repeat count
directly instead of using +/โ.
- Mute / Delete โ swipe a function right to mute it (rests instead of playing, shown greyed
out) or swipe it left to delete it. Muted functions can still contribute to โ/โ calculations if
"Enable calculation on the muted functions" is on in Settings.
- Note LED โ shows the name of the note currently playing.
- Rate โ the sequencer's step speed, from 16 bars per step down to 1/32 triplets.
- Gate โ how long each note is held, as a percentage of the step length.
- Gate Variety โ randomizes the gate length a little on every step.
- Velocity โ the MIDI velocity (0โ127) of generated notes.
- Velocity Variety โ randomizes velocity a little on every step.
- Swing โ delays every other step for a swung, rather than straight, feel.
- Patterns row โ numbered buttons for every pattern in the current document, plus a + button
to add a new one (which starts as a copy of the current pattern). Long-press a pattern button for
Copy / Paste / Delete.
- New โ opens the Function Builder to create a function and append it to the current pattern.
- Library โ opens your saved functions and presets (see Library, Favorites, and
Presets).
- Edit โ toggles reorder/delete mode on the function list.
- Clear โ removes every function from the current pattern. Tap once to arm it (the button reads
"Sure?" for two seconds), tap again to confirm.
- Settings โ opens the settings menu (see Settings Reference).
The Function Builder
The Function Builder has three modes, switched at the top of the screen:
Function mode
A calculator-style keyboard for building an arithmetic expression:
| Row |
Keys |
| 1 |
( ) 7 8 9 + |
| 2 |
๐ณ ๐ผ 4 5 6 โ |
| 3 |
ยฒ โ 1 2 3 โ |
| 4 |
โ โ CLR 0 DEL รท |
- ๐ณ inserts the current running value; ๐ผ inserts the root note value.
- ยฒ squares the value to its left; โ takes the square root of the value to its right.
- โn sums the last n entries (up to 64) from the note history; โn multiplies them. Enter
โ or โ and then finish with a number.
- Use ( and ) to group sub-expressions โ an unmatched parenthesis makes the function
invalid, shown as "Invalid Function" until it's fixed.
- The formula renders live as proper math notation as you type.
Condition mode
Builds a branching function: If one function's value compares to another (greater than,
greater than or equal to, less than, or less than or equal to), Then evaluate one function,
Else evaluate a different one. Each of the four inputs (If / Is / Then / Else) opens its own
Function-mode keyboard.
Random mode
Builds a function that returns a random value between a Minimum and a Maximum function,
re-rolled every time the function runs.
Tap Done to save the function back into the pattern (or into the library, if you got here from
one of those flows).
Key, Scale, Root, and Octave Range
The generated ๐ณ values are integers, not notes โ FuncBud maps them onto real notes using the
pattern's key, scale, and min/max octave range, wrapping around if ๐ณ goes past either end of that
range. Changing key or scale re-maps the whole pattern instantly, without touching any of the
functions themselves โ the math stays the same, only the notes it produces change.
Patterns
A document can hold as many patterns as you like. Tap + in the patterns row to add one โ new
patterns start as a copy of whichever one is currently selected, so you can build variations without
starting from scratch. Long-press any pattern number for Copy / Paste / Delete. Switching patterns
mid-playback restarts the sequencer's beat position for the new pattern.
Library, Favorites, and Presets
Tap Library to open three tabs:
- Library โ every built-in function plus any function you've saved from the Function Builder.
Tap one to append it to the current pattern.
- Favorites โ star (โก) any function in the Library to pin it here for quick access.
- Presets โ full pattern documents (every pattern, function, and setting in the current
document) that you've explicitly saved. Tap the + button and name a preset to save the current
document; tap a saved preset to load it. Presets sync across your devices via iCloud and are
shared between the standalone app and every instance of the AUv3 plugin.
Loop Detector
Because the sequence is generated by math rather than authored by hand, some formulas can settle
into a short repeating cycle. Turn on Detect and avoid loops in Settings and FuncBud watches the
note history for a run that repeats itself; when it finds one, it nudges the sequence forward to
break out of it. The detector's window size is set automatically to match the total step count of
the current pattern (every function's repeat count added together) โ there's nothing to configure
beyond the on/off switch.
MIDI Routing
- MIDI In Channel / MIDI Out Channel โ which channel FuncBud listens on and sends generated
notes on, 1โ16.
- Patterns CC# โ a MIDI CC number (0โ127, default 10) that switches patterns remotely: send that
CC on the MIDI In channel with a value of N to jump to pattern N.
- Change the key with MIDI โ while on, an incoming MIDI note on its configured channel changes
the pattern's key to that note.
- Change the root with MIDI โ while on, an incoming MIDI note on its configured channel sets the
root note (๐ผ), if that note is reachable within the current scale and octave range.
- Manual trigger with MIDI โ instead of running on its own clock, the sequencer advances one step
every time it receives a MIDI note on its configured channel:
- Hold the MIDI triggered note โ the generated note sustains for as long as you hold the
triggering key, ignoring the pattern's own Rate and Gate.
- Prefer MIDI trigger's velocity โ use the incoming note's velocity instead of the pattern's
Velocity/Velocity Variety settings.
- BrainBud โ FuncBud can also pick up a key/scale change broadcast by a companion "Bud" app via
MIDI Program Change 69, independent of the manual trigger and transposition settings above.
- Virtual MIDI In / Out โ expose "FuncBud In" and "FuncBud Out" as virtual CoreMIDI ports so
other apps on the device can send to or receive from FuncBud directly, without a physical
interface. Toggle these, and any hardware/network MIDI port, from Settings.
- MIDI Panic โ immediately sends note-off for every MIDI note (standalone app only).
Built-In Sampler and Ableton Link
The standalone app includes an optional built-in sampler so it can make sound on its own:
- Sampler โ turns the built-in instrument on or off. With it off, FuncBud only sends MIDI.
- Sampler Volume โ the built-in instrument's output level.
- Sampler Preset โ which bundled instrument sound to use.
- Ableton Link โ syncs FuncBud's tempo and transport with other Link-enabled apps and devices on
the same network. BPM in Settings sets the tempo when Link isn't syncing it from elsewhere.
The AUv3 plugin has no built-in sampler and produces no sound on its own โ it only generates MIDI, so
it needs to be routed to an instrument in your host app.
FuncBud AUv3 Plugin
Load FuncBud as an AUv3 MIDI plugin ("Cem Olcay: FuncBud", tagged as a MIDI Processor) in a
compatible host to drive any instrument track. The plugin shares the same sequencer, Function
Builder, patterns, and library as the standalone app โ anything you save to the Library or Presets
is available in every instance, in the app and in the plugin alike.
Inside the host, the plugin follows the host's tempo and transport instead of Ableton Link, and
exposes these parameters for host automation:
| Parameter |
What it controls |
| Pattern |
Which pattern is active |
| Rate |
Step speed |
| Key |
The pattern's key |
| Scale |
The pattern's scale |
| Root |
The root note, as a percentage across the pattern's note range |
| Min Octave / Max Octave |
The octave range |
| Gate / Gate Variety |
Note length and its randomization |
| Velocity / Velocity Variety |
Note velocity and its randomization |
| Swing |
Swing amount |
The plugin's current document (patterns, functions, and settings) saves and restores with the host's
project/preset state automatically.
Settings Reference
MIDI Settings โ MIDI In Channel, MIDI Out Channel, Patterns CC#.
Loop Detector โ Detect and avoid loops (on/off).
Functions โ Enable calculation on the muted functions: when on, a muted function still
contributes its ๐ณ result to later โ/โ calculations even though it doesn't play; when off, muted
functions are skipped entirely.
Manual Trigger โ Manual trigger with MIDI, Hold the MIDI triggered note, Prefer MIDI trigger's
velocity, MIDI In Channel.
Transposition โ Change the key with MIDI (+ MIDI In Channel), Change the root with MIDI (+ MIDI
In Channel).
Standalone app only:
- Tempo โ BPM (10โ500).
- Sampler โ Sampler on/off, Sampler Volume, Sampler Preset.
- MIDI In / MIDI Out โ Virtual MIDI In/Out toggles, plus a switch for every physical or network
MIDI port FuncBud has seen.
- Ableton Link โ opens Link's own settings.
- MIDI Panic button.
Support (bottom of the menu) โ Tutorial, Review, Other Apps, Feedback.
Tips and Starting Points
- Start with a single simple function like
๐ณ + 1 and just listen to it loop before adding more โ
it's easier to hear what a second function changes if you know what the first one sounds like
alone.
โ and โ formulas replay identically every time you stop and restart, so it's safe to build a
pattern around them without worrying about the melody drifting between takes.
- Mute a function instead of deleting it while experimenting โ you can bring it back instantly, and
with "Enable calculation on the muted functions" on, it keeps feeding history-dependent formulas
even while silent.
- Use Condition mode to alternate between two different musical ideas based on where ๐ณ currently
is, instead of building two separate patterns.
- Duplicate a pattern with + before making a big change to it โ you always have the original to
go back to.
Troubleshooting
No sound in the standalone app โ make sure the built-in Sampler is on in Settings and its
volume isn't at zero, or route FuncBud's MIDI/virtual output to another synth app instead.
No sound with the AUv3 plugin โ the plugin never produces sound by itself; confirm its MIDI
output is routed to an instrument track in your host.
Plugin doesn't appear in my host โ rescan/rescan plugins in your host app; FuncBud is an AUv3
MIDI Processor, so it must be added on a MIDI or instrument track that accepts AU MIDI effects, not
an audio-effect slot.
No MIDI in or out โ check that MIDI In Channel / MIDI Out Channel in Settings match the
channel your controller or receiving app expects, and that the relevant physical/virtual port is
switched on.
A held note won't stop โ use MIDI Panic in Settings (standalone app) to force every note off.
Manual trigger mode fires the wrong note or won't fire โ confirm the triggering device is
sending on the MIDI In Channel configured under Manual Trigger, not the general MIDI In Channel.
A saved preset or function isn't showing up in the plugin โ Library items and Presets sync via
iCloud and the shared app group; give it a moment after saving, and confirm iCloud Drive is enabled
for the device.
Pattern-select CC isn't switching patterns โ the CC number must match Patterns CC# in
Settings, and be sent on the MIDI In Channel, with a value equal to the pattern number you want
(pattern 1 = value 1, and so on).
Links