randy's Recent Posts

I'm working on software currently alongside plugin work. The Soundplane touch detector has to be rewritten in order to work on our embedded boards.

I searched the forum and found a potential solution: try turning on "Force MPE" in Bitwig.

I know people are using Aalto in MPE mode with Linnstrument. I'm not sure if this works in Bitwig, but it should. It should work in demo mode also. Did you change the protocol to MIDI MPE in the settings (gear) menu? Aside from that, there is nothing else to do in Aalto.

Possibly, check your DAW channel settings in Bitwig.

I'm finishing up this bugfix release currently. Please stay tuned!

You bring up an area where Virta can really be improved. I appreciate the feedback. With the current system you "can do anything" by choosing or making the right Scala files... but it's not easy to just pick, say, G dorian as you say.

I'm currently working on the code that reads Scala files to fix some bugs and make it more flexible. Then building on that foundation I can add some built-in mappings that will make it easier to select a given scale or mode without making a new file.

the bend dial in the KEY module controls how much MIDI pitch bend will affect the pitch. Then, you can see the changing pitch signal in any dials you have it routed to, probably the complex oscillator pitch, for example.

Thanks for the nice feedback!

Thanks for the add'l info. I still have it on my list to check out Virta at 96k more deeply.

Hi Richard, Aalto will play at A=440Hz by default. There's no master tune setting either (for now), so it's safe to say the issue is not within Aalto. I'd look to your DAW settings or MIDI controller or... ?

No technical reasons, I just have a long list of things to do. I'll probably add this to the Aalto 2 release and update the other plugins thereafter.

Dear music makers,

In appreciation for your support, we are having a summer sale this year. Use the code MRJACKPOTS on any of the product pages to get 25% off any Madrona Labs plugin. From now through August 20.

photo: @photoboothkt

Much more likely to happen in Virta! I want Aalto's reverb to be a super-simple, one-knob device in the spirit of the Arp 2600.

Whoops, I meant to expire it tomorrow—fixed!

from Pancycle Music:
http://www.pancyclemusic.com/aalto-my-latest-software-synth-addiction/

