New Tuning Method: Difference between revisions

Wikispaces>TallKite
**Imported revision 453907436 - Original comment: **
Wikispaces>TallKite
**Imported revision 453957450 - Original comment: **
Line 1: Line 1:
<h2>IMPORTED REVISION FROM WIKISPACES</h2>
<h2>IMPORTED REVISION FROM WIKISPACES</h2>
This is an imported revision from Wikispaces. The revision metadata is included below for reference:<br>
This is an imported revision from Wikispaces. The revision metadata is included below for reference:<br>
: This revision was by author [[User:TallKite|TallKite]] and made on <tt>2013-09-24 21:21:58 UTC</tt>.<br>
: This revision was by author [[User:TallKite|TallKite]] and made on <tt>2013-09-25 01:50:44 UTC</tt>.<br>
: The original revision id was <tt>453907436</tt>.<br>
: The original revision id was <tt>453957450</tt>.<br>
: The revision comment was: <tt></tt><br>
: The revision comment was: <tt></tt><br>
The revision contents are below, presented both in the original Wikispaces Wikitext format, and in HTML exactly as Wikispaces rendered it.<br>
The revision contents are below, presented both in the original Wikispaces Wikitext format, and in HTML exactly as Wikispaces rendered it.<br>
Line 13: Line 13:
* Abelton Live filters out sysexes from the midi stream and keeps them from any VST it hosts.
* Abelton Live filters out sysexes from the midi stream and keeps them from any VST it hosts.
* FL Studio also does not allow VST plugins it hosts to receive sysex data. (see footnote)
* FL Studio also does not allow VST plugins it hosts to receive sysex data. (see footnote)
* Studio One doesn't allow recording or playback of sysexes
* Studio One doesn't allow recording or playback of sysexes.
* Kontakt does not provide sysex support in its scripting language.
* Kontakt does not provide sysex support in its scripting language.
* CSoundAV (CSound in real time) can't receive sysexes.
* CSoundAV (CSound in real time) can't receive sysexes.
Line 30: Line 30:
**__Design__:**
**__Design__:**


There are 3 parts to a tuning message: the input note, the output note, and the pitch bend. The input note is a midi note number which specifies a physical **__key__** on the controller. The output note is a midi note number which specifies a __**pitch**__ in the standard A-440 12-ET tuning. The pitch bend, which is the exact same format as the 2 data bytes of a standard midi pitch bend message, specifies how much to bend the output pitch. Upon receiving the input note, the synth produces this frequency:
There are 3 parts to a tuning message: the input note, the output note, and the pitch bend. The input note is a midi note number which specifies a physical **__key__** on the controller. The output note is a midi note number which specifies a __**pitch**__ in the standard A-440 12-ET tuning. The pitch bend specifies how much to bend the output pitch. Upon receiving the input note, the synth produces this frequency:


frequency = 440 * 2 ^ [ (outputNote - 69) / 12 + (pitchBend / 8192 - 1) / 6 ]
frequency = 440 * 2 ^ [ (outputNote - 69) / 12 + (pitchBend / 8192 - 1) / 6 ]
Line 53: Line 53:
**__Implementation__:**
**__Implementation__:**


The new method uses keyswitches for the 5 highest keys, 123-127. If middle C is C4, these are notes D#9 to G9. These keyswitches are generated by software, not played by the musician. The velocity of the keyswitches is not actually a velocity, but 1 byte of tuning information. Keyswitch F#9's velocity is actually the input note, keyswitch F9's velocity is the output note, and keyswitches E9 and D#9's velocities are the pitch bend, in the exact same 2-byte format as the standard midi pitch bend message. This makes it easier for the synth developer or designer, because he has already written code that handles physical pitch bend wheel movement, and can just reuse it to handle tuning keyswitches.  
The new method uses keyswitches for the 5 highest keys, 123-127. If middle C is C4, these are notes D#9 to G9. These keyswitches are generated by software, not played by the musician. The velocity of the keyswitches is not actually a velocity, but 1 byte of tuning information. Keyswitch F#9's velocity is actually the input note, keyswitch F9's velocity is the output note, and keyswitches E9 and D#9's velocities are the pitch bend, in the exact same format as the 2 data bytes of the standard midi pitch bend message. This makes it easier for the synth developer or designer, because he has already written code that handles physical pitch bend wheel movement, and can just reuse it to handle tuning keyswitches.


