Monday, March 28, 2011

MIDI to CV

I read an interesting post CVC versus Midi - A Case Study at Haken Audio.

Presently the Eigenharp does not have a CV output (it does have an i2c port on the base station pro but it is not implemented).  However, Effective with EigenD 1.3.x there is a very effective ability to manage the MIDI outputs in great detail (including 14bit controllers).  So the topic of MIDI to CV is most interesting.

As you can see in the earlier post, one can send 14bit controller info directly to a Voyager but the case study at Haken is interesting. Using CC's to crete an envelope may not be an everyday thing but it creates some possibilities that are compelling.

So, rather than work directly with the voyager, I tried a little experiment with the MP201. The current SW has MIDI>CV and even the older SW has MIDI CC> CV expression. Importantly, the smoothing can be switched off. Perhaps more importantly, the MP201 can receive MIDI over USB and does not seem to mind high data rates

I wish I had the voyager patch used in the case study above to affirm my experiment but here is what I tried:

- using the factory MIDI>CV setup I changed channels 3 & 4 to be expression channels listening to MIDI CCs 70 and 71
- I patched pitch and gate as expected and CC70>Volume CV
- in EigenD I mapped pressure to CC70 (7bit, no decimation)

As far as I can tell, I can include the attack phase of the envelop on the Voyager handily.

Now, I'm not claiming this is a better solution than having CV on the controlling device but it *is* workable

Sunday, March 20, 2011

Moog Front Panel Pot vs Alpha 14bit CC

Here is a bit of a test comparing front panel and MIDI control of a Voyager.

Methodology


  • A voice was selected from the Voyager factory library (D49 Moshi Moshi)
  • The voyager was connected to the Alpha via MIDI DIN
  • The alpha uses it's MIDI1 feed, all controllers except the Breath control are cleared and BC is set to send MIDI cc 19+51 (ie: 14 bit info)
  • The voyager Filter Cutoff is set to 0
  • A note is played on the Voyager keyboard and the filter is swept from 0 to full slowly and the twice at a faster rate
  • The voyager filter cutoff is returned to 0
  • The same note is played on the voyager keyboard
  • The breath controller on the Alpha is used to sweep the filter slowly and then twice at a faster rate and then a few times quite quickly
This is the resulting sound:  Note that soundcloud seems to have mangled it in transcoding, so download it to hear it.


Filter cutoff sweep - via Voyager panel pot and Alpha Breath CC19+51 by Mike Milton

Analysis

Well, I do not hear much difference The Alpha strikes me as a bit more 'crunchy' as the sound evolves. Clearly the curve differs (it is rather difficult to modulate the breath control identically to turning a pot). It is worth noting that the Voyager does AD/DA on the pot itself

So lets *look* at a spectrogram.


This is a spectrogram made in soundtrack pro (which was also used for recording the sound. Exactly the same signal path was used in both instances). hmmmm.... something is happening.

Lets look at the data  for CC19's start to cc19= about 10.

From the breath control:

