Axoloti

Main window

The main window manages the connection with the Axoloti board, and also contains a log of info and error messages.

Patch window

Double click in an empty document ("patch") to create a new object (or press "n"). This brings up the object selector window. In the object selector you can type a name, objects containing the name will appear.

Objects

Objects contain: Operations on objects (not in Live Mode): Operations on objects (in Live Mode):

Connections

Connections between objects can be made by dragging from an inlet to an outlet or from outlet to inlet. Connections can be deleted via the pop-up menu (right-click) on inlets or outlets. Different data types are marked by different colors on the outlets, inlets and wires.

connections between different types

A connection that is illegal is drawn as a thick black dashed wire, and ignored.

Execution order

Every object in the patch is executed once in the signal processing loop, at 3000Hz. Objects are executed in reading order: left to right, top to bottom. A connection from an outlet to an inlet earlier in the execution order, are buffered. So feedback topologies are legal, and never result in stack overflows.

Live connection

Engaging live mode generates compilable code from the patch, compiles the code, uploads the binary and starts the binary on the board. In live mode, only parameters can be changed. Connections, execution order, location, attributes,... are all frozen.
Currently presets, midi mapping, and modulation can be adjusted in live mode, but those changes are only reflected until after engaging live mode again.

Keyboard shortcuts

Subpatching

To maintain clean patches, it is useful to define an object from a patch. To do this: If you want to modify this object, and propagate the changes: Parameters can be propagated to the encapsulating object, right-click on the parameter and select "show on parent". "Show on parent" parameters are drawn in blue.

Polyphonic Subpatching

A polyphonic subpatch creates an array of the subpatch. Every element in this array is called a "voice". For playing music, this automatically allocates notes played simultaneously to different voices. You can obtain the index of the voice with the "voiceindex" object.

Presets

A preset is a set of selected parameters and their new value. To include a parameter to a preset, select the preset index to edit in the toolbar. Then right-click on a parameter and select "include in current preset" in the popup-menu. The parameter will turn yellow. A yellow parameter is not updated live, but indicates that you are adjusting its value in the preset. Changes to presets are only updated after dis- and re-engaging the live checkbox! Presets in a sub-patch can be applied only with the "preset" object. A preset in a "normal" sub-patch only affects the sub-patch. A preset in a polyphonic sub-patch only affects one voice.

Advanced tricks

Working without hardware

Currently patches do not run without hardware attached. But you can test compilation. Choose "generate code" in the patch menu, and then "compile code". Note: by default those menu items are invisible, and show up if you enable ExpertMode in .preferences.xml

Editing code after code generation and before upload

Do not use the "live" checkbox. Choose "generate code" in the patch menu, edit the code in the file "patch/xpatch.cpp", then choose "compile code" in the patch menu, and finally select "upload code". The edits in the code are of course destroyed when the code generator runs again. Note: by default those menu items are invisible, and show up if you enable ExpertMode in .preferences.xml

XML copy paste

Copy/paste uses XML in text format in the clipboard. You can copy an object from a patch, and paste it in a text editor, inspect/edit its internals, copy it from the text-editor and paste it into the patch again.

Axoloti core

Normal operation

By plugging in the usb-connection, the board powers up. The power LED should light up immediately. The other LED should flash three times if everything is OK. Patch binaries are specific to the version of the firmware. If the patch binary is made with a different version of the firmware, Axoloti will crash. In that case, unplug the sdcard before applying power to Axoloti, or hold button S2 during power-up.

Connections

Common problems, errors and solutions

Fatal error: can't create build/obj/chcore_v7m.o: No such file or directory

(or: Fatal error: can't create build/obj/crt0.o: No such file or directory)
Create an empty directory called "obj" in firmware/build. While you're there, also create the directory "lst" in the same place.

fatal error: diskio.h: No such file or directory

unzip chibios/ext/fatfs-0.9-patched.zip to chibios/ext/fatfs

After firmware update the led flashes three times but can't connect

You probably have a "start.bin" file on sdcard that does not match the firmware version. The solution: unplug Axoloti Core and replug it while holding pushbutton S2 until after the LED flashes three times. This prevents "start.bin" from loading (and crashing). Now it should be able to connect again and overwrite "start.bin" with a new one using the "upload to sdcard as startup" menu. Alternatively, you can remove the sdcard and erase the "start.bin" file with an sdcard reader. Or remove the sdcard before powering up the Axoloti Core, then insert the card it again, and use the "Upload to sdcard as startup" command.

Error: "region `SRAM' overflowed by 14760 bytes"

The executable binary code is too big to fit the allocated memory.

Error: "region `CCMSRAM' overflowed by 66780 bytes"

The patch uses too much memory for variables to fit. Delay-lines, echos, RAM tables or sample streaming buffers are the biggest consumers of memory.

The Axoloti program froze up, can I still save my document?

Often yes, after disconnecting the USB cable, the program unfreezes.

The delay/read objects have no units

The knob-setting on the delay/delread objects is the fraction of the actual full delay length of the corresponding delay/write. So if the delay/read is reading from a delayline of 1024 samples, the zero position of the delay/read corresponds with zero samples, and the max position with 1024 samples.

Limitations

Known issues