Not logged in   Log in   Register

Roland Clan Forums > Fantom-S and Fantom-X > Fantom X Live Commander - LIVE sound switching software for Windows Netbooks - NEW VERSION.0.7.5 available for download

pages: 1 2 3
Arjan (705)


12:02 GMT
12 November 2009
Another way to turn on/off internal parts is to disable MIDI Local in the Fantom and soft-thru the note/on events from FXLC back into the Fantom, filtering out those that are meant for parts that are disabled. Again this increasees the dependency on FXLC to handle everything in realtime with minimum latency.

Oh and I already have an idea for version 3.0: Let FXLC take command of patch to part assignment completely and use either parts 1-8 or 9-16. While playing 1-8 you can tell FXLC to switch to the next set of sounds. FXLC will then recall the required patches in part 9-16 and switch to them, leaving 1-8 to sound out. Next time it recalls the requires patches in 1-8 and lets 9-16 sound out.

This is essentially what the Fantom G does. Only limitation in the X is that it has only 3 PFX and you can't make any changes to the MFX either when switching.
  → Reply 
Arjan (705)


19:12 GMT
12 November 2009
A little update. I have implemented the following version:


Part....Sound source
1.........[internal/external].........[ ]....[ ].....[ ]
2.........[internal/external].........[ ]....[ ].....[ ]
3.........[internal/external].........[ ]....[ ].....[ ]

If sound source is set to internal the [ ] checks control Rx.
If sound source is set to external the [ ] checks control KBD


Works like a charm for internal sounds but it's not quite perfect for external sounds. It works and nothing cuts off, but if you hold a chord with the sustain pedal, turn off the KBD switch through SysEx and then let go of the sustain pedal it keeps sounding. The Fantom is clever enough to transmit note off messages to external MIDI modules even if the KBD switch is off but it doesn't do the same thing for the hold pedal off message. A shame because the Rx switch does seem to have that intelligence for internal parts.

It looks like the only way to properly control external modules without any side effects is to set the key range to C0-C0 and restore the key range when the sound must be enabled again. By keeping the KBD switch on the sustain on/off and note off messages are still transmitted. I'm gonna try this and see how it works.

L8r,
Arjan


  → Reply 
RoyG (8)


21:11 GMT
12 November 2009
Hey Arjan.
Great work!

I don't know if it helps but:
When I use my fantom x6 as a controller for playing soft synth with my laptop, I use Lazyboy's template but instead of switching the RX on and off I turned all Kbrd & RX switches off and used sysex for changing only the midi channel nuber on part 1 on the external page of the part view.
So, each pad is triggering it's pattern that actually changes the midi transmit chanel and since my VST's are routed to different midi chanels on Ableton's Live I am able to switch my external sounds seemlessly using the pads with no sustain pedal problem at all.
Of course if I want layered VST's I can route them together on "Live".
(I use constant chanels for my favorite VST's - B4II is always midi chanel 4 for example etc.)



  → Reply 
Arjan (705)


22:15 GMT
12 November 2009
Roy,

If I understand your method correctly you are playing all external 'modules' through Part 1 so that means you can only play one external MIDI channel at a time?

With your system I'd think that at least for Part 1 the state of the KBD switch doesn't actually matter since it's on by default, assuming Part 1 is the currently highlighted part on the Fantom, right?

Do you only play the soft synths or also Fantom internal parts?

In principle if that method works as you say I could mute external 'parts' by changing their MIDI channel to one that's not used. It surprised me that this method would not suffer from the sustain pedal issue. It would be easier to implement than the keyrange trick.


  → Reply 
RoyG (8)


22:56 GMT
12 November 2009
That is corret. I only play through part 1 and it's KBD switch state dosen't really matter, but that's only my "External only" default rehersal setup or the one I use on stage when I only need VST's. This way I only need one song load when I turn the fantom on and I'm ready to go and as I said, if I need more than one midi channel (plugin) receiving midi from the Fantom I can always wire things differently in "Live".
When I want to create complex performances combinig internal and external sounds, layering & splitting them and switching between them throughout the song progress, I can use the other parts of the performance (with midi channels that are not in use by any external plugin) for internal sounds and then use the pads to switch their RX on & off at the same time while I'm changing the external part's midi chanel - creating a seemless sound switch between song part with one press of a button.
I can either customize the template patterns to fit into each specific song's needs (depending on how complex it is in terms of parts and sounds) or use a default template which divides the performance into constant 8 external (KBD&RX off, 8 reserved midi chanels) / 8 internal (KBD on RX off) parts and uses the pads as "song-part-switches".


  → Reply 
Arjan (705)


07:35 GMT
13 November 2009
Roy,

Thanks for clarifying. I've decided that for now I will simply mute external keyboard parts by filtering out note on messages from the soft-midi-thru function since that is how I currently use the FXLC anyway.

I think that I will implement two modes: inline, where it is the first device connected to the Fantom and all MIDI events are soft-midi-thru'd to a second MIDI out, and and end-of-line where it is the last device in a chain connected to the Fantom MIDI out.

With inline it works as described above (filter out note on messages from midi-soft-thru) and with end-of-line I could use either your trick or change the keyboard range. They are actually equally 'difficult' to implement because FXLC will have to intelligently capture the actual normal non-muted keyboard range and restore it to normal when the part is turned on.

On to some more coding (while I should be preparing to tonight's rehearsal but that's futile now without this working).
  → Reply 
dboulden (1139)


13:04 GMT
16 November 2009
Hi Arjan,

it's been a while since I've taken an active part in the forum, but I saw this thread highlighted in one of Art's mailouts.

I've been intending to embark on a similar project, but not strictly based upon the Fantom. Can I ask, did you use a library for the MIDI communication or are you dealing with the Windows API direct to implement the MIDI messages? I've been looking for a MIDI communication API library to use for my own project, but am yet to find something suitable.

Dave :o)
  → Reply 
