Blog Synthesizerwriter Com Search Q Midi
Blog Synthesizerwriter Com Search Q Midi
Showing posts sorted by relevance for query midi. Sort by date Show all F E AT U R E D P O S T
posts
Sweeping wavetables using
T U E S D A Y, 3 J A N U A R Y 2 0 1 7 .WAVs
MIDI Interfaces and Modulation Wheel Messages Previously I've blogged about '
Sometimes, without any warning, an apparently trivial and simple task can suddenly explode Waivy' , the simple swept
into a major problem. Of these, the most interesting problems are the ones that can't be wavetable glimpse into the
solved by merely researching the topic on the Interweb. forthcoming update to Waverne.
Well, as ...
Modulation Wheel -> MIDI Controller Messages
So there I was, working on a new Max For Live (M4L) plug-in, and I needed to control a
parameter from an external MIDI keyboard. Rather than force users to map a MIDI Controller
to the parameter inside Live, I thought it would be easier to provide a dedicated pre-
mapped controller inside the plug-in itself. But it didn't work in the way that I expected.
BLOG ARCHIVE
▼ 2019 (27)
▼ December (1)
Free random velocity
repeated notes without
using ...
► November (3)
► October (2)
► September (2)
► July (3)
► June (4)
I was using the Modulation Wheel on one of my synths to provide the MIDI Controller ► May (4)
messages, and these were supposed to be controlling a parameter in the plug-in with 32 ► April (2)
values - displayed as several rows of buttons. Inside Max, I scaled the range of the
► March (1)
controller value to 32, and then moved the Mod Wheel, expecting the buttons to highlight in
sequence. Instead, I found that the highlighting jerked around, and even when moving the ► February (4)
Mod Wheel slowly and carefully, I couldn't select some of the buttons. Suspecting that the ► January (1)
Mod Wheel value needed smoothing, I used Max's 'slide' object to provide some low-pass
filtering, but the jerkiness and quantisation were still present. It was at this point that the ► 2018 (29)
'This is interesting' light lit up in my head, and I started to gather more detailed information ► 2017 (15)
about what was happening. Here's what I expected: ► 2016 (12)
► 2015 (13)
► 2014 (10)
► 2010 (4)
► 2009 (11)
ABOUT ME
VIEW MY COMPLETE
PROFILE
D O N AT I O N S
http://buymeacoff.ee/synthwrite
r
LINKED SITES
FOLLOWERS
Followers (2)
Follow
midi Search
So the nice straight line in the left hand diagram is a simplification - actually it is made up
of lots of little flat segments that map 0 and 1 to 0, 2 o 5 to 1, and so on. This table shows
the ends of the complete map - notice that 126 and 127 produce an output of 32.
Now, normally, when you use a Modulation Wheel, you are not looking for precision, and so I
expected to have to smooth the values a little bit. But this was much worse than that. The
jerkiness was stopping me selecting specific buttons, and that's exactly what I needed to be
able to do. What was needed were a few tools, and that's what I wrote next.
Simulation and Analysis Tools
The first tool was a MIDI Continuous Controller simulator - a replacement for the Mod Wheel
created using M4L. (To avoid putting MIDI Continuous Controller every time, I will use the
shorthand of 'MIDI Controller' here - I could have used 'CC', but that's used in the tool-name!)
Because I might use it again for something else, I made it reasonably general purpose, and
so it allows the setting of any MIDI Controller Number, plus it has quick access to specific
Control Change values.
As the screen-shot shows, the middle slider is the main controller, and it simulates a Mod
Wheel with forwards and back (or typically up and down on the screen) mouse movements
controlling the output values. The grid to the right is actually a 2-axis controller, so more a
joy-stick than a Mod Wheel - you move the mouse over the array of dots, and the
appropriate MIDI Control Change values are sent for the selected MIDI Controller Numbers. In
the screen-shot, the horizontal axis (left-right mouse movements) are set to MIDI Controller
Number 1 (Mod Wheel), whilst the vertical axis (up and down mouse movements) are set to
MIDI Controller Number 16 (a general purpose controller). The buttons on the right hand side
allow specific Control Change values to be sent (0, 31, 63, 95 or 127) covering the whole of
the available 7-bit range. Now it is possible to use 14-bits to provide extra fine detail, but in
this case, with only 32 buttons to control, I didn't need it. For user-defined special values,
then the second row of buttons allows you to set your own values - in the screen-shot, I
obviously wanted to have five different ways to output zero!
The second tool allows analysis of the values produced by the Controller simulator, and has
lots of scrolling displays that provide plots of values over time. These are the same type of
display as I used in the Mode Audio VeloView MIDI Velocity viewer that I've included on the
right hand side of the screen-shot.
The main scrolling display allows the selection of the MIDI Continuous Controller Number,
whilst there are separate scrolling displays for Data Entry (Controller Number 6) and Number
16. At the far right hand side, I have copied in the 32 buttons and the scaling and offset
controls. Unlike the MIDIcc utility, this is much more a draft tool for my own use, and it isn't
intended for casual users.
The Setup
Using the MIDIcc Continuous Controller simulator, the 32 buttons were easy to select with
mouse movements, and substituting the Mod Wheel again produced jerkiness and difficulty
in selecting a specific button. This meant that it wasn't my M4L processing that was causing
the problem, but something else. Tracing back from the Plug-in, the MIDI signals went
through Live, then through a USB cable to a MIDI Interface, and then to the synthesiser. The
simulation worked okay, so Live was not the problem, which left the USB cable and the MIDI
Interface... Changing the USB cable made no difference at all, and so that left: the MIDI
Interface, or the synthesizer. Changing the synthesizer made very little difference, so it
seems that the MIDI Interface is the major contributor.
I'm going to split MIDI Interfaces into three types, and use these to avoid naming any brand
names in what follows. The three types are:
1. Low-cost, simple, in-cable interfaces. These typically have a MIDI In and Out cable, a
plastic 'blob' in the middle, and a USB cable.
2. Mid-range, robust, stand-alone interfaces. These typically have MIDI sockets for In and
Out (sometimes a Thru as well), and a USB socket. Some USB audio interfaces also have this
type of MIDI interface included as well.
Inside a MIDI Interface, there are two sections: one grabs incoming MIDI messages from the
MIDI In and sends them to the computer via USB; the other receives outgoing information via
USB and sends them out via the MIDI Out. Here's the route from the MIDI In to USB:
The UART is a device that converts the serial data for the MIDI device into data in a format
that the Main Processing Unit (or microprocessor) can work with by stripping off the start
and stop bits and buffering the MIDI data. AT the output, another UART converts the MIDI
data into the right format for USB. The MPU loops around, grabbing incoming MIDI messages,
and sending them out to USB continually.
Interestingly, inside the microprocessor chip itself there are additional conversions going on:
Most modern microprocessors have serial interfaces externally, but internally, it is much
faster to have data in parallel, and so there are more UARTs to convert to and from serial
and parallel.
For MIDI Output, things just work in reverse in the other section. This time the MPU grabs
outgoing USB data and converts it to MIDI data, with a UART formatting it correctly for MIDI
transmission.
Inside a synthesiser
Just for reference, here's how the Mod Wheel typically works inside most synthesisers.
The left-most part is the Mod Wheel, which is just a modified rotary control where you move
the edge of the knob, and this produces an output voltage. This is smoothed by the RC low-
pass filter (just a resistor and a capacitor) and then converted into digital form by an
Analogue-to-Digital Converter (ADC). Once in digital form, the processing is very similar to
the MIDI interface: the MPU loops continuously, grabbing the Wheel position from the ADC,
then converting it into a MIDI Control Change Message, and then outputting it to the MIDI
Output with a UART.
Testing
I tried examples of each type of MIDI Interface to see if it made any difference to the
controllability of he 32 buttons.
At this point, I should explain how the scrolling displays in the analysis tool work. Each time
a new MIDI Control Change value arrives, it moves the display to the left, and draws a
vertical line representing the new value. The result is that the display scrolls leftwards as
new values as received by the tool. This removes any dependence on timing, and gives a
pure mapping between the incoming values and the display. Just as with the diagram at the
start of this blog entry, the output should be linear for rising controller values, and linear for
falling controller values. Any missing values will appear as a vertical jump, any repeated
values will appear as horizontal flat segments, and any zero values will appear as gaps.
A perfect MIDI Interface would produce neat straight-sided triangles as the Mod Wheel is
moved up and down (and the MIDIcc tool produces perfect triangles (as above), of course!)
Low cost, type 1 MIDI interfaces give different slopes each time, with missing values. The
low cost probably means that a slow MPU with just enough processing power is used, and
this is fine for most of the time, but runs into trouble when lots of messages are received all
at once - as with sending lots of MIDI Control Change messages when using a Mod Wheel!
(One other time that processing bandwidth is important is when using System Exclusive
messages, and so they may also cause problems for this type of interface... I didn't test
this.) The warped triangles explain why the Mod Wheel was so difficult to use to select
buttons!
Mid-range, type 2, MIDI Interfaces give very good results, with only a few missing values. In
this type of design, the internal microprocessor is probably better specified to cope with
demanding situations, and the result is a pretty linear triangle.
High-end, type 3, MIDI Interfaces give good results, but not quite as good as the Mid-range,
and this might reflect the higher processing demands of multiple MIDI sockets and time
synchronisation.
For each type, the left hand column shows the biggest jumps between Control Change
values (higher is worse), and then the right hand column shows how many different values
were transmitted by the MIDI Interface. So the Low-cost type 1 only sent 25 messages with
the largest gap of 13 when movie the Mod Wheel upwards, and only 32 messages when
moving the Mod Wheel back to the resting position. In contrast, the Mid-range, type 2, MIDI
Interface produced nearly three times as many messages (72) and had the smallest gaps (6).
The 'Min' and 'Max' values are interesting because they show the highest and lowest values
sent in the Control Change messages. A Mod Wheel should produce a value of zero when it is
in the resting position, but the low-cost interface only ever sent 3 as its smallest value. In
my M4L application, this means that the first button could never be selected! (I cured this
by adding an offset so that the Mod Wheel has 'dead'-zones as the two ends of its travel.
Conclusion
Choosing a MIDI Interface may affect your performance in ways that you don't expect!
The MIDIcc simulator utility and the CC Analysis tool are now available via MaxForLive.com.
In the course of developing the Analysis tool, I realised that the 'All MIDI Data' display was
very useful, and so I have extended this into a separate stand-alone utility called MIDIview,
where each type of MIDI data has a different colour. This is also now available on
MaxForLive.com.
POSTED BY SYNTHESIZERWRITER AT 22:32 NO COMMENTS:
LABELS: ABLETON, ABLETON LIVE, CC ANALYSIS, CONTROLLER, EXPERIMENTAL, M4L, MAX FOR LIVE,
MAXFORLIVE, MIDI EFFECT, MIDI TOOLS, UTILITY, VIRTUAL JOYSTICK, VIRTUAL MOD WHEEL
W E D N E S D A Y, 1 7 M A R C H 2 0 1 0
As with many things in life, there is more than one way to do it.
It is more complex, but it allows you to utilise the full capabilities of the Apple DLS plug-in.
This time, you definitely need to make the Inputs and Outputs visible by clicking on the I-O
circle on the far right of the mixer, just to the right of the master volume sliders.
This I-O panel is the key to assigning MIDI channels to the DLS Music Device.
You then drop the Apple DLS plug-
in into the MIDI Track. This sets up
the DLS Music Device so that it
receives MIDI Input and outputs
audio into the mixer. But this time
we are going to re-route where
the MIDI Input is coming from...
You now need to add a second MIDI Track... This is going to be used to hold the clip
containing the note events, and to control the MIDI channel of those events...
The I-O panel in this new MIDI
Track contains this vital pair of
controls, which aren't exactly
obvious in what they do...
The lower pop-up list control lets you control the MIDI Channel of the note events that are
sent to the DLSMusicDevice Track.
Here's a summary of what the two
pop-up controls do...
Remember that you can create several MIDI Tracks, assign them to different MIDI Channels
(like Channel 10 for Drum sounds) and make the most of the multi-timbral capabilities of the
Apple DLS Music Device.
In this example, the top pop-ups all route the MIDI events to the DLSMusicDevice plug-in on
Track 1 (shown highlighted in
Red), whilst the individual MIDI
Channels (set by the lower pop-
up) are shown highlighted in
green.
S U N D A Y, 1 J A N U A R Y 2 0 1 7
(This is not where I'd immediately expect 'Plug-ins' to be managed, but this is where
Ableton put these settings. Note that there are some other useful settings in this pane: the
'Save Current Set as default' can be a very productive time-saver if you have a complex
standard setup...)
Mono-timbral use
Here is a MIDI Track with the DLSMusicDevice plug-in dropped into it. You can create a MIDI
Clip containing a few note events to test out the DLSMusicDevice, or you could use a
keyboard (or the virtual keyboard on a laptop) - the highlighted red 'Record' button at the
bottom of the track-strip enables this.
Ableton always uses MIDI channel 1 by default inside a track, so this will use the first one of
the 16 available MIDI channels in the DLSMusicDevice plug-in, and so you can only use it for
instrumental voices - there is no way to change the MIDI channel that is used when you use
this way of accessing the DLSMusicDevice. So if you only need a single channel of basic
General MIDI instrument sounds, then this may be all that you need. Note that if you create
a MIDI Clip then you can use the 'Program Change' control to select the sound that the
DLSMusicDevice produces.
To get the control window to appear, you just click on the 'Spanner' icon in the generic X-Y
controller box that appears in the track detail view at the bottom of the screen.
Notice here that I've made the Inputs and Outputs visible by clicking on the I-O circle on the
far right of the mixer, just to the right of the master volume sliders. What is interesting is
that this MIDI Track is behaving exactly as it should - receiving MIDI inputs and converting
them into audio outputs. Unfortunately, Live seems to always send MIDI information to the
DLS plug-in on MIDI channel 1, and there is no control to change this in the I-O panel. In
fact, for this simple example, you do not need to see the inputs and outputs at all.
The 'Reverb Volume' is highlighted because the default is to smother the audio in lots of
reverb. You are advised to lower this setting! If you add any in-line effects in the track then
having reverb in the source audio sounds strange anyway - so use a reverb plug-in at the end
of the processing chain. My personal favourite effects plug-in for the DLSMusicDevice is the
'Auto-Filter', where subtle use can remove some of the 'General MIDI' giveaway sound
footprint! [ And for non-subtle: SoundCloud example using just DLSMusicDevice as the sound
source... ]
Sound Banks
Notice that the
dialogue box for the
DLSMusicDevice calls
it an 'Apple Sound
Bank Synthesiser'...
This instrument can
be used to play
more than just the
default Apple
General MIDI-
compliant sound
bank (this bank is
confusingly called the 'QuickTime Music Synthesiser') - it can play any Soundfont sound file
with a .sf2 suffix.
The 'Properties' section can be left alone. The 'Restrict CPU Load' control is a remnant from
many years ago, when playing back audio was a considerable strain on a Mac's CPU. On a
modern machine, leaving the render quality at maximum is fine.
To enable playback
of additional sound
banks on a Mac, you
need to put some
.sf2 files into your
/Library/Audio/Soun
ds/Banks/ folder.
(You may need to
use the option key
inside Finder to
make the Library
folder visible.) Note
that the default
Apple 'QuickTime
Music Synthesiser'
bank is not stored
here, and so this folder will probably be empty the first time you open it.
Some .sf2 files contain complete banks of sounds, whilst others contain just one sound. By
creating an 'Instruments' folder, you can keep these 'single sound' files separate. You may
also find that some .sf2 files do not work, and the 'Don't Work' folder is there to hold these
as a reminder to keep a lookout on the Interweb for an updated version. Sometimes when a
sound bank file does not work, it can cause other banks or sounds to stop working as well, so
you may need to delete the DLSMusicDevice from the track, and re-insert it to force it to
restart.
Folders placed
inside the 'Audio'
folder appear with a
triangle indicator.
inside the pop-up
selector. In this
example, the Apple
'QuickTime Music
Synthesizer' sound
bank is just one of
six available banks
of sounds.
General MIDI sound banks have their sounds arranged in a specific order, where program
change numbers map to particular types of sounds (0/1 is a 'Grand Piano' sound, for
example, whilst 48/49 is a 'Strings Ensemble' sound. General MIDI sounds can vary
considerably between sound banks. Some sounds banks do not follow the General MIDI
mapping of sounds to program change numbers.
----------
Auditioning .sf2 SoundFont files
A search for .sf2 using a search engine on the Interweb is going to produce lots of results,
which then leads to the question of 'auditioning'. In this case, there's no need to commission
a TV programme to find some suitable candidates...
What IS needed, to save lots of time and finger-wear, is a way of running through the sounds
in a .sf2 file quickly, so that you can triage them into a few categories (and thus into named
folders inside the '/Banks' folder...):
GM soundbanks
Non-GM sound banks
Individual Instrument sounds
Drum sounds
Inside Live, using the program change control in a clip isn't very convenient, so I have
written two M4L utilities that make auditioning .sf2 files quicker and easier. You can get
them from MaxForLive.com
DLS_Helper_N is designed to help listen to Note-based .sf2 SoundFont files to quickly learn
about their audio contents. You just drop it into the track that has the Apple DLS Synth in it.
There are two main modes of operation: manual and automatic.
In Manual mode, you can use the vertical slider control to select a specific sound by sending
MIDI program change messages shown with the matching General MIDI Instrument name, and
then playing on the [A - L] virtual MIDI keyboard inside Live, or on your external MIDI
keyboard (or other instrument). There are two keyboard shortcuts: the Down cursor button
is assigned to a 'Next' button, which changes the program, and the Up cursor button controls
an Up/Down counter. The counter normally starts up in 'Up' mode, and so every time you
press the Next button, the program change counter goes up by one. You can then play some
notes to audition the sound. Remember that to keep the keyboard focus inside the
DLS_Helper, you need to click inside it, and I've included some words that say this in the UI.
If the focus strays outside the plug-in, then you will activate the Live keyboard shortcuts.
(The workflow of 'Next' then play a few notes' is okay for the first few sounds, but I rapidly
got bored, and so I added more automation...)