{
"delay_input":0.670000,
"demo":0,
"licensor":"",
"seq_trig":0,
"key_voices":2,
"key_mod":1,
"key_bend":7,
"key_unison":1,
"key_glide":0.010000,
"seq_wave":0,
"seq_local":1,
"seq_host":0,
"seq_loop":1,
"seq_rate":0.444000,
"seq_ratio":1,
"seq_rate_p":0,
"seq_steps":16,
"seq_steps_p":0,
"seq_offset":0,
"seq_offset_p":0,
"seq_range":12,
"seq_quantize":0,
"seq_glide":0.770000,
"seq_pw":50,
"seq_value_delay":3.500000,
"seq_pulse_delay":0,
"seq_value0":0.500000,
"seq_value1":0.308658,
"seq_value2":0.146447,
"seq_value3":0.038060,
"seq_value4":4.996004e-16,
"seq_value5":0.038060,
"seq_value6":0.146447,
"seq_value7":0.308658,
"seq_value8":0.500000,
"seq_value9":0.691342,
"seq_value10":0.853553,
"seq_value11":0.961940,
"seq_value12":1,
"seq_value13":0.961940,
"seq_value14":0.853553,
"seq_value15":0.691342,
"seq_pulse0":0,
"seq_pulse1":0,
"seq_pulse2":0,
"seq_pulse3":0,
"seq_pulse4":0,
"seq_pulse5":0,
"seq_pulse6":0,
"seq_pulse7":0,
"seq_pulse8":0,
"seq_pulse9":0,
"seq_pulse10":0,
"seq_pulse11":0,
"seq_pulse12":0,
"seq_pulse13":0,
"seq_pulse14":0,
"seq_pulse15":0,
"lfo_freq":0.420000,
"lfo_noise":0,
"lfo_level":0.710000,
"lfo_level_p":0,
"lfo_freq_p":-2.400000,
"env1_attack":0.180000,
"env1_decay":1,
"env1_sustain":0.170000,
"env1_release":1.260000,
"env1_level":1,
"env1_xvel":1,
"env1_trig_select":1,
"env1_attack_p":-1,
"env1_decay_p":0,
"env1_release_p":0,
"env2_repeat":0.429688,
"env2_delay":0,
"env2_attack":0.190000,
"env2_sustain":0,
"env2_release":0.290000,
"env2_xvel":0,
"env2_trig_select":1,
"env2_xenv1":1,
"env2_delay_p":0,
"env2_attack_p":0,
"env2_repeat_p":1,
"osc_noise":0,
"osc_ratio":2,
"osc_offset":0.000003,
"osc_index":3.910000,
"osc_timbre":0,
"osc_pitch":110,
"osc_waveshape":0,
"osc_noise_p":0,
"osc_ratio_p":0,
"osc_offset_p":16,
"osc_index_p":-5,
"osc_timbre_p":0,
"osc_pitch_exp_p":1,
"osc_pitch_lin_p":4,
"osc_waveshape_p":0,
"osc_carrier_out":0.460000,
"osc_mod_out":0.460000,
"gate_level":0,
"gate_mode":1,
"gate_decay":1,
"gate_level_p":1,
"delay_peakfreq":1000,
"delay_drive":0.620000,
"delay_peakres":0,
"delay_feedback":0.340000,
"delay_freq":13.750000,
"delay_input_p":0.500000,
"delay_peakfreq_p":1,
"delay_drive_p":0,
"delay_peakres_p":0,
"delay_feedback_p":0,
"delay_freq_p":2.360000,
"delay_output_wet":1.520000,
"delay_output_dry":1,
"filter_cutoff":366,
"filter_q":0,
"filter_mix":-0.372491,
"filter_cutoff_p":-3.320000,
"filter_q_p":0,
"filter_mix_p":0,
"output_input_gain":1,
"output_reverb":0.200000,
"output_pan":0,
"output_reverb_p":0.200000,
"output_pan_p":0,
"patcher_matrix":{
"type":"signal",
"width":14,
"height":31,
"depth":1,
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
},
"key_scale":"12-equal",
"preset":"Pancycle/Keys/Saint Patrice",
"maker_name":"Madrona Labs",
"app_name":"Aalto",
"app_version":67586
}

I just looked that up, interesting module. The closest thing I have made to a spectral freeze function is actually in Virta. Although it doesn't have a freeze feature now, I could add one pretty easily.

Kaivo would be a bit harder because there is nothing like a spectral processor in it. The resonators and body are all physics-based and it's hard to imagine how to freeze them in a useful way.

Thanks for the feedback. This spring I sent out a Kaivo update that added about a 25% performance improvement. There will be more to come.

These ROLI docs are great, I had not seen them. Thanks for sharing.

Thanks for the info.

No worries!

Thanks for the suggestion. Aalto 2 won't be very different from the current version. The patches will be compatible and I'll figure out how to add any new features without shaking things up too much. Don's designs will remain a constant source of inspiration, so you might see some things you recognize as "Easel-like" in upcoming plugins.

Yes, there will be a paid upgrade to version 2.

It is limited to 1.0 currently. I believe I was not doing this before. It seemed to make sense to limit it to the [0. - 1.] range. But if this is not enough practically for some desirable patches--- are you saying you have the attenuverter turned to maximum modulation?---then I could take away the limiting or make it an option.

according to all this...is Aalto (1) now abandonware? ;)

Aalto 2 would be the first major version update of the same software instrument. This is the opposite of abandoning it. Don't worry.

Reading with great interest. There's definitely a place for well-designed, single-purpose instruments, as well as modulars. Aalto 2 would really be just a major version, and not in any way a new instrument. I'll try not to mess it up. :wink:

