Scale Octave Tuning

■概要

 この機能は、各12音階のMIDIデバイスのチューニングを設定します。。


■書式

リアルタイム・メッセージ (Rail Time Message)

RT_OctaveTuningB(INT iChannel, ARRAY iOffsetB(12));
RT_OctaveTuningW(INT iChannel, ARRAY iOffsetW(12));

[備考]
※この命令は、コンパイラ内部で以下のMMLに変換されます。
SysEx = $F0, MakerID_RealTime,idDevice, RT_Tuning, RT_Tuning_ScaleOctaveTuning1Byte, Int iChannel[3Byte], ARRAY iOffsetB(12)[12Byte], $F7
SysEx = $F0, MakerID_RealTime,idDevice, RT_Tuning, RT_Tuning_ScaleOctaveTuning2Byte, Int iChannel[3Byte], ARRAY iOffsetW(12)[24Byte], $F7


ノン・リアルタイム・メッセージ (Non Rail Time Message)

NRT_OctaveTuningB(INT iChannel, ARRAY iOffsetB(12));
NRT_OctaveTuningW(INT iChannel, ARRAY iOffsetW(12));

[備考]
※この命令は、コンパイラ内部で以下のMMLに変換されます。
SysEx = $F0, MakerID_NonRealTime,idDevice, NRT_Tuning, NRT_Tuning_ScaleOctaveTuning1Byte, Int iChannel[3Byte], ARRAY iOffsetB(12)[12Byte], $F7
SysEx = $F0, MakerID_NonRealTime,idDevice, NRT_Tuning, NRT_Tuning_ScaleOctaveTuning2Byte, Int iChannel[3Byte], ARRAY iOffsetW(12)[24Byte], $F7



■引数

引数名 初期値 範囲 機能
INT iChannel - $0000〜$FFFF 適用するMIDI Channelを指定します。
Bit0 … MIDI Channel 1
Bit1 … MIDI Channel 2

Bit15 … MIDI Channel 16
ARRAY iOffsetB(12) 64×12 0〜127 スケール・オクターブ・チューニング 1Byteフォーマット用の引数です。
(リアルタイム、ノン・リアルタイム共にフォーマットは同じです。)
ド(C)〜シ(B)の12音のチューニング量を指定します。
iOffsetB − 64 ) [cent]
0  : -64 [cent]
64 :  0 [cent](=平均律)
127 : +63 [cent]
ARRAY iOffsetW(12) 8192×12 0〜16383 スケール・オクターブ・チューニング 2Byteフォーマット用の引数です
(リアルタイム、ノン・リアルタイム共にフォーマットは同じです。)
ド(C)〜シ(B)の12音のチューニング量を指定します。
iOffsetW − 8192 ) × 100 ÷ 8192 [cent]
0   : -100.0 [cent]
8192 :   0.0 [cent](=平均律)
16383 : + 99.9 [cent]
INT idDevice $7F $00 〜 $7F MIDIデバイスのDeviceIDを指定します。
MIDI規格では、Bloadcastである$7Fを推奨しています。


■返り値

無し


■説明

 各チャンネルの各12個の音階について、チューニングを行います。
INT iChannelで適用するチャンネルをビットにて指定し、 Array iOffsetB(12)若しくはArray iOffsetW(12)の配列変数にてド(C)〜シ(B)までのチューニングを指定します。
リアルタイム(Real Time)のメッセージは、MIDIデバイスがノートが発音中であっても直ちに設定が適用されます。
ノン・リアルタイム(Non Real Time)は演奏前のセットアップ用のメッセージで、MIDIデバイスがノートを発音中であった場合には MIDIデバイスはこのメッセージを無視する事が推奨されています。

GM System Level.2(GM2)に対応したMIDI楽器は、ノン・リアルタイム、1ByteフォーマットのNRT_OctaveTuningB()関数が標準で使用可能です。
リアルタイムのRT_OctaveTuningB()関数については、GM System Level.2(GM2)では『推奨』となっており、実装は義務付けられておりません。
これはメッセージの受信後に、チューニングを即座に適用させるのは、高度な演算能力が必要な為です。
又、2ByteフォーマットのRT_OctaveTuningW()及びNRT_OctaveTuningW()関数についても、GM System Level.2(GM2)では実装を義務付けられておりません。


■使用例

List.1

//---------------------------------------------------------------
//	純正率(ハ長調) (A=440Hz)	音楽通論(著:近森一重) Version
MasterTuning(0);		//	A=440Hz	のチューニング
//						c  c+ d  d+ e  f   f+ g  g+ a  a+ b
NRT_OctaveTuningB($FFFF,80,50,62,74,66,78,48,82,52,64,76,80);

TR(1)	r1	c4	d4	e4	f4	g4	a4	b4>	c4<

//
//	試してみたところ、ハ長調でしか使い物にならない模様。
//	ハ長調以外で使う場合は、ローテートする。
//	転調する曲には不向き。
//


//---------------------------------------------------------------
//	純正率(ハ長調) (C=平均率)	Roland Manual Version
MasterTuning(1147);		//	A=440Hzに補正する。(↓でaが-14なので。)
//						c  c+ d  d+ e  f   f+ g  g+ a  a+ b
NRT_OctaveTuningB($FFFF,64,56,68,80,50,62,54,66,78,50,78,52);

TR(1)	r1	c4	d4	e4	f4	g4	a4	b4>	c4<

//
//	これも、ハ長調用。
//	ハ長調以外で使う場合は、ローテートする。
//	転調する曲には不向き。
//

//------------------------------------------------------------------------------
//ヴェルクマイスター第1技法第3番(for C major)
MasterTuning(0);		//	A=440Hz
//						c  c+ d  d+ e  f  f+ g  g+ a  a+ b
NRT_OctaveTuningB($FFFF,76,66,68,70,66,74,64,72,68,64,72,68)

TR(1)	r1	c4	d4	e4	f4	g4	a4	b4>	c4<

//
//	ハ長調用。転調にもある程度耐えられる。
//	(転調を考慮して作られた調律)
//	ハ長調以外が基本の調律となる場合は、ローテートする。
//

//---------------------------------------------------------------
//	平均率(A=440Hz)
MasterTuning(0);		//	A=440Hz	のチューニング
NRT_OctaveTuningB($FFFF,64,64,64,64,64,64,64,64,64,64,64,64);

TR(1)	r1	c4	d4	e4	f4	g4	a4	b4>	c4<

//
//	妥協の産物。(MIDIのデフォルトはこの調律)
//	どの調でも使えるが、響きは悪くなる。
//	ピアノは、音質が向上したため、平均率の調律でもそれなりの響きが得られるようになった。
//


■関連項目