Arjan (705)


10:01 GMT
17 November 2009
A little update on this project:

image

Sorry for the crappy screenshot this time, only had MS Paint available on this system.

Still lots of little things to do but I'm now actually using this thing and available programming time is measured in minutes instead of hours.

The software will now automatically scan all MIDI ports to see if the Fantom is connected. Currently active parts are highlighted in green and muted parts are shown in red. Lots of small improvements. Fully implemented soft-MIDI-thru with muting of disabled parts (only note off and pedal off will be forwarded it the parts is disabled).

If you set a row to int the external part is also disabled as if it were muted. If youset it to ext the internal part will automatically be disabled. There's an option under Options to disable this feature, ie if you set a part to 'int' the 'ext' will be left untouched.

If you set a row to ext you can manually enter a name.

Still a bit of work to do but I think I may be able to release a beta version later this week and source code soon after.

I have noticed from my own use that being able to change the keyrange and pitch for each stage could be a handy feature so maybe I will implement that too.

  → Reply 
Arjan (705)


11:08 GMT
17 November 2009
Dave,

did you use a library for the MIDI communication or are you dealing with the Windows API direct to implement the MIDI messages? I've been looking for a MIDI communication API library to use for my own project, but am yet to find something suitable.

I used this:

http://www.codeproject.com/KB/audio-video/MIDIToolkit.aspx

It's a very well designed C# library imho and very easy to use. There's also a C++ version but it uses MFC which I despise:

http://www.codeproject.com/KB/audio-video/midiwrapper.a...

I'm not really sure how deeply embedded MFC is in this library, it might be possible to rip it out. If you end up doing that by all means hand me a copy :) Had this been a commercial or strictly for private use only project I would have preferred raw C++/Win32 code and libraries.

For this project I wanted to go with the C# version anyway because I wanted to have this as accessible as possible as I plan to release the source code so that others can customize and enhance it as they see fit. I still have lots of ideas to improve this thing but I won't be able to do it all for sheer lack of time.

The only downside to this C# library is that not all source code is included but I'm assuming that these .net libraries will remain compatible for years to come.

  → Reply 
RoyG (8)


07:10 GMT
18 November 2009
Looking great Arjan!

Can't wait to try this out...
  → Reply 
Arjan (705)


13:51 GMT
21 November 2009
Can't wait to try this out...

You'll have to wait just a liiiittle longer. Used it yesterday for the first time during rehearsal and had a blast with it. Switching sounds on the fly has never been easier imho.