Thanks to Thomas Helzle for this very detailed blog post on how to use Virta in Bitwig Studio. It's not difficult to begin with, and this explanation with nice illustrations and clear directions makes it that much simpler.

After much wailing and gnashing of teeth, all the Madrona Labs plugins have been updated. Almost immediately after announcing all this work I unexpectedly had to go into panic mode finding a new location for the Labs. Now the new digs are found, the move is complete and we are in great shape, but it sure slowed things down a lot. So if you have been waiting on one of these fixes this Fall, let me thank you sincerely for your patience and support.

I'm putting up these beta installers for both Mac and Windows now, for any adventurers who want to try them. They incorporate the new licensing system, which is more like what you're probably used to from other plugin makers: the demo and release are the same exact plugin, and you turn the one into the other by entering a key. I will update the website to send out keys early next week. So until then, these betas are demo-mode only, with the lack of saving and the whooshing noise we al know and love.

The biggest improvements to all the plugins are :

  • new registration system
  • new software PLL host sync
  • UTF-8 compatibility for patch and registration names
  • fixed an issue where the protocol type (MIDI, MPE, OSC) was not loading if the plugin editor did not exist
  • fixed an issue where folder or patch names starting in numbers might not appear
  • code signed Mac OS installer for Gatekeeper compatibility
  • code signed Windows installer for security and good feels
  • fixed a drawing problem with multiple plugin windows
  • fixed a problem where the sequencer would restart when its parameters were changed
  • fixed a problem where sequencer voices would stop after a program change

Virta has some additional fixes.

Please give these puppies a try, if you have time, and if you were having issues before let me know if things improve.

Windows installers:
http://madronalabs.com/media/aalto/AaltoInstaller1.8.0b4.exe.zip
http://madronalabs.com/media/kaivo/KaivoInstaller1.3.0b4.exe.zip
http://madronalabs.com/media/virta/VirtaInstaller1.3.0b4.exe.zip

Mac installers:
http://madronalabs.com/media/aalto/Aalto1.8.0b4.pkg
http://madronalabs.com/media/kaivo/Kaivo1.3.0b4.pkg
http://madronalabs.com/media/virta/Virta1.3.0b4.pkg

For the last few months I've been working on a brand new way of extracting touches from the Soundplane pressure data. I'm very happy to send out the first public demo of that work today, as Soundplane 1.5.0b1.

The new touch tracker algorithm is a fundamentally new approach, and fixes small but annoying inconsistencies that players had to work around with the old one. Some of these showed up as stuck notes, or lingering phantom notes that would follow a touch.

I've been playing my Soundplane a lot while working on this. Now, when the sounds aren't right, I'm finding more often it's a problem with where my fingers are and not the software. So I'm very happy to switch my focus a bit more from algorithm development to practising!

Soft touches are no longer subject to a time-varying rejection filter, and should feel much more stable and less spongy. Positions of touches should be more accurate and consistent. Adjacent touches should maintain their positions better over a range of pressure.

Generally speaking, the new algorithm uses spatial filtering in a lot of places where the old one used temporal filtering. So latency should be much better, and in general it should reflect whatever your fingers are doing right now, which is kinds the point. Read on for details.

Version 1.5 changes

  • new touch tracker algorithm
  • attempted fix for Kyma connection

Installation

I'm sending out this version and any other upcoming betas simply as a compressed file containing the application. You can move it to wherever you currently keep your Soundplane application and run the new one alongside the current one. All data files have the same format, so you can use old zone presets with the new version.

On installing, I recommend that you go to the Expert page of the application and choose "restore defaults." This will set the default parameters for the new tracker and pick carriers.

If you have a carefully made calibration for the old tracker, you may want to back that up. I believe that it will be preserved if you switch to the new version and back, but better safe than sorry. The calibration file is in Library/Application Suppport/Madrona Labs/Soundplane/SoundplaneAppState.txt.

Getting started

