# Velocity Dream

1. What is Velocity Dream?
2. Installation
3. Feedback
4. LICENSE

## 1. What is Velocity Dream?

Velocity Dream is a MFX Midi Plugin for use with Bandlab Sonar. It seeks to provide more flexibility in the use of velocity.

In MIDI, velocity is not a controller like, say, volume. Instead, it is a value associated with each note press or release, This makes sense because it allows the performer use dynamics as a means of musical expression. Volume as a controller (7) is more like the volume control you have on a pickup or volume control. It is quite different in character as it affects the overall loudness of the track but is a poor analogue for musical expression as it is too wide-reaching. Every note played in the track is affected and so does not allow for the dynamics for each note. The "expression" controller (11) is similar.

In traditional music, you make an instrument louder by increasing the "strength" through which you play the notes. Changing how hard you hit a key, string, drumstick, etc. the individual volume of the note is changed even in the same part. For natural sounding insturments, the sounds you are using are velocity mapped (i.e. have sounds that change the timbre as well as volume according to velocity. If we want a natural sound, it might be better to reflect this - i.e. set our mixes at a particular volume and then, to make our music louder, apply offsets to velocity. It is important to keep the original velocity as a component of the final sound because the part may have been "recorded" as part of a performance. Velocity Dream was written to explore some of these ideas.

In essence, it is a plugin that is added to each track of a piece and can be used to manipulate the velocity of the sound on the basis of a controller. I will call it the Velocity Offset Controller or Velocity Controller, for short. By default, the plugin uses controller 20, which is a rarely used one so it does not interfere with the other controllers. To be usable, it is helpful to add an additional controller to the Sonar insturment definitions. This makes the controller selectable for automations. The values of the controller are applied to the velocity values of each note as they are passed through the plugin. To achieve this, the plugin has two different modes of operation and is likely to have more as more sophisticated methods are adopted. In the first instance, the modes are standard mode and algorithmic mode.

In standard mode, the plugin overwrites the current value of the controller to the velocity of the notes. This allows us to have a mechanism like the volume control but which affects not only the loudness of the note but also its timbre or sound quality. In essence, this creates a kind of velocity controller that can be automated. There is also a boost value which boosts the effect of the controller. It is possible reconfigure the plugin to use the volume or other MIDI controller values to control the velocity of the sound. Maybe using Volume would cause timbre changes in combination with volume. However, this might expand the effect of volume changes. Maybe a CAL script culd be written to move automation data from controller 7 to 20 and achieve the volume changes through the velocity values of the notes. There are many possibilities constrained only by the need to maintain the expressive nature of the resulting sounds.

However, on the downside, standard mode tends to lose the natural expressiveness of the performance by overwriting the note velocities. So, the plugin also has algorithmic mode. In this mode, it attempts to keep the original velocity of the sound and apply to it a multiplier based on a controller. The incoming controller values are treated as a multiplier where 64 is zero(0) that varies by +/-64 units. This might be a fixed value, effectively creating a sort of expander or compressor for the velocities. Let's say you set the controller to 80. All velocity values would be increased, by default, by 16 (80-64 = +16) in a linear fashion. This the plugin calls the "curve". You can also apply an exponential curve so that higher velocities are ampplified more than lower ones. So if the factor were 1.0 (the default) then greater velocities would be increased more than lesser ones. The factor can be increased to emphsise those changes or de-emphasise them for negative values. However, the factor can also be changed according to the automation value.

## 2. Installation

I have tried various tools including WiX v3 and v4, and Inno to create an installation script and, given how little there needs to be done, it seems remarkably difficult to do. So, I have created a pair of zip files, one for 32-bit installs and the other for 64-bit installs. Thw zip files contain:

The zip file contains the following files:

Readme.htm | This file
VelocityDream.dll | The plugin
VelocityDream.pdb | Symbol and debug information which may help in the event of an error.

Using these files, the plugin can be installed manually. Essentially, you simply unpack the zip and register the plugin. You then add the controller to the instrument definitions as a standard controller. It will be defined for all instruments, but controller is ignored by those instruments.

To register the plug in, open a command prompt as an Administrator. You need these privileges to update the registry. In the Search box, type "cmd" and right click on "Command Box" and select "Run as Administrator". Navigate to the directory where you unpacked the zip file and type "regsvr32 VelocityDream.dll". If you want to uninstall the plugin, use the command regsvr32 /u "VelocityDream.dll".

The registration performs three actions. It:

1. Registers the plugin and its property page as ActiveX objects adding their keys to HKEY_CLASSES_ROOT\
2. Registers the plugin with Sonar under HKEY_LOCAL_MACHINE\Software\Cakewalk Music Software\MIDI Filters.
3. Creates a key and default values under HKEY_CURRENT_USER\Software\Keith Young\Velocity Dream used for per-user configuration.

To register the controller in Sonar, select "Preferences" in the "Edit" menu. This pops up the Preferences dialog. Select "Instruments" dialog on the left and select "Define" in the right pane. The Instrument Definition dialog pops up. In the right pane, open "Controller Names". We are going to add controller #20. Right click on "Standard" and select "Add Controller Name". The cursor will be place in an edit box which reads "0-0". Replace that with "20 = 20-Dream". This means define controller #20 with the name "20-Dream". You will find that you can create an automation with the Dream MIDI controller.

### Logging

During the registration process, the system creates a key HKEY_CURRENT_USER\Software\Keith Young\Velocity Dream. This contains two values, LogLevel and LogPath. The log level determines what is logged and the log path, where the logs are placed. By default, the log level is zero (0). Only errors and informational messages are placed in the log. You can set the log level to higher values to add additional information in the log. The most detailed level is currently five(5).

The LogPath setting may be empty ot may contain the name of a directory or file. If the path setting is empty it is assumed that the directory given by the %TEMP% environmental variable is used. This is usually "C:\Users\username\AppData\Local\Temp. If this is the case or if a folder is given, the log file "Velocity Dream.log" is placed in the directory. If a full file name is given, that file is used. No file is created until the first log and, on each invocation of the plugin, a new file is created.

If you change the log file, you need to restart Sonar to have it take effect. If you change the log level, it will change on the fly.

## 3. Feedback

Of course, we may find, as a result of experiment better ways to handle this in more sophisticated ways, often as part of a means to emphasise the musicality of the performance. Consequently, we may choose to add new "modes" to the software. I think the sensible place for discussion is this forum.

However, I don't spend a lot of time here. I prefer to use it in Sonar making music. So, once we have established that the code works, I plan to upload a copy of the project source code to allow people to play with it. Of course, I am not responsible for any changes they make. Actually, I make no warranties about my version either (see the acccompanying LICENSE). I will keep the master copy of the code for the time being. So, if there are features added that seem popular or particularly useful, I will try to add back into my master copy. The source code is a single Visual Studion 2022 Community Edition project. Community edition is a free version of Visual Studio that can be downloaded from Microsoft. There are no other external dependencies.

If people have a better idea on how to do this, then say something on the forum.

## 4. LICENSE

Velocity Dream. Copyright © 2025 Keith Young

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.