Octave up -

I’m having great difficulty following the YTube tutorial on translating incoming midi notes up one octave. Seeing that this is probably a common ask, I was wondering if there is a saved file for this that I could download and import into MT and use as a vst. Many thanks.

Hi,

The tutorial I did was for a 7 note transpose, not a full octave, however with the change of one value in each of the translators of the attached file from 7 to 12 it should work for you.

I'm assuming you are referring to this tutorial:

https://youtu.be/KMOr4-VeAO0

Steve Caldwell

Bome Q and A Moderator and

Independent Bome Consultant/Specialist

bome@sniz.biz

 


Attachments:
1589119011516_Note-Transpose-2017-08-01.bmtp

Steve,
I am confused. Using your bmtp file here is no output unless I set up a MIDI through route; however, this route does not perform translation, so I hear the original note, unchanged. Would you please clarify what the purpose of the MIDI through is for? Seems to me that it might be useful for verifying that the devices are working on the desired channels. Perhaps I misunderstand, but if the translation successfully converts incoming MIDI notes to transposed MIDI notes, there should be no need for a MIDI through, is that correct?

I am using Bome MIDI Translator Pro v1.9.0 build 1022

Thanks,
Mike

Hi Mike ( @mslinn ) ,

Welcome to the Bome Forum!

You probably did not set up your alias and have different MIDI ports open than the alias on your input and output.

I n the main view, I am using the aliases and they can be assigned to any attached device. My device sends on MIDI CH 1 which is what the translators are set up to handle. You can assign your aliases using the MIDI menu, then “Edit Project Port Aliases”.

Since I do not have any MIDI thru paths set and the aliases handle all MIDI CH1 translations, nothing will get through except notes on MIDI CH1 and they are handled by the translators. Maybe your keyboard is sending notes on a different MIDI channel?

If I had a MIDI thru path set, then, all other MIDI information would pass through untouched.

The way it works is this.

No MIDI Thru paths set up.

Only translators manage the MIDI messages and nothing else gets through.

MIDI Thru path set up

Everything gets passed through untouched except

  1. Where a translator handles it with output “Swallow” set.
  2. Where a translator blocks it (outgoing action is none)
  3. Where a translator modifies it.
    If Swallow is set in the translators(s) then only the modified translation gets through
    If Swallow is not set in the translator(s), then both the translator and the original MIDI message will
    get through.

If you set up a MIDI through path and then enable and disable the preset, you can monitor the output in the log window to see what is happening.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Steve,

Thanks for a super helpful and very quick response. I did not realize that the MIDI through had the all-important exception. Did not notice that in the voluminous documentation.

Aliases were not used in your original video, but the concept in intuitive. Seems that aliases are displayed in italics.

The MIDI events from my HPD15 drum are all shown in the event list, so I know where they are from and can see and hear them when I enable a MIDI through route. The only remaining mystery is why those notes are not transposed by the translator.

Thanks,
Mike

I’d have to look at your log, however my guess is your drum pads probably send on MIDI channel 10 instead of MIDI Channel 1

If the first byte of a 3 byte message looks is 90 hex then it sending on MIDI Channel 1. If it is 99 hex then it is sending on MIDI channel 10. The log file MIDI out always shows the hexadecimal representation.

You could change your translators input triggers from MIDI CH1 to any MIDI CH set to pp and then the output to Note On (or off) MIDI Channel pp, then it would work for all MIDI channels.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Steve,

Channels
You are right, drums are on the usual channel 10, but the translator was only looking at channel 1. Once I changed the translator input and output to channel 10, I noticed that the translation log looked appropriate, except to for an extra note on and off for the untranslated notes. This is with “Capture MIDI” enabled:

1: IN   0.0  Note On on ch. 10 with any note set 'pp' to note=60 with any velocity and 'qq' to velocity=27
2: RULE 0.0:1 expression: (rr=pp+7) = 67
3: OUT  0.0  Note On on ch. 10 with note:rr=67 and velocity:qq=27
4: IN   0.1  Note Off on ch. 10 with any note set 'pp' to note=60 with any velocity and 'qq' to velocity=0
5: RULE 0.1:1 expression: (rr=pp+7) = 67
6: OUT  0.1  Note Off on ch. 10 with note:rr=67 and velocity:qq=0

Seems to me that if the incoming notes are getting swallowed, that they should not be sent to output. Instead, I see both the original note and the translated note are sent to output.

When “Capture MIDI” is disabled, I see essentially the same thing:

