Post by nic on Jun 22, 2018 5:57:36 GMT
I'm pleased to announce that an update to MidiFire (both iOS and macOS) has been released today. This release offers some new features and many (many!) bugfixes:
1. New Modules
- Pressure Curve; this lets you draw visual curves that can be applied to note velocity, channel pressure, aftertouch or controller value.
- Note/Velocity Split; this lets you split the incoming events over two different channels based on a split point. You can split on a note number or on note velocity.
- Comment Block; this is a non-functional module that allows you to document your work. There is a small section on the block itself that you can type in and an edit box on the module's settings to write more detail.
Here's a screenshot showing off the new modules

2. Holdover Mode
Holdover Mode (can be turned on/off in Setup, default is on) is my solution to stuck notes when changes to the canvas are made or a new scene is loaded. Here is how it works:
Each external input port on the canvas maintains its own copy of the scene. When one or more notes are being held down (or the sustain pedal is being held) then that scene for that port 'freezes' until all held notes (and pedal) are released. At that point the scene for that port is 'thawed' and that port's copy of the current canvas is then updated. Essentially changes made to the canvas do not affect events coming from ports with held notes until the notes are released.
Since each port has its own separate copy of the 'master' scene you can run multiple streams of events via different ports and each freeze/thaw will operate independently for that port. This is especially useful if you are using multiple controllers or running multiple streams of events from discrete ports.
Here's an example. Say you have two external keyboards, A and B and you hold down some notes on A and load a new scene. Events from B will use the new scene but any new notes played on A will continue to use the scene that was active when the first note was held. Once all notes on A are released then it will start using the new scene too.
Another more detailed example, controllers A and B and scenes 1, 2 and 3:
action result
------------------------------------------------------------------------
load scene 1, hold down notes on A A + B use scene 1
load scene 2 A uses scene 1, B uses scene 2
press sustain pedal on B A uses scene 1, B uses scene 2
load scene 3 A uses scene 1, B uses scene 2
release sustain pedal on B A uses scene 1, B uses scene 3
release notes on A A + B use scene 3
It's not just scenes, but any change to the canvas' connections or (most) module settings are shadowed per input port.
3. Other enhancements
Stream Byter now has conditional loops (+L flag on IF statement), preserved variables (variable values persisted over scene loads/app invocations) and a couple of new 'special' variables and operators. See the Stream Byter section in the manual for these.
Channel Strip now has the ability to quickly remap notes.
Setup now allows you specify whether MidiFire has 1, 2, 4, 8 and now 16 virtual ports.
I can't count the number of crashes, bugs and other nasties that got found and obliterated along the way. I've tried to make this new release as stable as possible:
4. and finally we have to say good-bye to
For the next version (V2.0 coming soon) Apple will require me to submit updates using the latest version of Xcode. Unfortunately, this also means that I have to drop support for iOS 6 and 7 so this is the last release for these two iOS versions.
Regards, Nic.
1. New Modules
- Pressure Curve; this lets you draw visual curves that can be applied to note velocity, channel pressure, aftertouch or controller value.
- Note/Velocity Split; this lets you split the incoming events over two different channels based on a split point. You can split on a note number or on note velocity.
- Comment Block; this is a non-functional module that allows you to document your work. There is a small section on the block itself that you can type in and an edit box on the module's settings to write more detail.
Here's a screenshot showing off the new modules

2. Holdover Mode
Holdover Mode (can be turned on/off in Setup, default is on) is my solution to stuck notes when changes to the canvas are made or a new scene is loaded. Here is how it works:
Each external input port on the canvas maintains its own copy of the scene. When one or more notes are being held down (or the sustain pedal is being held) then that scene for that port 'freezes' until all held notes (and pedal) are released. At that point the scene for that port is 'thawed' and that port's copy of the current canvas is then updated. Essentially changes made to the canvas do not affect events coming from ports with held notes until the notes are released.
Since each port has its own separate copy of the 'master' scene you can run multiple streams of events via different ports and each freeze/thaw will operate independently for that port. This is especially useful if you are using multiple controllers or running multiple streams of events from discrete ports.
Here's an example. Say you have two external keyboards, A and B and you hold down some notes on A and load a new scene. Events from B will use the new scene but any new notes played on A will continue to use the scene that was active when the first note was held. Once all notes on A are released then it will start using the new scene too.
Another more detailed example, controllers A and B and scenes 1, 2 and 3:
action result
------------------------------------------------------------------------
load scene 1, hold down notes on A A + B use scene 1
load scene 2 A uses scene 1, B uses scene 2
press sustain pedal on B A uses scene 1, B uses scene 2
load scene 3 A uses scene 1, B uses scene 2
release sustain pedal on B A uses scene 1, B uses scene 3
release notes on A A + B use scene 3
It's not just scenes, but any change to the canvas' connections or (most) module settings are shadowed per input port.
3. Other enhancements
Stream Byter now has conditional loops (+L flag on IF statement), preserved variables (variable values persisted over scene loads/app invocations) and a couple of new 'special' variables and operators. See the Stream Byter section in the manual for these.
Channel Strip now has the ability to quickly remap notes.
Setup now allows you specify whether MidiFire has 1, 2, 4, 8 and now 16 virtual ports.
I can't count the number of crashes, bugs and other nasties that got found and obliterated along the way. I've tried to make this new release as stable as possible:
4. and finally we have to say good-bye to
For the next version (V2.0 coming soon) Apple will require me to submit updates using the latest version of Xcode. Unfortunately, this also means that I have to drop support for iOS 6 and 7 so this is the last release for these two iOS versions.
Regards, Nic.