miRack 3.65 is released

miRack is now available as a VST® (VST3) plugin on macOS, which brings it to DAWs that do not support AU plugins, including Cubase and Bitwig. VST also allows sample accurate MIDI output to other plugins inside a DAW. See mirack.app/vst for details and download. Please consider miRack VST a beta software at the moment and let us know about any issues you encounter.

BUG FIXES

  • Fixed Bogaudio Walk2 module crashes when trying to initialise it via the module menu.
  • Fixed Bidoo dTrOY and bordL modules output a bogus gate signal on patch load.
  • Fixed Squinky Labs Stairway module behaves incorrectly with some input/outptu cable configurations.
  • Fixed cf Stereo module produces invalid output if its Pan CV input is connected.
  • Fixed patches created from custom templates don’t have autogenerated names.
  • [AU/VST] Fixed a crash when loading a preset (in the host) while MIDI or parameter mapping panel is shown.
  • [Mac] Fixed garbage audio output may be produced when loading a patch without an audio output module.
  • [Mac] Fixed Fit N Rows function calculates incorrect zoom level.
  • [Mac] Fixed last document isn’t reloaded on app launch in some cases.

VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.

miRack 3.60 is released

This update adds search function to the module browser. Pull down the module categories list on the left to reveal a search field. On macOS, you can also press Cmd+F as usual.

Also, we added two more cable colors. They will not be used automatically but can be selected from the cable color panel.

BUG FIXES

  • [AUv3] Fixed synchronization issues when buffer size is set to 2048 in the host.
  • Fixed JW NoteSeq module not initialized properly when added to a patch.

miRack 3.59 is out

This update adds the ability to choose a color to be used for new cables and to change color of existing ones using a new button on the toolbar. You can select a color while dragging a cable or touching a port, in which case it will be applied to the currently active cable only (the color used for new cables will not change).

BUG FIXES

  • Fixed Meander module doesn’t correctly restore its Harmony Steps parameter.
  • Fixed trowaSoft modules have wrong sizes.

miRack 3.56 is out

MODULES

New module added – Meander by PurrSoftware. Meander is a self-contained algorithmic composer, it has quite a few rules for what makes western music sound good and applies those rules to sequence other sound generation modules. The module looks complex but it is easy to use – just connect V/Oct and Gate outputs to VCO/ADSR modules for harmony, melody and bass parts (or some of them) to get started. The next step is to adjust the module’s many parameters, all of which can also be controlled with CVs. See Meander demo patch for a basic setup.

BUG FIXES

  • Fixed a bug where a quick touch and drag action on a port could result in a wrong cable being dragged.
  • [macOS] Fixes and improvements to the UI, especially when running on macOS 11.3 and later.
  • [macOS] Fixed miRack not using the whole window size in Legacy AU mode on macOS 11.3 and later.

If you are using miRack Legacy AU component on macOS, it is also recommended to update it to the latest version which can be downloaded from mirack.app/au.

miRack 3.55 is out

This version mainly updates many of the included module packs to latest available versions and adds a bunch of new modules, including a calibration module for Expert Sleepers (and similar) audio interfaces and a module to send/receive CVs via OSC protocol.

Other changes:

  • New Recently Added category in module browser showing modules added in the last few app updates.
  • When starting a two finger pan and zoom gesture, it’s now much less likely to accidentally adjust module controls instead.
  • The number of AU parameters that can be exposed to a DAW is increased to 32.
  • Other minor UI and rendering tweaks.

This version is also built using the latest iOS/macOS SDK versions. If you experience any issues because of this or because of the module updates, or if you have any other suggestions, please contact us or visit the discussion board.

Sorry this update took so long to be released, we will now return to our normal practice of releasing frequent smaller updates with fixes and improvements from our (pretty long) to-do list.

Status Update

There hasn’t been miRack app updates in a while now, and I guess some explanation is needed. Partly that was due to personal reasons, partly because most major features people were asking for had been implemented and there was no rush to do another release. I used this time to do a biggish API-related refactoring in preparation for releasing miRack SDK and supporting commercial modules. I also didn’t want to update included plugins (especially big ones) until the API is finalised.