Each keyswitch note-on needs to have a matching note-off, to avoid being misinterpreted and possibly blocked by the DAW or other environment. To this end, a zero-velocity note-on follows immediately. To bend note nn on channel c to note mm with bend of yyzz would take up to 4 note-on messages and 4 note-off messages. In hexadecimal the midi looks like this:
Each keyswitch note-on needs to have a matching note-off, to avoid being misinterpreted and possibly blocked by the DAW or other environment. To this end, a zero-velocity note-on follows immediately. To bend note nn on channel c to note mm with bend of yyzz would take up to 4 note-on messages and 4 note-off messages. In hexadecimal the midi looks like this:
Line 95: Line 95:
**__The future of MTS__:**
**__The future of MTS__:**


It is our hope that keyswitch tuning catches on and is implemented more widely than MTS has been. However MTS retuning is already supported by all the major retuners, and there are no plans to discontinue support.
It is our hope that keyswitch tuning catches on and is implemented more widely than MTS has been. However MTS retuning is already supported by all the major retuners, and there are no plans to discontinue support. The two methods will coexist for quite some time. Synths that already support MTS may want to add support for keyswitch tuning as well, in order to be tunable in sysex-unfriendly environments. If someone is using a retuner able to output both MTS sysexes and tuning keyswitches, and also using a synth able to receive both, it's advised to use only one method at a time, and to avoid mixing them.
Synths that already support MTS may want to add support for keyswitch tuning as well.


----
----
Line 111: Line 110:
Reflex: "They already can. But they can't receive them. And that's not planned."
Reflex: "They already can. But they can't receive them. And that's not planned."


----
----
----
----


