Milord Club 
 Top  > 古今和歌集の部屋  > [音]  > Scalaに関するメモ

  ■  Scalaに関するメモ
    Scalaはスケール(音律)を扱う多機能なソフトです。ただ多機能すぎて難しい面もあるので、ここでは提示しているデータを扱う上で気になると思われる最低限の事柄に絞って書いておきます。正確な情報についてはScala付属のドキュメントやScalaのサイト(http://www.xs4all.nl/~huygensf/scala/)をお読みください。
   概念的な事柄のメモ      Scalaの使い方のメモ 
  スケール(.scl)とKeyboard Mapping(.kbm)の関係
    .sclにはスケールを構成する音の比率関係だけが記述されています。次の.sclは10cent刻みの例です。
! 12_120_10cent.scl
!

 12
!
 10.00000
 20.00000
 30.00000
 40.00000
 50.00000
 60.00000
 70.00000
 80.00000
 90.00000
 100.00000
 110.00000
 120.00000
    先頭に「!」のある行はコメントです。ここにある情報はスケールを構成する間隔の数(12)と個々の値です。0cent(比率でいうと1/1)は省略されています。階段で例えると0centが地上で、各段の高さが地上からの距離で表わされているようなものです。一段上がるとそこは10cent、もう一つ上がるとそこは20centというように。一段目と二段目の間隔は10centです。そのようにして十二段まで10cent刻みの階段があり、十二段まで行くと今度はそこを0centとして次の十二段が続きます。地下についても同じで地上を120centとして10centごと下がって行き、0centの段まで行くとまたそこを120centとして下って行きます。このように.sclで記述される世界には周波数もMIDIのノート番号もありません。

  また、この例のように等比間隔、つまり平均律だけを考えるならば、どの音を基準(0cent)としても同じなので話は比較的簡単なのですが、それ以外のケースも考えると基準となる周波数・MIDIノート番号の割り振りの情報の定義がないと困ります。それが.kbmファイルです。
次の.kbmファイルの例では基準(0cent)をノート番号81:440Hzとしています。
!
! Size of map:
12
! First MIDI note number to retune:
0
! Last MIDI note number to retune:
127
! Middle note where scale degree 0 is mapped to:
81
! Reference note for which frequency is given:
81
! Frequency to tune the above note to (floating point e.g. 440.0):
440.000000
! Scale degree to consider as formal octave:
12
! Mapping.
0
1
2
3
4
5
6
7
8
9
10
11
    これを見てわかることは、.kbmから.sclを直接ポイントしていないということです。その代わりに.sclで定義されている「12」を持っていて、それを0から11のdegree(度)として使っています。.kbmから見ればcentや比率などの具体的な値は関係ありません。それが何個で一つのサイクル(上記のコメントで言うformal octave)を構成しているかが大切です。また、この例ではノート番号81が0、82が1と順序よく並んでいますが、複数のノート番号に同じdegreeを割り当てることも可能です。つまり.sclと.kbmを合わせて使うことにより黒鍵と白鍵の音の割り当てを自由に行なうことができます。
  .scl/.kbmと.tunの関係
    .sclと.kbmがあるならば何故.tunが必要なのでしょうか。.scl/.kbmは自由度が高い形式ですが、音源側からするとMIDIノート番号への割り当てさえはっきりしていればよいわけで、ノート番号をメインに据えて一つのファイルで済ませているものが.tunであると思っています。.tunについてはAnaMarkというVSTiのサイト(http://www.mark-henning.de/)のDownLoadエリアに詳しいドキュメントがあります。今その内容を要約してみると次のようになります。
 
元々.tunはVAZ 1.5 Plusというソフト音源のもので、Windowsのiniファイルと似た形で[Tuning]セクションの下にnote 0 = 0のように書かれている。このVAZ 1.5 Plusタイプの.tunの特徴は、ノート番号は0から127まですべて明示的に指定しなければならず、cent値には整数しか指定できないこと。それに対し、AnaMark用に拡張された.tunでは[Tuning]セクションをdownward-compatibilityのために残しつつ、新たに[Exact Tuning]セクションを持っている。このセクションは形は[Tuning]セクションと同じだが、次の点で異なる。
  • ノート番号を0から127まですべて指定しなくてもよい
    (無い部分は.tunを読む側のソフトが定められたロジックにより補完する)
  • cent値に小数点数を使うことができる
  • basefreqパラメータによりノート番号0に割り当てる周波数を指定することも可能
    (デフォルトはノート番号69を440Hzとした場合からの逆算で8.1757989156437073336Hz)
    basefreqのくだりは元のドキュメント(2003/03付け)の通りですが、これは恐らく「ノート番号0」ではなく「0cent」に割り当てるということでしょう。このように0centが8.1757989156437073336Hz(あるいはbasefreqで指定した値)という基準を持つことにより、cent値が 式 により周波数に変換可能になります。つまりbasefreqをデフォルトのままで、あるノート番号を「6900」と指定することはその音が440Hzであることを意味します。

ScalaはこのAnaMarkタイプの.tunファイルをExportすることができ、出力ファイルには[Tuning]セクションと[Exact Tuning]セクションが含まれます。ただし[Exact Tuning]セクションにはノート番号0から127までがすべて明示的に書き出され、basefreqパラメータは付きません(Scala ver 2.22にて)。
  Rhinoの.tunファイル
    KVR(http://www.kvraudio.com/)のBig Tick(Rhinoの作成元)のForumの2005/02あたりに「Rhinoのマイクロチューニングの解像度はどのぐらい?」と質問されている方がいます。これはRhinoについているサンプルの.tunファイルすべてが[Tuning]セクションのみを持ち、cent値の指定が整数であることからの疑問と思われます。それに対するBig Tickの回答は「AnaMarkと同じぐらいです。」というもので、そこにAnaMarkの作成元から「AnaMarkのフォーマットでは0.000000001cent以上ですよ、でもAnaMark以外のsynthの実装については知りません。」というコメントがつき、Big Tickから「AnaMarkのサンプルコードを元にさせてもらっているので解像度も同じ程度ということです。」という回答で話で終っています。これはRhinoが小数点数のcent値を指定した.tunファイルを読み込めることを意味していますが、実際にはAnaMarkタイプの.tunに完全準拠というわけではないので少し注意が必要です。本来のAnaMarkタイプの.tunでは[Tuning]セクションでは小数点数は不可、[Exact Tuning]セクションでは可能という仕様なのですが、Rhinoでは(少なくとも2.03では)[Tuning]セクションで小数点数指定を許しているけれども、[Exact Tuning]セクションは読まないという実装になっています。一方ScalaでExportされる.tunでは本来のAnaMarkタイプと同じく[Tuning]セクションに整数を、[Exact Tuning]セクションに小数点数が置かれます。つまりどういうことかというと、Rhino(ver 2.03)でScalaの出す小数点以下を有効にしたcent値を使いたければ、手動で.tunファイルを書き換えなければならない、ということです。ただ、小数点以下のcent値がどれだけ有効かは不明です。そのためMML/MIDIデータ等のページにある.tunファイルはScalaで出力したままとなっています。81_440_120_10cent.tunはすべてのcent値が小数点以下ゼロですが、60_391_200_keykokin.tunは、[Exact Tuning]セクションに小数点以下の数字を持っています。
   Scalaの使い方のメモ 
 
  • .tunを作るためにはExport形式を.tunタイプに設定する必要がある
    (一回設定すれば設定は保存される)
  • .tunを作る前にスケールとKeyboard Mappingを確定させる
  • .tunはImportできないので.sclと.kbmはとっておく
  • cent値の入力は小数点数で行なう
    (120.0のように。120だと120倍(120/1)という意味になる)
  • Key Mappingの画面の音表記はノート番号0:C-1系
    (C-2系のMIDIシーケンサ等と併用時にはズレに注意)
  • 同名のファイルが存在する場合、.sclのSave時には(Windowsのメッセージダイアログではなく)、メインの画面の下の部分に「File exists. Replace/Other name/Cancel」と表示されるので、Replaceしたい場合には、コマンド入力エリアに「R」と打ってEnterを押す。一方、.tunのExport時と.kbmのSave時には確認なしで上書きされる。

  • Export形式を.tunタイプに設定する
        ツールボタン「Opts」-「MIDI」タブ -「Model」リストボックス−
        「112: Tun format for softsynths: AnaMark; ...」
  • 新しくスケールを作る(その一つの方法)
        メニュー「File」-「New」-「Equal temperament」
  • 作ったスケールを見る
        ツールボタン「Show」
  • 作ったスケールを編集する
        ツールボタン「Edit」
  • 作ったスケールを.sclファイルとして保存する
        ツールボタン「Save」
  • .sclファイルを読み込む
        ツールボタン「Open」
  • Keyboard Mappingの作成・読込・保存
        メニュー「Edit」-「Edit mapping」
  • 現在のKeyboard Mappingを見る
        コマンド「show map」
  • 読み込んだ.scl/.kbmの設定でMIDIファイルをピッチベンド付きに変換する
        メニュー「Tools」-「Retune MIDI-file」
   【 参考 】 Scalaでピッチベンド付きに変換した例  (1番の元方の「年の内に...」の歌)
 
 Scalaでピッチベンド付きに変換したMIDIデータ  [MIDI]  749B
 変換後のMIDIを十二平均律のスケールで  [mp3]  53.5KB
 変換前のMIDIを81_440_120_10cent.tunのスケールで (比較用)  [mp3]  53.4KB
( 2006/02/05 )