SynthMaker

Midi Guitar - 6 Channel omni mode

Archive · 2007 15 old posts

From the original SynthMaker forum (2004–2014), with its members’ names and dates.

BobTheDog ·

Hi Guys,

I am looking at the demo and trying to work out if omni mode over multiple midi channels is supported or easily implemented.

Here is some background.

Midi guitars work best when useing omni mode. Each string sends midi data on a seperate midi channel. Pitchbend is very important as it is used for slides, pull offs, hammer ons etc.

So basically I need to be able to take input on 6 channels each with indipendent pitch bend info and have this converted into a poly signal.

Anyone any ideas?

Thanks for any help

Andy

oddson ·

See Dreamkeeper's post in this thread for an example of how to filter MIDI channels.

The MIDI coming out the right-hand-side will be events from the selected channel only.

BobTheDog ·

Hi,

Thanks for the info.

So I can split into 6 midi channels.

How would I then add pitchbend and create a poly signal?

Thanks for any help

Andy

oddson ·

I'm not sure if/how you can reassemble the data into a single poly-stream.

I'm not at my S|M machine right now, I'll have a look at it tonight.

oddson ·

@Bob - does the pitchbend data get sent on CC 1 (coarse) and CC 33 (fine)?

@Devs - can you just add multiple Poly streams (from six different MIDI2Poly components) together and they will become a usable poly stream?

stefan ·

Hm, I doubt it. Maybe you could write the six pitch bends into an array and extract the values from there using Float Array To Poly components. If you can work out how to create proper indices for each poly channel that is.

oddson ·

Thanks Stefan... I didn't think it would be that easy but I wanted to eliminate it as a solution before I tried anything too complex.

unkargherth ·

Mmmmm. Maybe manipulating thing in midi domain....

In short: filter out every midi channel, route it through a module that add de desired pictch bend IN MIDI MESSAGES. Then add up the six midi output into one MIDI to poly module

or i'm saying something stupid ?

BobTheDog ·

Hi Guys,

Thanks for your interest on this, it looks like it is not going to be straightforward!

Concerning pitchbend, I am not a midi expert but isn't pitchbend a 14 bit value seperate from CC messages.

I think it is a byte 0xEn where n is the midi channel followed by two bytes. Where the 14 bit value is the second byte shifted left 7 bits and ored with the first byte.

Cheers

Andy

BobTheDog ·

unkargherth wrote: Mmmmm. Maybe manipulating thing in midi domain....

In short: filter out every midi channel, route it through a module that add de desired pictch bend IN MIDI MESSAGES. Then add up the six midi output into one MIDI to poly module

or i'm saying something stupid ?

Hi,

This message apeared while I was posting my previous message.

This sounds exactly what I need, I have used this technique in Reaktor. Is it possible in SM?

Cheers

Andy

oddson ·

Pitch bend is not note specific, that's why the guitar controller uses 6 midi channels to give the disire result.

The question has definately peaked my interest. I'm still thinking about it.

oddson ·

oddson wrote: @Bob - does the pitchbend data get sent on CC 1 (coarse) and CC 33 (fine)?

Opps - i'm thinking of mod wheel... Pitchbend has it's own status byte so it's automatically two bytes* for data.

* well 7 bits for each of two bytes.

oddson ·

I've had a go at this but I have no idea if it works because I don't have the MIDI gear to test it out. guitarMidi.osm

Since each midi channel is monophonic (I assume) I figure I can use the pitch value as an ID within a code module and build a poly frequency stream by adding a pitch shift value and then converting to frequency.

stefan ·

Yes, each string is monophonic, but they overlap (a lot) in their pitch ranges. BUT.... As long as the guitarist doesn't play the same note on two strings (like an A on both the E string and on the A string), your method should work.

BobTheDog ·

Hi,

Thanks alot the patch, it is very good of you to help me out on this.

It works pretty well apart from playing the same note on two strings causes one of the notes to cut out.

I have tried to understand the patch but my abilitys in SM are not quite up to the required level

I think I understand the "MIDI guitar module" this seems to filter out the messages for a particular channel and output the pitch and pitchbend like : Pitch I = Midi note number Ptchbend f = ((pbend/8192) -1) * pitchbend range

So basically outputiing the pitchbend in semitones centered around 0 for no pitchbend.

Now to the code, here it gets a bit hazy in my mind I take it that the code sees if the note vale at p = each individual channels note and if so adds the bend value to shift. The output is then the P input plus the pitch shift, this leads to the problem when two midi notes P have the same value.

Am I anywhere near on this?

Cheers

Andy

Wrote something here? To have a post removed or your name hidden, write to [email protected].

Before your first post

A few rules keep this a friendly place. You agree to them once.

Shown next to what you post, here and in the app. It doesn’t have to be your real name: 3–24 lower-case letters, digits or _ (capitals become lower case, spaces become _).

    Then your post goes up straight away.

    Delete this reply?

    Open it in SynthMaker?

    It goes on the track you’re editing there, in place of that track’s sound, and into My sounds. Your other tracks stay as they are.

    Want to keep that track’s sound? Start a new song in SynthMaker first (Song › New song), then open this.

    Report this reply?

    Only the developer reads reports. The person isn’t told who reported them.

    What’s wrong with it?

    Block this person?

    You won’t see their posts and replies here any more. They aren’t told, and you can unblock them at any time.

    People you’ve blocked

    Their posts and replies are hidden from you. Unblock someone to see them again.

    The community rules

    A few rules keep this a friendly place. Everyone agrees to them once, before their first post.