This new tracker runs on a new, more robust principle and so a calibration procedure is no longer needed at all. In the future, I may add some form of positional fine tuning to allow for differences between instruments, but for now I think this should perform well without any calibration, and we'll have a more consistent baseline so I can get feedback on how it's working for the beta.

A couple of levels might need to be adjusted, as follows. Run the app and go to the "Touches" page, and pick the "xy" view mode from the view mode menu. If you raise the view scale dial to around 10, you can probably see some gray flickering. This is the sensor background noise. If you touch the surface now, you will see some green pixels, and probably a touch. If you see green pixels when you are not touching the surface, the "lo thresh" dial needs adjustment. To do this, go to the Expert page.

Back on the Touches page the "thresh" dial functions basically as before. The default here is 0.01. If you make this lower, lighter pressure will create touches, but touches will not be as consistent. Please use the default value for now when reporting issues.

Beta testing

Let me know if the new tracker seems like an improvement. If there are some cases where it isn't, the most effective communication to me would be a short written statement about what doesn't work well. I may be seeing the issue too, and already aware of it. After that, screen shots and movies are probably the best way to communicate about issues with tracking.

If you have a Kyma, please get in touch and let me know if this fix solves the connection issue with 1.4. If it does not, I will be sorry, but not too surprised, because I don't have a Kyma for testing. Now that the new tracker is done, and we are in the testing phase for this release, I can work frequently with you to find a fix.

New tracker notes

The new tracker runs in multiple phases, which you can see visualizations of using the various view modes on the Touches page. In short, these are:

  • raw data: as before, raw Soundplane data
  • calibrated: data after calibration and spatial smoothing
  • pings: touch candidates obtained by curvature method
  • pings horiz: horizontal pings only with pressure graphs
  • pings vert: vertical pings only with pressure graphs
  • key states: where a touch may be over each key
  • raw touches: touch candidates derived from key states
  • touches: filtered and matched touches
  • xy: finished touches with position histories, also sensor data

Sustaining touches on adjacent keys should now be possible, with careful playing, as long as the touches are more than a key width apart. In other words,

While single touches can be played very softly, groups of touches may take more pressure.

Touches on the bottom row suffer from positional inaccuracy because the palm of the hand is often close by providing a sink for electrical charge. This is a Soundplane hardware issue, not a tracker thing as such. To see an example, try pushing the lower row keys with a nonconductive pen or pencil instead of a finger. You may see that the positions go more easily to their limits. I have found keeping the bulk of my hand away from the surface, by curling the finger underneath and playing with my nail, to be a useful technique.

Touches never go all the way to the edge of the outer keys. If you think about it, you would have to be poking into the corner with something pointy-shaped in order for the center of a touch to be truly on the edge of the surface. The Soundplane is designed for fingers, which all have some thickness.

Next steps

If you look on the Soundplane issue tracker on Github, you can see the problems I know about or improvements I would like to make. If you have a problem with the software or a feature suggestion that's not on this list, please let me know.

The current state of the software archive is a bit messy, and it's not too clear what versions of libraries to grab to compile your own version. I'll be cleaning things up as I work on the 1.5 release. Meanwhile feel free let me know if you have any questions.

I also look forward to finally updating the manual, now that the software is settling down. I'm having a lot of fun playing now, and I plan to do some more video demonstrations soon.

Finally, all this work sets the stage for the soundplane-to-CV module, and the next model of the Soundplane itself. Stay tuned for developments.

I have only been building for 64-bit. Adding 32-bit doubles the size of the app and I wouldn't have thought anyone wanted it. If this is a need you will be having regularly and not just a lark, I can look at adding a 32-bit version.

Looks like I have been building for 10.9 and up. I'll see what I can do to support 10.8.

This is fixed, I'm working on the scale issue now and will send out an update shortly.

Did you try the beta 1? It should still be linked above. Another person had the same issue with the beta 2 but not #1.