I actually butchered a 10 Euro notebook style mini mouse (Microsoft Compact Optical MNouse 500 v 2.0) this week and turned it into a Frankenmouse so that I can use pedals to switch to the next and previous set of active sounds in the Performance. Basically all I did was remove the micro switches that are used for the mouse buttons and wired them to jack sockets and put it in a little box. Worked absolutely great. Since all my pedals are of the normally-on type I'm letting FXLC respond to the UP event for the right and middle button.

It would be possible to invert the signal with just one transistor per pedal but it doesn't seem worth the effort. I should probably provide a 'polarity' switch in FXLC for those who have normally-off pedals.

I'm ironing out some last minor issues but it won't be long now before I upload a first alpha version.
  → Reply 
Arjan (705)


13:53 GMT
21 November 2009
Dave,

Earlier I wrote

The only downside to this C# library is that not all source code is included but I'm assuming that these .net libraries will remain compatible for years to come.

but I may have been wrong about that. It appears that full source code for the .net libraries used are available from http://www.lesliesanford.com/Programming/SourceFiles.shtml

L8r,
Arjan

  → Reply 
Arjan (705)


16:40 GMT
21 November 2009
I'm getting there. Current version looks like this:

image

I've fixed some problems I was having with patch names not always updating when selecting a new Performance, user/card/preset select combo now also syncs and can be used to switch banks on the Fantom. I've added a keyboard interface, you can change the KBD switch where the yellow and cyan bar cross by pressing <Enter>. You can use the arrow keys to select row/column. Perhaps the cyan bar should be hidden in LIVE play mode or it could be toggled on and off separately through the menu. Or maybe a more subtle color would make it look less cluttered.

Parts that are not used at all are now left uncolored so you can quickly see which parts in use.

I'll be using/testing it some more tomorrow and if I'm sufficiently satisfied I may upload a first version for those who can't wait. There's still lots of room for improvement but it's quite useful in its current state imho.

Control of external modules is currently only possible through the soft-midi-thru function so you'd need a MIDI interface with two MIDI outputs to do that with this version. Actually if you would turn LOCAL off on the Fantom you could enable soft-midi-thru to the Fantom MIDI input and then take the output from the Fantom MIDI THRU to your modules. I'm not sure how big of a problem latency is yet.

To other MIDI/SysEx programmers out there: have any of you noticed that the Fantom X doesn't seem to care at all about the Roland SysEx checksum value?

L8r,
Arjan

  → Reply 
da-man (1153)


20:51 GMT
23 November 2009
srry if i sound like a noob here.

I have set up my x8 with seamless live sound switching using RPS controlling the RX channels on/off sometimes as groups and one key can turn all RX channels off

Can you do this kind of stuff your netbook program?
  → Reply 
Arjan (705)


22:46 GMT
23 November 2009
da-man,

Can you do this kind of stuff your netbook program?

In essence that's exactly what it does. It's no different than lazeeboy's SysEx switching (it uses the exact same SysEx sequences for the Fantom's internal parts). It's just a lot easier to setup a new song with this software which allows you to do much more elaborate things.

To all who would like to try this: I've made some good progress and I have a version 0.5 about ready. Just need to create an installer (it's .Net so unfortunately a single .exe is not really how it works).

Actually this software can also control external modules. At current this is done by relaying the incoming MIDI input from the Fantom to a secondary MIDI output on the PC but filtering out note on eventsfor the external parts that are currently turned off according to the table's current column.

I must say that at present the performance of the soft midi thru function is not impressive. I'm not yet sure whether this is due to .NET, the .NET library I'm currently using, the marshalling between native Win32 API and the .Net framework or just because it's Window, although I'm sure performance can be improved. For the actual switching of the Fantom's internal sounds it's definitely fast enough.

As mentioned before I could use another method to control external parts but the advantage of relaying MIDI events to a secondary port is that you can do even more, like transposing external parts, enabling/disabling Hold pedal for an external part and much more.

I have downloaded the actual full source for the MIDI .Net library and am investigating where the latency is coming from. Depending on what I find I may try to optimize the library or perhaps I'll just write a low-level soft-midi-thru function in raw C++/Win32 API.

Using the actual source of the library will also allow me to codesign all .Net assemblies and the program itself so you won't get nasty UAC messages if you're on Vista or WIndows 7.

I've added functions to copy columns and rows with full undo capability which can come in quite handy I think.

More later this week.


  → Reply 
pages: 1 2 3
jump to:
Page generated in 0.543 s