by Johannes Taelman
Axoloti is a platform for sketching music-DSP algorithms running on standalone hardware.
documentation: in the folder doc/
Sketching embedded digital audio
Home Page: http://www.axoloti.com
License: GNU General Public License v3.0
by Johannes Taelman
Axoloti is a platform for sketching music-DSP algorithms running on standalone hardware.
documentation: in the folder doc/
usually if you edit a patch you are prompted to save, however if you alter a dials value (which will be its default), you are not prompted to save before close
In Linux, when going into live mode, the Axoloti main window jumps on top.
This does not happen when running as "sudo ./Axoloti.sh" (which was the only way before adapting 49-axoloti.rules)
i) don't show about box on startup
ii) open recent patches... (list of 10 last opened patches)
iii) connected status in status bar? (hmm need to consider multiple boards?)
iv) connected dialog, allow window to be closed... like a 'log window'?
Warn the user when opening a patch containing inlet/outlet objects, not to expect sound...
Even when nothing has been changed to the patch, Axoloti asks "Do you want to save changes...".
(linux)
currently unable to flash using SD, (fallback DFU seems to work)
Start uploading file /Users/kaos/Documents/axoloti/firmware/build/axoloti.bin to sdcard : firmware.bin
uploading: /Users/kaos/Documents/axoloti/firmware/build/axoloti.bin
uploading : 6%
uploading : 12%
uploading : 18%
uploading : 24%
uploading : 30%
uploading : 36%
uploading : 43%
uploading : 49%
uploading : 55%
uploading : 61%
uploading : 67%
uploading : 73%
uploading : 80%
uploading : 86%
uploading : 92%
uploading : 98%
uploading : 100%
Done uploading file
Start uploading patch
bin path: /Users/kaos/Documents/axoloti/firmware/flasher/build/flasher.bin
FileNotFoundException
table save crashes when axoloti triggered:
Axoloti says: exception: soft watchdog
Axoloti says: pc=0x80005A4�
Axoloti says: psr=0x61000000�
Axoloti says: lr=0x80004BB�
Axoloti says: r12=0x20001788�
Axoloti says: cfsr=0x0�
test patch below (note, not sure if it will work by copy/paste, here it seems to not draw the connections at the moment...):
<frac32.s.map name="value" value="-4.0"/>
<bool32.mom name="b" value="0"/>
Noticed that the patch was written as SendMidi1 and was causing issues.
(Can update this myself once i figure out howto with github)
MIDI input is not correctly multi-threaded. This can show up when receiving midi data from multiple sources simultaneously : USB Host port, DIN port, injected by editor.
The dialog "Axoloti asks: Do you want to save changes to..." can now only be closed by clicking.
It would be nice if the keystrokes "tab tab enter" would do the same as clicking on "Don't save" and "tab enter" == clicking on "Save".
looks like if you rename an object instance it must conform to C rules.
if you don't conform, it will disconnect all your connects next time you load the patch.
(a nasty here, is using spaces, as will be common by users)
probably unreasonable to expect musicians to know/follow this :)
possible solutions:
i) don't allow invalid characters
ii) substitute invalid characters
I think users will accept that special characters cannot be used, so we can use (i) for this.
(we need to use an input mask to stop invalid character entries)
I think 'spaces' will probably be wanted, so perhaps we substitute these with underscore (_),
(and underscore/space are the same), then we just need to do the substitution in the display.
The toolbar area which says "preset recall edit i 1 2 3 4 5 6 7 8" top right hand side of patcher environment ... the "button" for the both number eights isn't fully rendered on the right hand half of the button. The button still "clicks" but you can't read it.
Linux Mint 17.1, java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
1680x1050, dual monitors using Nvidia 331.113
see screenshot (hopefully attached):
When MIDI-mapped 63.5 is the practical maximum. In future, a midi-mapped parameter should be constrained to values that can be transmitted too over midi - so that sequencer-recorder MIDI reproduces the same result. Non midi mapped parameters should be able to reach 63.999...
A trick the Nord Modular did is substituting midi value 127 with 127.99... to reach a more complete range, far closer to "preserving unity" when multiplying with a full scale midi value. It is a dirty trick to remap the midi range of 0-127 to 0.0...64.0 bipolar or -64..64 for bipolar. The alternative is scaling midi with 128.0/127.0 but that deviates from 1 unit/semitone scaling.
may be just an opinion, but:
imo it would be more intuitive to have the most recently opened patch on top, and the oldest one at the bottom of that list.
crash when opening a patch with circular references to subpatches
Clicking once in a while when changing the pulsewidth via a sine wave LFO
When you set a default value in the midi/in/cc object,
it is not sent to its outlet when going into live mode.
(or is this by design?)
make a floating window that can be dragged out the way, and resized
Study feasibility - together with updating the object layout...
For instance to create a "next" button in the tutorial series!
hyperlink object could also get interesting for web URLs
Don't know what an oscillator is? Click here to read wikipedia on oscillators...
linux (ubuntu), git pull at 21:52 UTC+01:00 today:
when making a copy of a block of connected objects,
the objects in the newly created copy aren't connected.
(some connections are there, others are not)
after install latest JDK, I did not have ant installed.
solution for me was
"brew update"
"brew install ant"
that would require one to have http://brew.sh/ installed of course
after that the GUI built fine
When opening e.g. a demo patch for the first time, the window size is quite small.
You have to resize it to see the whole patch, then save it, to get it to open the right size next time.
Perhaps a RAM monitor aside from the CPU monitor so one can see how much RAM on the MCU is left
I want this feature:
to see how much i use real time because of huge reverb lines (for massive leads) i'm making :)
to test this:
open example>demos>keyboard>poly arp demo>arpeggiator
now try to substitute the stringvoice object (I had made an adapted version, which is what I wanted to replace it with), or just with stringvoice itself...
(click the triangle to the left of the object name 'stringvoice' and select 'substitute')
this results in the stringvoice object (or its replacement) having a very long name, including the whole path, and the object is stretched out to over 5 times its original width.
this is on Ubuntu 14.04.2 LTS (ubuntustudio)
feature request: ability to map more controls (example: slew rate) directly to an analog input to set your basic things.
i think it will be usefull for the newcomers in axoloti.
like chorus2, flanger, compressor1
preloading all patches in the search path would be too heavy, only adding the object id in the object selector. May need a new derivative class of AxoObjectAbstract.
Replacing the serial port selection dialog...
some race condition,
BDU1.oqueue does not flush
Opened the first mini synth I made, and it doesn't work anymore. I tried recreating it step by step and found out the spat/pan m object is causing the error.
This is the console output:
Generate code complete
Start compiling patch
RM
rm -f xpatch.o xpatch.elf xpatch.bin xpatch.d xpatch.map xpatch.lst
APP
arm-none-eabi-g++ -nostdlib -fno-exceptions -fno-rtti -mcpu=cortex-m4 -O3 -fomit-frame-pointer -falign-functions=16 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -Wunused-parameter -DCORTEX_USE_FPU=TRUE -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB -std=c++11 -DARM_MATH_CM4 -D__FPU_PRESENT -I../CMSIS/Include -I../chibios/os/ports/common/ARMCMx/CMSIS/include -I../chibios/os/ports/common/ARMCMx -I../chibios/os/ports/GCC/ARMCMx -I../chibios/os/ports/GCC/ARMCMx/STM32F4xx -I../chibios/os/kernel/include -I../chibios/os/hal/include -I../chibios/os/hal/platforms/STM32F4xx -I../chibios/os/hal/platforms/STM32 -I../chibios/os/hal/platforms/STM32/GPIOv2 -I../chibios/os/hal/platforms/STM32/I2Cv1 -I../chibios/os/hal/platforms/STM32/OTGv1 -I../chibios/os/hal/platforms/STM32/RTCv2 -I../chibios/os/hal/platforms/STM32/SPIv1 -I../chibios/os/hal/platforms/STM32/TIMv1 -I../chibios/os/hal/platforms/STM32/USARTv1 -I../chibios/boards/ST_STM32F4_DISCOVERY -I../chibios/ext/fatfs/src -I../firmware -MD -MP -c xpatch.cpp -o xpatch.o
xpatch.cpp: In member function 'void rootc::instancepanm__1::dsp(const int32_t*, int32_t, int32_t (&)[16], int32_t (&)[16])':
xpatch.cpp:222:47: error: 'c' was not declared in this scope
outlet_left[buffer_index] = ___SMMUL((1<<29)-(c<<2),inlet_i1[buffer_index])<<2;outlet_right[buffer_index] = ___SMMUL((1<<29)+(inlet_c<<2),inlet_i1[buffer_index])<<2;
^
make: *** [all] Error 1
shell task failed, exit value: 2
Done compiling patch
so, when i add more than 7 analog inputs (10k mono lin pots, all have different mod sources), and i went live on my board, the board hangs, and does not respond until i re-power it, the CPU usage is about 85% (with 7 analog inputs, running stable) so that's not a problem. update interval of each mod source is set to 103ms.
any ideas on this?
need to setup injected channel conversion...
suggestion: spring loaded pitch-bend knob in the Keyboard window, so it always goes back to 0 when letting go, like most physical pitch-bend knobs?
I propose that a poly multichannel patch can be made to work for a range of channels
e.g. 2-15, such that a channel can be used for global messages
a common example of this is note events being passed to sub patches whilst something like CC 2 (Breath) is used on the top-level patch e.g. to control reverb amount.
Patch.java:: GenerateAxoObjPolyChannel(), would need to be changed to not send the messages to voices when outside the accepted range.
currently live checkbox only 'ticks' when its gone live, but this is confusing to user... also we already know if we are in live/locked mode as background colour change is a better indicator
The object generator code may check for presence of an equally named .axh patch, and
if not present, it could check for presence of an .axh patch named to the category. That patch could be linked as help in the .axo.
Or would it be better to do it at object load-time rather than at object generation time?
Currently, there is no close menu item to close a patch.
Would be handy to be able to close a patch when it's not Live. Especially with a shortcut (Cmd+W on OX X) since trackpads are horrible to aim for that tiny button on the window.
The menu item should be disabled when the patch is Live.
if you open a subpath via the open menu, edit it, and then save it,
a few things become a bit confusing for the user
a) in the new object dialog, a search will reveal multiple copies
b) the new version will not be used in other patches (when made live) unless you explicitly delete and re-add them. (and you need to select full patch, not just the cached copy, see (a)
c) ive seen an example, where regardless of which 'version' i selected of the subpatch, the old behaviour was kept
(im assuming all the above, are due to cached versions of a subpatch being kept in memory, so I suspect all related issues)
workaround: note if you edit via the 'object definition' in the main patch, usually this works.
I often have a few patches/sub patches open, so cannot have them all fullscreen, so i resize them... would be nice if when reopened, they restore to an appropriate size.
if you attempt to connect an outlet from object B to an inlet of object C , were inlet of object C is already connected. it will not connect correctly
expected behaviour: delete the existing connection to object C inlet, and connect object B.
(this is how it works for Reaktor, and others)
consider the following:
A -> C
you wish to connect to
A->B->C
so you create B, and then connect A to B, then B to C... we don't want to have to first disconnect A-C its should be implicit. (makes refactoring patches much quicker)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.