Friday, June 8, 2012

EigenD and Multiple Output Channels

Most, or at least many, audio IO devices for computers support ADAT optical IO although these ports are often configured as S/PDIF by default. The difference is that ADAT supports 8 channels while S/PDIF is stereo or Dolby. I'm not aware of any real-time dolby encoders so using S/PDIF is limited to 2 channels.

Also, although Mac headphone jacks also support digital optical, I'm not aware of any ADAT drivers for the Mac

In the audio window in EigenD, you can pick an output to use. The internal channel mixer mixes to stereo and is connected to an audio agent which, in the factory setups, has two audio channels numbered 1 and 2.

For use as a performance instrument you simply select an output device to which you have an audio system connected. To record, you need some way of routing the audio into your DAW such as Jack or Soundflower, an external mixer with virtual channels, or an IO device using loopback (or a return bus if it has one)

Typically, one might put an optical cable between the S/PDIF out and in which will then present the stereo audio to the DAW.

The problem is that the signal is pre-mixed in EigenD which is perfect for (stereo) performance but problematic if you want to do post on a DAW.

Here is the solution.
  1. Set the optical IO on your interface to ADAT
  2. Put an optical cable from the ADAT out to the ADAT in
  3. Determine the channel numbers associated with ADAT (You can see this in AUDIO/MIDI setup on a Mac)
  4. Open your instrument setup in EigenD and in Workbench
  5. Locate the audio agent (lower right corner)
  6. Open the agent (click the disclosure triangle)
  7. Locate the audio inputs (yes, the inputs to the agent are the outputs from EigenD)
  8. Open the list of outputs
  9. Note that there are two, one for left and right, that they are wired to the channel mixer, and are channel 1 and 2
  10. Click the + bubble on the output parameter (not on the individual channel)
  11. A popup will appear, enter the 1st channel number associated with the ADAT output of your interface)
  12. Repeat adding channels for the rest of the ADAT channels
  13. Delete the wires from the channel mixer to channel 1/2
  14. Add wires from the channel mixer to ADAT 1/2
  15. Delete wires from the audio rigs you wish to separate to the channel mixer
  16. Add wires from the desired audio units to the remaining ADAT channels
The result looks like this (click to enlarge):


Now just select the interface in your daw and create tracks for each of the ADAT inputs (not outputs).

In addition to recording things separately for post this will let you do things like creating a surround mix, ducking channels (live or inpost) and so on.










Thursday, May 24, 2012

My New Book

I just finished my book about the Eigenharp.

With the advent of the Workbench tool in Eigenlabs version 2 software there is now a great way to explore the setups that configure the instrument visually.

While workbench is primarily a tool for creating setups, it can also provide deep insights into any existing setup.

One of the challenges for people who might be interested in an Eigenharp is that they are difficult to find in a retail setting and, even if you do, there is typically no knowledgable person to walk you through what the instrument is capable of.

My hope is that this free book will help in that regard.

Monday, June 27, 2011

Don't PANIC

There seems to be a process that most new (or even potential) Eigenharp players go through that they find challenging and or upsetting. This is quite unfortunate and unnecessary. I hope this post helps.

The first thing is: Don't PANIC

This is a big purchase. You did your homework. You have a list of ways you want to use it in many applications. You've been told, yup, that is possible. Now you want to know how and you keep being frustrated. Don't PANIC

Here are some thoughts and suggestions that might make you much happier and let you have some fun.

First: Get the latest software.

It ships with the current stable software. Virtually every player uses the current testing version and many use the experimental versions. Download *only* the software not the resources. Loading them does not remove the older versions so, if you should have an issue just step back.

Second: set aside, for the moment, your goals...

 ....and explore what the Eigenharp does by itself and how it is controlled. This is fun, rewarding, and removes a layer of complexity so that you can focus on your goals later.

Third: Learn the instrument as a stand alone thing

There are two dimensions to this. Controlling the instrument, playing the instrument.

The booklet is a reference to the instrument while the video tutorials give initial "how to" information.

Watch the videos, read the booklet, work through the booklet trying each control overlay. You won't remember them all but you will know how to find them and those that you use will quickly become familiar.

Here is one reasonable progression to follow. These are *all* covered in the video tutorials:

A) The first thing you need to know is how to select the instrument to play... focus on that and then select the piano in split one and play it for a while. It will be set for C major so, if you want to use some sheet music find a couple of songs that you like in C with no accidentals. Here is a mapping of the keyboard in C major. Get comfortable with the key layout and, most importantly, the sensitivity of the keys. The piano is a good starting point because it is not sensitive to pitch and yaw.

B1) Second, work on changing the root and scale. This will give you many more songs to play and is great for just noodling and improvising. I'd suggest staying away from chromatic for a bit. The downside is you won't have access to accidentals. The upside is that you can't accidentally hit 'wrong' notes while improvising.

B2) Try some of the other pre-loaded sounds. Particularly the cello which is very responsive to control input. At the same time, explore some other splits and using multiple keygroups.

C1) Third, work on loading your own AUs and Soundfonts. You will find that many such instruments are designed with a keyboard in mind and they use all sorts of techniques to make the sound more variable and lifelike. On an Eigenharp, you can do this yourself using pitch, yaw, and pressure so be sure to try some sounds that you previously felt were static and flat. You will find them a good match.

C2) Try some stand-alone modules or HW synths. This will require you to set up a MIDI path and that will be specific to you system and the SW you choose to use. On a Mac I use MIDI Patchbay

D) Explore the drummer and try some looping. This is great fun and will give you some experience with playing on several smaller keygroups.

E) Work with a focus on chromatic settings. Try out the scripts to lite the root keys (they help a lot).  Here is a chromatic keyboard mapping. I left this to last but this is a matter of personal choice. If you are a keyboard player you might be more interested in this than improvising in scales but one of the great powers of the instrument is improvising in scales and looping.

Personally, I'd do all the above without using stage initially. Stage is easy and quick but it takes you away from the instrument and your arrangement. It is great for making a setup but not so great for actually playing. So, if you start with the keyboard control mechanisms you will be all set to play in a way that might be a longer journey if you rely on stage.

Finally: Re focus on the goals you had in the first place. All the stuff above will be out of the way and you will be familiar in an overall way with the instrument


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





Friday, January 21, 2011

Music Unfolding - Sympathetic Strings

Here is a little demo of string resonance applied to the cello model of EigenD

Music Unfolding Sympathetic strings behind a cello model by Mike Milton

The first bit is the dry cello model, the second has the effect, and the last bit is the effect minus the cello itself.

The 'strings' were tuned As shown in the scree cap below. One can also set the string frequency as notes (eg: c1) which are then converted to Hz. and, indeed this is how the setting below were derived (CGDA)


If you are having an issue with the player above,  view it directly at SoundCloud