Unfortunately the internal changes took longer than expected and didn’t go completely as I hoped (this has little end user impact so not to worry). The good news is, this is now finished, and I also updated most of the plugins to latest available version.

The should be a new version in the next two or so weeks which will mainly include these updated modules and some fixes. Then hopefully updates will come much more often – I have a long todo list by now. At the same time, I’ll make the SDK and documentation available, and continue to work on support for commercial modules.

miRack 3.52 is out

MODULES

  • Bogaudio modules have been updated to the latest available version. There’s a bunch of very interesting new modules, including VCFs and equalizers.
  • MI modules got some improvements and fixes to their UI.
  • Fixed a crash when switching range parameter of Audible Instruments Tidal Modulator 2.
  • Fixed Audible Instruments Modal Synthesizer STRENGTH input which was previously inverted. For compatibility, the old behaviour can be enabled in the module menu and is enabled automatically for existing patches.

APP FEATURES

  • [macOS] Fixed a problem with automation disabling when using miRack AU plugin in Ableton Live. This requires to update the legacy miRack AU component, visit its page to download.
  • New Reset command at the bottom of the Patch menu allows to disconnect all cables or initialize all modules in a patch at once.
  • Added 32-channel audio output and input modules. These bigger modules are not shown in the module browser, use module menu to set the number of channels to 32.
  • Fixed occasional module movement issues when zoomed.
  • [macOS] ⌘+/⌘-/⌘0 shortcuts now work in AU plugin.
  • [macOS] Fixed initial parameter values not sent to host when adding a new instance of miRack Legacy AU with a preset.

miRack AU plugin for Ableton Live, FL Studio and other macOS DAWs

miRack for macOS that’s available from the Mac App Store already includes an AUv3 plugin. Unfortunately, not many DAWs support loading v3 audio units yet (Logic Pro, Garage Band, Reaper, LUNA and some others do).

Today I’m happy to annouce the release of miRack Legacy AU – a version that’s compatible with all macOS DAWs able to load audio units. This includes Ableton Live, FL Studio, MOTU Digital Performer, PreSonus Studio One and others.

miRack Legacy AU can be used as an instrument or an effect, supports up to 16 input/output channels and all the features of miRack and AUv3 plugin, including presets, MIDI, parameter recording and automation, and excellent performance allowing you to use many instances of miRack in your project.

Note: miRack application and AU plugins require macOS 10.15 (Catalina).

Installation Instructions

Download and install miRack app and Legacy AU package using the two links below.

That’s all, you should see miRack Legacy and miRack FX Legacy audio units (and their 16-channel variants) in your favourite DAW. As this is the first release, if anything is wrong, please let me know.

miRack 3.50 is out with multi-channel audio, MIDI out and new modules

miRack 3.50 adds two probably most requested features – MIDI output and multi-channel audio IO – as well as new modules and other improvements.

Multi-channel audio

miRack now supports up to 16 input/output channels in standalone, AUv3 instrument and AUv3 effect modes, both on iOS and macOS. There are new 8- and 16-channel audio IO modules, and number of channels of audio modules in existing patches can be changed from their module menus.

In particular, Expert Sleepers ES-8/ES-9 audio interfaces and expanders are now fully supported, and allow to integrate miRack and hardware Eurorack equipment. Expert Sleepers encoders for use with ES-5, ES-40, ESX-8GT and ESX-8CV modules are also available.

MIDI output

There are 3 new MIDI output modules, and new versions of MIDI CC and Trigger input modules.

MIDI out works via CoreMIDI, Audiobus and AUv3. For AUv3, a dedicated MIDI Processor AU type is also available.

Modules

Added bId°° (Bidoo) module pack. It’s a great collection of modules with weird names by Sébastien Bouffier, including several powerful sequencers – perfect for use with the new MIDI out functionality.