13:17:01.896 From Eigenlabs 1 Control 1 51 20
13:17:01.896 From Eigenlabs 1 Control 1 19 0
13:17:01.907 From Eigenlabs 1 Control 1 51 81
13:17:01.907 From Eigenlabs 1 Control 1 19 0
13:17:01.919 From Eigenlabs 1 Control 1 51 31
13:17:01.919 From Eigenlabs 1 Control 1 19 3
13:17:01.931 From Eigenlabs 1 Control 1 51 39
13:17:01.931 From Eigenlabs 1 Control 1 19 3
13:17:01.942 From Eigenlabs 1 Control 1 51 55
13:17:01.942 From Eigenlabs 1 Control 1 19 3
13:17:01.954 From Eigenlabs 1 Control 1 51 71
13:17:01.954 From Eigenlabs 1 Control 1 19 3
13:17:01.966 From Eigenlabs 1 Control 1 51 111
13:17:01.966 From Eigenlabs 1 Control 1 19 3
13:17:01.977 From Eigenlabs 1 Control 1 51 7
13:17:01.977 From Eigenlabs 1 Control 1 19 4
13:17:01.989 From Eigenlabs 1 Control 1 51 39
13:17:01.989 From Eigenlabs 1 Control 1 19 4
13:17:02.000 From Eigenlabs 1 Control 1 51 63
13:17:02.000 From Eigenlabs 1 Control 1 19 4
13:17:02.012 From Eigenlabs 1 Control 1 51 71
13:17:02.012 From Eigenlabs 1 Control 1 19 4
13:17:02.024 From Eigenlabs 1 Control 1 51 95
13:17:02.024 From Eigenlabs 1 Control 1 19 4
13:17:02.047 From Eigenlabs 1 Control 1 51 103
13:17:02.047 From Eigenlabs 1 Control 1 19 4
13:17:02.059 From Eigenlabs 1 Control 1 51 111
13:17:02.059 From Eigenlabs 1 Control 1 19 4
13:17:02.070 From Eigenlabs 1 Control 1 51 127
13:17:02.070 From Eigenlabs 1 Control 1 19 4
13:17:02.082 From Eigenlabs 1 Control 1 51 15
13:17:02.082 From Eigenlabs 1 Control 1 19 5
13:17:02.093 From Eigenlabs 1 Control 1 51 23
13:17:02.093 From Eigenlabs 1 Control 1 19 5
13:17:02.105 From Eigenlabs 1 Control 1 51 47
13:17:02.105 From Eigenlabs 1 Control 1 19 5
13:17:02.117 From Eigenlabs 1 Control 1 51 55
13:17:02.117 From Eigenlabs 1 Control 1 19 5
13:17:02.128 From Eigenlabs 1 Control 1 51 71
13:17:02.128 From Eigenlabs 1 Control 1 19 5
13:17:02.140 From Eigenlabs 1 Control 1 51 95
13:17:02.140 From Eigenlabs 1 Control 1 19 5
13:17:02.151 From Eigenlabs 1 Control 1 51 103
13:17:02.151 From Eigenlabs 1 Control 1 19 5
13:17:02.163 From Eigenlabs 1 Control 1 51 127
13:17:02.163 From Eigenlabs 1 Control 1 19 5
13:17:02.175 From Eigenlabs 1 Control 1 51 23
13:17:02.175 From Eigenlabs 1 Control 1 19 6
13:17:02.186 From Eigenlabs 1 Control 1 51 39
13:17:02.186 From Eigenlabs 1 Control 1 19 6
13:17:02.198 From Eigenlabs 1 Control 1 51 55
13:17:02.198 From Eigenlabs 1 Control 1 19 6
13:17:02.209 From Eigenlabs 1 Control 1 51 71
13:17:02.209 From Eigenlabs 1 Control 1 19 6
13:17:02.221 From Eigenlabs 1 Control 1 51 87
13:17:02.221 From Eigenlabs 1 Control 1 19 6
13:17:02.233 From Eigenlabs 1 Control 1 51 119
13:17:02.233 From Eigenlabs 1 Control 1 19 6
13:17:02.244 From Eigenlabs 1 Control 1 51 7
13:17:02.244 From Eigenlabs 1 Control 1 19 7
13:17:02.256 From Eigenlabs 1 Control 1 51 39
13:17:02.256 From Eigenlabs 1 Control 1 19 7
13:17:02.267 From Eigenlabs 1 Control 1 51 63
13:17:02.267 From Eigenlabs 1 Control 1 19 7
13:17:02.279 From Eigenlabs 1 Control 1 51 95
13:17:02.279 From Eigenlabs 1 Control 1 19 7
13:17:02.291 From Eigenlabs 1 Control 1 51 119
13:17:02.291 From Eigenlabs 1 Control 1 19 7
13:17:02.302 From Eigenlabs 1 Control 1 51 15
13:17:02.302 From Eigenlabs 1 Control 1 19 8
13:17:02.314 From Eigenlabs 1 Control 1 51 47
13:17:02.314 From Eigenlabs 1 Control 1 19 8
13:17:02.325 From Eigenlabs 1 Control 1 51 71
13:17:02.325 From Eigenlabs 1 Control 1 19 8
13:17:02.337 From Eigenlabs 1 Control 1 51 95
13:17:02.337 From Eigenlabs 1 Control 1 19 8
13:17:02.349 From Eigenlabs 1 Control 1 51 119
13:17:02.349 From Eigenlabs 1 Control 1 19 8
13:17:02.360 From Eigenlabs 1 Control 1 51 23
13:17:02.360 From Eigenlabs 1 Control 1 19 9
13:17:02.372 From Eigenlabs 1 Control 1 51 47
13:17:02.372 From Eigenlabs 1 Control 1 19 9
13:17:02.384 From Eigenlabs 1 Control 1 51 71
13:17:02.384 From Eigenlabs 1 Control 1 19 9
13:17:02.395 From Eigenlabs 1 Control 1 51 95
13:17:02.395 From Eigenlabs 1 Control 1 19 9
13:17:02.407 From Eigenlabs 1 Control 1 51 127
13:17:02.407 From Eigenlabs 1 Control 1 19 9
13:17:02.418 From Eigenlabs 1 Control 1 51 23
13:17:02.418 From Eigenlabs 1 Control 1 19 10
13:17:02.430 From Eigenlabs 1 Control 1 51 47
13:17:02.430 From Eigenlabs 1 Control 1 19 10
13:17:02.442 From Eigenlabs 1 Control 1 51 63
13:17:02.442 From Eigenlabs 1 Control 1 19 10
13:17:02.453 From Eigenlabs 1 Control 1 51 79
13:17:02.453 From Eigenlabs 1 Control 1 19 10

.... And then from the pot:

13:18:55.531 From 01X:3 Control 1 19 2
13:18:55.531 From 01X:3 Control 1 51 8
13:18:55.553 From 01X:3 Control 1 19 2
13:18:55.553 From 01X:3 Control 1 51 76
13:18:55.579 From 01X:3 Control 1 19 3
13:18:55.579 From 01X:3 Control 1 51 16
13:18:55.598 From 01X:3 Control 1 19 3
13:18:55.598 From 01X:3 Control 1 51 84
13:18:55.620 From 01X:3 Control 1 19 4
13:18:55.620 From 01X:3 Control 1 51 24
13:18:55.639 From 01X:3 Control 1 19 4
13:18:55.639 From 01X:3 Control 1 51 92
13:18:55.658 From 01X:3 Control 1 19 5
13:18:55.658 From 01X:3 Control 1 51 32
13:18:55.676 From 01X:3 Control 1 19 5
13:18:55.676 From 01X:3 Control 1 51 100
13:18:55.699 From 01X:3 Control 1 19 6
13:18:55.699 From 01X:3 Control 1 51 48
13:18:55.721 From 01X:3 Control 1 19 7
13:18:55.721 From 01X:3 Control 1 51 0
13:18:55.740 From 01X:3 Control 1 19 7
13:18:55.740 From 01X:3 Control 1 51 68
13:18:55.762 From 01X:3 Control 1 19 8
13:18:55.762 From 01X:3 Control 1 51 12
13:18:55.781 From 01X:3 Control 1 19 8
13:18:55.781 From 01X:3 Control 1 51 88
13:18:55.799 From 01X:3 Control 1 19 9
13:18:55.799 From 01X:3 Control 1 51 28
13:18:55.822 From 01X:3 Control 1 19 9
13:18:55.822 From 01X:3 Control 1 51 100
13:18:55.848 From 01X:3 Control 1 19 10
13:18:55.848 From 01X:3 Control 1 51 44
13:18:55.866 From 01X:3 Control 1 19 10
13:18:55.866 From 01X:3 Control 1 51 112
13:18:55.889 From 01X:3 Control 1 19 11
13:18:55.889 From 01X:3 Control 1 51 56

hmmmm.....  there is a lot less data from the pot but that may just imply a difference in speed of the sweep (and my unstable lung capacity).

Conclusion:

Well, I don't really have a well formed reaction to this at this time. Do you?






Thursday, March 17, 2011

MIDI vs OSC, with a dash of CV

This post is motivated by a few things:

  • I've heard a lot of discussion on the topic that seems to suggest that there is a difference in capability or effectiveness between these two protocols that a musician should be concerned with.
  • The Eigenharp is capable of generating a lot of data and applying it in various ways (internally, via AU/VSTs, via MIDI) with more arriving
  • I use various soft synths, AUs, hard synths and a a couple of CV-capable devices
  • I do not develop musical hardware or software solutions
So the question is; Are the distinctions between MIDI and OSC material to what matters to me? I think the answer is no.

I'm planning to do some experiments with the stuff I have at hand, but those will focus on MIDI and CV, specifically addressing the best way for me to use the eigenharp to control some Moogerfoggers and a Moog Voyager. 

So this post is separate from that effort.

What does http://opensoundcontrol.org/ say? Look Here: What is the difference between osc and midi?

What does http://www.midi.org/ say? Look Here: A Comparison of MIDI and OSC

What can one make of this:
  • MIDI DIN transport is a red herring. It enabled several generations of hardware to talk to each other (filling a void), some are still limited to that but there are a lot of other transports available today. Nothing in this statement has any bearing on the effectiveness of capability of a data protocol
  • MIDI events are useful simply because they are well known and universally used. OSC can do this but both 'ends' of the exchange need to agree in advance on meaning. A standard event model for music will certainly arise. At that time, this will be a red herring (for new devices) as well.
  • OSC is more extensible, MIDI exclusive messages work (but are perversely opaque). This does not seem to matter to someone simply wanting to play music on devices communicating using either protocol. Further, it will be interesting to see if musicians are motivated to use OSC extensibility once it has a rich event model (any more than they craft sysex messages in MIDI now).
  • MIDI messages are more efficient than OSC with respect to total data transferred per message. Well that probably matters for every device that uses a MIDI DIN plug and is less significant for other transport settings. Also, It is probably only true where the majority of traffic consists of standard events (vs exclusive messages)
  • MIDI is typically lower resolution. IMHO 7bits is enough for some control info and 14 is enough for anything I need. It might seem silly to contemplate crafting a sysex message to carry a 64bit floating point number but one could and it is hard to see much practical difference between the use of such a structure and  something similar crafted in OSC (except to the person doing the crafting, perhaps ;-). (but consider that there are still people coding Fortran with delight hehehe))
Conclusion: 

  1. The brouhaha is mostly sound and thunder signifying nothing.
  2. A nice shiny new protocol is a good thing. Nobody would reasonably use MIDI in the context of things like the widgets of Eigenlabs Stage application (although adding MIDI capability to Stage would be a good thing for bringing together the control of other devices).
  3. Actual users probably do not want any visibility into either protocol (I'm glad Stage works so well but I'm glad there is a GUI for me to use)
  4. MIDI itself does not limit resolution but the MIDI event model's 14bit capability is not widely implemented. 14bits is likely not a practical limitation but an OSC implementation could easily allow more.
Final thoughts: I'll need MIDI for a long time (always) as I have MIDI DIN equipment. OSC will be a valuable addition, particularly in contexts like Stage. Whatever expressiveness I'm capable of can be delivered by either