Jump to content

Way to override MIDI noteOn between tracks/channels?


heydon

Recommended Posts

I'm new here, so hi!

 

I have been working on a polymetric drum machine for a while, a free web-based version of which is here: https://heydon.github.io/beadz-drum-machine/.

 

Because it lets you loop individual tracks at different rates (hence polymetric) it has a feature where you can block out / cancel / override one track's sound with another's. For example, I can make sure that, where a snare and kick sound coincide, the snare overrides / mutes the kick. Can make it sound much like a real, improvising drummer this way.

 

I wanted to recrete this feature in Logic Pro X, but am having trouble. I thought noise/midi gates would help, but they are for blocking sound, not overriding events. I also looked into midi scripting, since I can write JavaScript. This doesn't seem to let me control one track's/channel's events based on anothers. I THINK what I need is something that can tell where 2 midi noteOns across two tracks/channels coincide and remove one track's from the queue (if there is such a concept!)

 

Thanks for the help, and if there's interest I can post a link to a free version of the desktop/macOS version of that drum machine. It has a lot more features.

 

Thanks again, cheers.

Link to comment
Share on other sites

Thank you for the tip, @Atlas007. Do you mean the step editor or the step sequencer? I did wonder if I could do this with the step sequencer, but I'm not familiar at all. If you have any more detail/context that would be amazing. Thanks again.
Link to comment
Share on other sites

Do you mean the step editor or the step sequencer?

I did wonder if I could do this with the step sequencer, but I'm not familiar at all.

There is apparently no such feature per say in the Step Sequencer. I was referring to the Step Editor's high hat group feature.

OTOH, I think that the Sampler has a similar feature (see Exclusive Class in user's manual p.421), which also acts the way you describe.

 

...

I also looked into midi scripting, since I can write JavaScript. This doesn't seem to let me control one track's/channel's events based on anothers.

...

If you wish to actuate many virtual instrument plugins (from different tracks) at once with a single Scripter MIDI Fx, you could use an IAC loop. (Providing that you enable same in the Audio MIDI Setup app).

Use a software instrument channelstrip (onto which you have instantiated your Scripter MIDI FX).

On that same channelstrip, instantiate an External MIDI instrument, and set the latter's MIDI Destination to an IAC bus.

In the Environment, connect the object Physical Input's IAC's prong to the channelstrip's objects you wish to be actuated by your Scripter MIDI Fx. You will probably need to use a Monitor object to mult the connectors to the various channelstrip objects.

 

Using an IAC loop isn't mandatory if you don't need to record the Scripter MIDI Fx output.

Link to comment
Share on other sites

Sure! Really appreciate the "sound board" (sorry, bad pun).

 

So far, I have got the external instrument all set up, controlling two separate midi tracks.

 

When I play a note on the external instrument track, both tracks it's connected with sound out. Great start!

 

I _think_ everything is the same as in this video (which goes step by step over the approach you were suggesting):

." rel="external nofollow">https://www.youtube.com/watch?v=
.

 

BUT I can't seem to get MIDI effects/scripts (arpeggiator etc) to propogate to the controlled tracks from the external track as the video demonstrates.

 

Note sure where to go from there! Here's how things are starting to look:

 

yIxNofZ.png

Link to comment
Share on other sites

Where did you instantiate your MIDI Fx plugin?

It should be on the External Instrument channelstrip.

And that channelstrip must be fed with some notes for the arpegiator to actuate your (Ultrabeat) plugins.

Either that or the Scripter MIDI Fx must by itself emit the note events.

That works fine over here.

Although, over here, I established the connection from the IAC prong (instead of the Sum one).

And both of my destination virtual instruments channelstrips are into a summing stack.

Anyhow, I don't think that should make a significant difference.

OTOH, I notice that your Physical Input object only has two prong connectors (Sum and IAC bus). Don't you have any other MIDI devices/controllers connected? Did you create a new Physical Input object instead of using the one already located in the Click and Ports layer?

Link to comment
Share on other sites

You could just use a Voice Limiter set to polyphony 1 and either top or bottom note priority, like this:

243888192_Bildschirmfoto2020-07-31um17_38_52.png.257199ea1e81902637ad685a5baa3b25.png

or Exclusive Groups in the Sampler, like Atlas mentioned. All of these, as well as the Scripter approach will only work in playback, as you can't perform & record two MIDI notes at the exact same time, so you'd always have the attack phases of both quasi-simulteneous sounds.

Link to comment
Share on other sites

Okay, I think @fuzzfilth's approach is the closest so far to what I need. But I'm still not quite there yet.

 

I set something up to mimic the screenshot (thanks!) but with just two synths. This is what it looks like:

 

57isQdM.png

 

I think, despite being labeled "MIDI Instrument A" and "MIDI Instrument B" @fuzzfilth is using multi-instruments?

 

Anyway, I am now able to limit/block notes across different instruments. That is, in the following picture, the second note of the first instrument does not sound. Yay!

 

cTCQkfI.png

 

Trouble is, they map to the same synth (labeled "Basic") so have the same sound. If I switch to channel 2, the same effect happens, but with the "Chime" synth:

 

cMX50nQ.png

 

I guess this is because of the channel splitter, which seems to be working against me here? Because what I want to be able to do is use one synth to override another, so a Chime sound can override a Basic sound, or vice versa. In the following picture, there is no limiting/override. One synth just plays over the other as you'd expect under normal circumstances:

 

VQqIeEf.png

 

Makes sense, I guess (I dunno, I'm new :? ) because they're now considered the same instrument. Same thing happens with separate instruments and channels, though:

 

UFAs4vS.png

 

So, I'm probably missing something obvious (thanks for the patience) but is there not a way to do the limiting across different actual voices/synths?

Link to comment
Share on other sites

To be frank, if the requirements for this patch's abilities are ever expanding, I'd rather throw all required sounds into one instance of Sampler and use the Groups Exclusive feature there. This gives you 128 different sounds right off the bat which should suffice to emulate linear drum fills.
Link to comment
Share on other sites

@Atlas007 I have been using the scripter to emulate discrete features of Beadz, yeah! It already has a probability "gate" built in, and I wrote something to fluctuate the velocity the way I wanted to humanize it more.

 

The only thing I still can't work out is this "one instrument voice limiting another instrument" thing. I feel like it's nearly there, and I appreciate your and @fuzzfilth's help.

 

To be clear, @fuzzfilth, there has only ever been that one requirement, but maybe I haven't been articulating it well enough, because I'm not clear on the terminology. My bad! I don't think the sampler thing would work, because I want to create polymetric sequences and I'm not sure it would allow that. But I could be wrong!

Link to comment
Share on other sites

If you have 15 drum sounds, you could put them all into Sampler, set up your Exclusive Groups to restrict polyphony, and then feed that from as many tracks as you like. In Logic, many Tracks (with different loops) can feed one Channel (Instrument).

 

That's certainly 100 times easier than rigging up elaborate patches in the Environment and with IAC, both of which I usually won't fear to suggest as anyone round here will confirm.

Link to comment
Share on other sites

@fuzzfilth Okay! But I can't route any arbitrary MIDI track through the sampler, right? I could only use what the sampler allows (sampled sounds). This sounds like it would at least partially solve the problem though.

 

I don't mind using the environment if it solves the problem as originally posed. Is it possible to do what I was trying in viewtopic.php?f=1&t=150918&view=unread&sid=d2755eec1f39c010b081f7fffdcd7892#p790097? To just voice limit across any tracks/sounds? It seems like, if anyone would know here, it'd be you. It would be much more powerful this way, because I can just do it with any instrument.

Link to comment
Share on other sites

@fuzzfilth Okay! But I can't route any arbitrary MIDI track through the sampler, right? I could only use what the sampler allows (sampled sounds).

...

As fuzzfilth mentioned, yes you can route any MIDI track (and many ones) to the same (and single) Sampler plugin.

A Sampler is a MIDI driven plugin which will play sampled sounds. Any sampled sounds and many ones if need be. Samples that you can program to play them back as you wish. And one of the feature (Exclusive group) will restrict note to play only one at the time, as you wish, even if triggered to play at the same time.

Link to comment
Share on other sites

So, I've been sampling different drum sounds at different velocities from Drum Kit Designer i.e. saving them as audio and then importing them into (multi)Sampler to set up my exclusive groups. This works (thank you!) but is REALLY time consuming when I'm using a bunch of velocities and round robins. I suspect it is also more intensive CPU-wise than using the Drum Kit Designer directly.

 

What I really want is the ability to voice limit one instance of a Drum Kit Designer instrument, but feed it from two separate tracks, with separate regions. I've tried using the environment to connect two midi instruments to the Drum Kit Designer instrument via a Voice Limiter, but this doesn't work. I tried messing with channels, using multi-instruments, and a multi-timbre Drum Kit Designer instrument. But the limiting only ever seems to work for midi events in the same region, on the same track. I can't seem to make two instruments/tracks/regions share the same limiter for the same output instrument.

Link to comment
Share on other sites

Are you aware that tracks (the horizontal lanes in the main working area) and channelstrips (the vertical strips with fader/pan etc) are different entities (and potentially independent) from one another)? Meaning that you could easily (re-)assign two (or more) different tracks to feed a single (and same) channelstrip. Which channelstrip is instantiated with a single virtual instrument (i.e. DrumKit Designer) as you seem to be looking for...
Link to comment
Share on other sites

I was vaguely aware @Atlas007, yeah. Still learning. :?

 

What I tried just now was (a) to create a midi instrument in the environment window, and connect it to my drum kit channel strip via the voice limiter...

 

RVXPaYV.png

 

... and (b) use two instances of that midi instrument in the main window (they're mapped the same, and both should go via the voice limiter)...

 

fhHmgqQ.png

 

... but this doesn't work. The snares of the higher "Drums" track play at the same time as the kicks beneath them. Voice Limiter is set to voices:1 and priority:top.

 

Not sure why this doesn't do it?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...