Valley module pack updated to the latest version. New module Feline – stereo version of a filter section from Interzone module.

Added an option to Host Sync module menu to change clock output rate (instead of a fixed BEAT output). This can also be used for connection to Clocked module for more reliable timing. Set CLOCK output to Beat / 4 or Beat / 8, connect to BPM input of Clocked, and set Clocked mode to P4 or P8 accordingly.

Fixed an issue with Frozen Wasteland Quad Algorithmic Rhythm module, it’s now working properly.

For MIDI keyboards that do not support per-note aftertouch but support channel pressure, it will be used for AFT output of MIDI module.

Other

Added SHIFT toolbar button to access secondary function of certain module controls. It’s used in number of new Bidoo modules, in Squinky Labs mixer to solo multiple channels, and other places in the future.

Improved rendering of lights and some module controls.

Added keyboard shortcuts to macOS version to zoom when no trackpad is present.

Details and comparison of miRack and VCV Rack multithreading implementation and performance

I implemented multitheading for miRack audio engine back in 2018 when it was a project targeting single-board computers because with slower CPUs it’s essentially a requirement to be able to run any decently-sized patches. The implementation (available here and is used in miRack app with minor modifications) is based on idea of having arrays for module input and output values, and a lock-free concurrent work queue implementation by Cameron Desrochers.

For each rendering cycle, say 512 samples (steps), all rack modules are pushed into to a work queue, also with start and end steps to process (so initially that is 1 to 512), then worker threads are woken up. The worker threads dequeue modules from the work queue and check that values for the step being processed are present for all module inputs (for disconnected inputs this is always true). If all values are available, the module is processed and output values are saved straight in input arrays of modules connected to each output for the next step number. The process continues until the end step is reached or until any of the input values are not available, in which case the module is pushed back into the work queue (updating the start step if needed) and another module is pulled from the work queue. Once there is no more modules in the work queue, the workers pause, and the rendering cycle completes. This implementation ensures that workers don’t wait unless they have to.

Until recently I never looked at the multithreading implementation that later appeared in VCV Rack (available here), but wanted to run some benchmarks at some point.

During normal operation, VCV Rack implementation uses spinlocks only. For each step in a rendering cycle, workers process only that single step for each module. Once there are no more modules for a worker to pick up, it will spinwait until all workers have finished, then values are transferred from outputs to connected inputs, and the workers are woken up to process the next single step. This implementation causes the workers to wait a lot instead of possibly processing next steps for some modules.

Now to the benchmark. I used the current miRack code and the latest VCV Rack code. All graphics rendering was disabled, as well as audio output. For VCV Rack, updating port lights was also disabled – it involves a lot of computations that substantially affect the results while not being related to audio processing.

The audio engines were told to process 1024 samples (steps) as fast as they can, and it was repeated 1000 times for a single thread then for 2, 3, and 4 worker threads. The tests were performed on a CPU with 4 physical cores. The following patches (by VCV Rack Ideas were used):

Results

ThreadsmiRack TimemiRack %VCV Rack TimeVCV Rack %Ideal %
14242ms100.00%6313ms100.00%100.00%
22236ms52.71%5179ms82.04%50.00%
31620ms38.19%4604ms72.93%33.33%
41341ms31.61%4312ms68.30%25.00%
1st Patch Results
ThreadsmiRack TimemiRack %VCV Rack TimeVCV Rack %Ideal %
14904ms100.00%6203ms100.00%100.00%
23054ms62.28%4944ms79.70%50.00%
32575ms52.51%4578ms73.80%33.33%
42357ms48.06%4455ms71.82%25.00%
2nd Patch Results

“%” column shows time difference to the single-threaded case, and “Ideal %” shows the best theoretically achievable improvement of N times for N threads.

Also I should note that initially it was about comparing multithreaded speed increase, not absolute values (at least because miRack and VCV Rack use different versions of some of the patch modules), but absolute values turned out to be quite interesting as well. As I mentioned above, port lights update code adds about another second to VCV Rack results.