Line 170: Line 171:
&lt;br /&gt;
&lt;br /&gt;
Sysexes have the disadvantage of being poorly supported in many environments:&lt;br /&gt;
Sysexes have the disadvantage of being poorly supported in many environments:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Abelton Live filters out sysexes from the midi stream and keeps them from any VST it hosts.&lt;/li&gt;&lt;li&gt;FL Studio also does not allow VST plugins it hosts to receive sysex data. (see footnote)&lt;/li&gt;&lt;li&gt;Studio One doesn't allow recording or playback of sysexes&lt;/li&gt;&lt;li&gt;Kontakt does not provide sysex support in its scripting language.&lt;/li&gt;&lt;li&gt;CSoundAV (CSound in real time) can't receive sysexes.&lt;/li&gt;&lt;li&gt;Jesusonic (Reaper's built-in programming language) can't receive sysexes.&lt;/li&gt;&lt;li&gt;SonicBirth (an AU maker) doesn't even mention sysexes in its manual.&lt;/li&gt;&lt;/ul&gt;This means that synths created with CSoundAV, Jesusonic or SonicBirth can't implement MTS. Any synth that does implement MTS won't do so if hosted in Abelton Live or FL Studio or Studio One. Also, Kontakt instruments can't be scripted to respond to MTS. For these reasons microtonalists have been considering alternatives to MTS sysexes.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Abelton Live filters out sysexes from the midi stream and keeps them from any VST it hosts.&lt;/li&gt;&lt;li&gt;FL Studio also does not allow VST plugins it hosts to receive sysex data. (see footnote)&lt;/li&gt;&lt;li&gt;Studio One doesn't allow recording or playback of sysexes.&lt;/li&gt;&lt;li&gt;Kontakt does not provide sysex support in its scripting language.&lt;/li&gt;&lt;li&gt;CSoundAV (CSound in real time) can't receive sysexes.&lt;/li&gt;&lt;li&gt;Jesusonic (Reaper's built-in programming language) can't receive sysexes.&lt;/li&gt;&lt;li&gt;SonicBirth (an AU maker) doesn't even mention sysexes in its manual.&lt;/li&gt;&lt;/ul&gt;This means that synths created with CSoundAV, Jesusonic or SonicBirth can't implement MTS. Any synth that does implement MTS won't do so if hosted in Abelton Live or FL Studio or Studio One. Also, Kontakt instruments can't be scripted to respond to MTS. For these reasons microtonalists have been considering alternatives to MTS sysexes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The powers that be will probably never change the midi spec to give us what we want, a non-sysex method for tuning individual notes. So we've decided to simply create a new unofficial microtuning method. The plan is to have the new method supported by all the major midi tuning software packages, aka &lt;u&gt;&lt;strong&gt;retuners&lt;/strong&gt;&lt;/u&gt;: Alt-tuner, Bounce, Custom Scale Editor, Fractal Tune Smithy, LMSO, Scala, etc.&lt;br /&gt;
The powers that be will probably never change the midi spec to give us what we want, a non-sysex method for tuning individual notes. So we've decided to simply create a new unofficial microtuning method. The plan is to have the new method supported by all the major midi tuning software packages, aka &lt;u&gt;&lt;strong&gt;retuners&lt;/strong&gt;&lt;/u&gt;: Alt-tuner, Bounce, Custom Scale Editor, Fractal Tune Smithy, LMSO, Scala, etc.&lt;br /&gt;
Line 182: Line 183:
&lt;strong&gt;&lt;u&gt;Design&lt;/u&gt;:&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;Design&lt;/u&gt;:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are 3 parts to a tuning message: the input note, the output note, and the pitch bend. The input note is a midi note number which specifies a physical &lt;strong&gt;&lt;u&gt;key&lt;/u&gt;&lt;/strong&gt; on the controller. The output note is a midi note number which specifies a &lt;u&gt;&lt;strong&gt;pitch&lt;/strong&gt;&lt;/u&gt; in the standard A-440 12-ET tuning. The pitch bend, which is the exact same format as the 2 data bytes of a standard midi pitch bend message, specifies how much to bend the output pitch. Upon receiving the input note, the synth produces this frequency:&lt;br /&gt;
There are 3 parts to a tuning message: the input note, the output note, and the pitch bend. The input note is a midi note number which specifies a physical &lt;strong&gt;&lt;u&gt;key&lt;/u&gt;&lt;/strong&gt; on the controller. The output note is a midi note number which specifies a &lt;u&gt;&lt;strong&gt;pitch&lt;/strong&gt;&lt;/u&gt; in the standard A-440 12-ET tuning. The pitch bend specifies how much to bend the output pitch. Upon receiving the input note, the synth produces this frequency:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
frequency = 440 * 2 ^ [ (outputNote - 69) / 12 + (pitchBend / 8192 - 1) / 6 ]&lt;br /&gt;
frequency = 440 * 2 ^ [ (outputNote - 69) / 12 + (pitchBend / 8192 - 1) / 6 ]&lt;br /&gt;
Line 202: Line 203:
&lt;strong&gt;&lt;u&gt;Implementation&lt;/u&gt;:&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;Implementation&lt;/u&gt;:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new method uses keyswitches for the 5 highest keys, 123-127. If middle C is C4, these are notes D#9 to G9. These keyswitches are generated by software, not played by the musician. The velocity of the keyswitches is not actually a velocity, but 1 byte of tuning information. Keyswitch F#9's velocity is actually the input note, keyswitch F9's velocity is the output note, and keyswitches E9 and D#9's velocities are the pitch bend, in the exact same 2-byte format as the standard midi pitch bend message. This makes it easier for the synth developer or designer, because he has already written code that handles physical pitch bend wheel movement, and can just reuse it to handle tuning keyswitches. &lt;br /&gt;
The new method uses keyswitches for the 5 highest keys, 123-127. If middle C is C4, these are notes D#9 to G9. These keyswitches are generated by software, not played by the musician. The velocity of the keyswitches is not actually a velocity, but 1 byte of tuning information. Keyswitch F#9's velocity is actually the input note, keyswitch F9's velocity is the output note, and keyswitches E9 and D#9's velocities are the pitch bend, in the exact same format as the 2 data bytes of the standard midi pitch bend message. This makes it easier for the synth developer or designer, because he has already written code that handles physical pitch bend wheel movement, and can just reuse it to handle tuning keyswitches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each keyswitch note-on needs to have a matching note-off, to avoid being misinterpreted and possibly blocked by the DAW or other environment. To this end, a zero-velocity note-on follows immediately. To bend note nn on channel c to note mm with bend of yyzz would take up to 4 note-on messages and 4 note-off messages. In hexadecimal the midi looks like this:&lt;br /&gt;
Each keyswitch note-on needs to have a matching note-off, to avoid being misinterpreted and possibly blocked by the DAW or other environment. To this end, a zero-velocity note-on follows immediately. To bend note nn on channel c to note mm with bend of yyzz would take up to 4 note-on messages and 4 note-off messages. In hexadecimal the midi looks like this:&lt;br /&gt;
Line 244: Line 245:
&lt;strong&gt;&lt;u&gt;The future of MTS&lt;/u&gt;:&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;The future of MTS&lt;/u&gt;:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is our hope that keyswitch tuning catches on and is implemented more widely than MTS has been. However MTS retuning is already supported by all the major retuners, and there are no plans to discontinue support.&lt;br /&gt;
It is our hope that keyswitch tuning catches on and is implemented more widely than MTS has been. However MTS retuning is already supported by all the major retuners, and there are no plans to discontinue support. The two methods will coexist for quite some time. Synths that already support MTS may want to add support for keyswitch tuning as well, in order to be tunable in sysex-unfriendly environments. If someone is using a retuner able to output both MTS sysexes and tuning keyswitches, and also using a synth able to receive both, it's advised to use only one method at a time, and to avoid mixing them.&lt;br /&gt;
Synths that already support MTS may want to add support for keyswitch tuning as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;
Footnote on FL Studio sysex compatibility.&lt;br /&gt;
Footnote on FL Studio sysex compatibility.&lt;br /&gt;
&lt;!-- ws:start:WikiTextUrlRule:176:http://forum.image-line.com/viewtopic.php?p=824112 --&gt;&lt;a class="wiki_link_ext" href="http://forum.image-line.com/viewtopic.php?p=824112" rel="nofollow"&gt;http://forum.image-line.com/viewtopic.php?p=824112&lt;/a&gt;&lt;!-- ws:end:WikiTextUrlRule:176 --&gt;&lt;br /&gt;
&lt;!-- ws:start:WikiTextUrlRule:177:http://forum.image-line.com/viewtopic.php?p=824112 --&gt;&lt;a class="wiki_link_ext" href="http://forum.image-line.com/viewtopic.php?p=824112" rel="nofollow"&gt;http://forum.image-line.com/viewtopic.php?p=824112&lt;/a&gt;&lt;!-- ws:end:WikiTextUrlRule:177 --&gt;&lt;br /&gt;
(official FL Studio forum, must register to view the full thread)&lt;br /&gt;
(official FL Studio forum, must register to view the full thread)&lt;br /&gt;
Excerpted from a July 2013 conversation with &amp;quot;Reflex&amp;quot;, a site admin:&lt;br /&gt;
Excerpted from a July 2013 conversation with &amp;quot;Reflex&amp;quot;, a site admin:&lt;br /&gt;
Line 260: Line 260:
Reflex: &amp;quot;They already can. But they can't receive them. And that's not planned.&amp;quot;&lt;br /&gt;
Reflex: &amp;quot;They already can. But they can't receive them. And that's not planned.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;hr /&gt;
&lt;hr /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;