1: IN   0.0  Note On on ch. 10 with any note set 'pp' to note=60 with any velocity and 'qq' to velocity=17
2: RULE 0.0:1 expression: (rr=pp+7) = 67
3: OUT  0.0  Note On on ch. 10 with note:rr=67 and velocity:qq=17
4: IN   0.1  Note Off on ch. 10 with any note set 'pp' to note=60 with any velocity and 'qq' to velocity=0
5: RULE 0.1:1 expression: (rr=pp+7) = 67
6: OUT  0.1  Note Off on ch. 10 with note:rr=67 and velocity:qq=0

I am unclear what “Capture MIDI” does, so I do not know if it is relevant to the problem at hand or not. The manual did not make that clear for me.

MIDI Output and Through
It seems to me that most projects that have one Note On and one Note Off translator would want MIDI OUTPUT to be set to Bome MIDI Translator 1 Virtual Out.

Also, would it not be extremely common to map the MIDI Router for the My Input alias to the My Output alias? Why not make this the default route?

Multiple Mappings
The Roland HPD-15 vdrum has 11 pads and 2 motion sensors. All 13 of them need to be translated/mapped to other values. The mapping is not linear, for example incoming note 60 might map to outgoing note 35, while incoming note 61 might map to outgoing note 42. Would you say that the best way to do this would be to write rules like the following?

// Left slider
if pp==56 then rr=96
if pp==59 then rr=97

// C3 (Bottom left pad)
if pp==60 then rr=35

// C#3
if pp==61 then rr=42

// D3
if pp==62 then rr=99

// D#3
if pp==63 then rr=35

// E3
if pp==64 then rr=42

// F3
if pp==65 then rr=99

// F#3
if pp==66 then rr=35

// G3
if pp==67 then rr=42

// G#3
if pp==68 then rr=99

// A4
if pp==69 then rr=35

// A#4
if pp==70 then rr=42

// B4
if pp==71 then rr=99

// C4
if pp==72 then rr=35

// C#4
if pp==73 then rr=42

// D4 (Bottom right pad)
if pp==74 then rr=99

// Right slider
if pp==75 then rr=98
if pp==78 then rr=99

If so, is there a way for the Note On rules to be automatically reflected in the Note Off rules, instead of maintaining 2 identical sets of rules?

Suggestion
It would be much nicer to be able to write a comment following a rule, like this:

if pp==72 then rr=35  // C4
if pp==73 then rr=42  // C#4
if pp==74 then rr=99  // D4 (Bottom right pad)

Thanks again,
Mike

Capture MIDI transfers the exact MIDI event when you click on it to the incoming trigger including the note number. If you want it any note number you need to after capture change the incoming trigger from note 60 to any note set to pp.

Typically you send output to an alias in the project. That way later if you want to change where the output goes, you simply re-assign the alias to a different output port rather than go through and modify dozens or hundreds of translators.

In my larger projects, I typically do not set up a MIDI thru path yet have everything handled by translators. I only use MIDI thru on smaller projects. This is because anything that doesn’t have a translator will get through and you might be surprised by an outgoing MIDI message you didn’t intend to go through. In this case you would have to write a blocking translator which I don’t like to do. This is a matter of user preference, however. As a general rule if I want more than 90% to go through untranslated, I use MIDI thru, otherwise I just use translators to handle each time of MIDI message and direct it to the desired output ports. Also at the preset or translator level you can define different input and output ports (or better still, alias) that might be different than the project level defaults.

This is how I would do it because if I need to change things, for me it is easer to copy and paste into a text editor on 1 translator. However some prefer to use different translators for every possible incoming note (or MIDI message).

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Steve,

I do not understand that sentence. As you can see, the log shows both the original note and the translated note are sent to output. However, I only hear the translated note. Is the log correct? If so, how do I prevent the original note from being sent to output?

Another suggestion: a lookup table for translations, referenced from both Note On and Note Off. That would reduce the impact of having many copied rules.

Thanks,

Mike

Turn on both MIDI OUT and Outgoing in the log.

MIDI Out will show both messages send by translators and messages by the MIDI thru path.
Outgoing will show only messages sent by a translator.

I suspect your translator is handing and swallowing the original messages but since I cannot see the MIDI OUT message, something else is going out the MIDI thru path. If you post your project file I can dig deeper.

Also if you have conditions on the MIDI message on note numbers, only the note numbers with those conditions, will be handled by the translator (and swallowed) anything outside of those conditions will use the MIDI thru path. Swallow only work if the translator is executed so anything outside of the conditions will not be handled by that translator.

This is why in general, I don’t like to use MIDI thru paths as I often get this surprise. Rather I do everything by translators and nothing will ever sneak through that I don’t want.

If you want to block it, set up translators for note on and note off with any value and output of none. And put those translators after the existing ones.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz