Fwmiの日記

音楽好きのプログラマー

List of Custom Units for prologue and minilogue xd

KORG prologue 8/16 and minilogue xd (module)向けのカスタムユニット一覧

 

ここにKORG prologue 8/16 and minilogue xd (module)向けのカスタムユニット一覧を掲載しておきます。

※Nu:Tekt NTS-1は公式サポートしていません (動作報告等は歓迎します)

リリースに合わせて、随時更新します。

 

Here is a list of custom units for the KORG prologue 8/16 and minilogue xd (module).

※Nu:Tekt NTS-1 is not officially supported (I welcome reports of operation, etc.)

I will update this list as new releases become available.

 

Unit Name Instrument GM
No.
1-128
GM
Recommended
Key Range
(*推奨音域)
Price
( JP
Yen )
Release
Date
Version Update
Date
shinPiano Grand Piano 1 21-108 ¥6900 2025-08-31 1.1-0 2025-12-25
shinGlocken Glockenspiel 10 72-108 ¥3200 2025-12-28 1.0-0 -
shinCGuitar Classic Guitar 25 40-84 ¥4800 2025-12-30 1.0-0 -
shinTBells Tubular Bells 15 60-77 Free 2025-12-30 1.0-0 -

 

各ユニットの詳細に関しては、販売サイトに記載しております。

現状、パラメーター変化のデモはshinPianoのみになっています。shinシリーズ共通なので、そちらをご参照して下さい。

Details for each unit are listed on the sales site.

Currently, the parameter change demo is only available for shinPiano. Since it applies to the entire shin series, please refer to that.

 

Demo

shinPiano

 

 

shinGlocken

 

shinCGuitar

 

 

shinTBells

 

 

KORG logueSDKを用いたprologue, minilogue xd向けオシレーターの開発-わずか32KBほどのA.Piano-

概要

 当初はCLAPでオーディオプラグイン開発する予定でしたが、現在はKORG logueSDKを用いて開発を行っています。ピアノのユーザーオシレーターをC & Rust (ほぼRust)で実装し、テストリリースしました。

注:この記事は開発の経緯です。開発したユーザーオシレーターの仕様に関しては、別途まとめる予定です。
注:prologueとminilogue xdはオシレーターの互換性があります。この記事でxdと略して書いてある場合、prologue & minilogue xdの意味になります。

経緯(オーディオプラグイン開発環境の変更)

 当初CLAP(CLever Audio Plug-in) で開発することを検討していました。一般的にはVST2, 3が有名ですが、ライセンスに思うところがあり積極的に触る気になれませんでした。CLAPはMITライセンスで、コアな部分の仕様自体は固まっています。しかし拡張部分の仕様や実装レベルは、まだまだ普及段階であり十分に枯れていないように思えます。それよりも厄介なのは、マルチプラットフォーム、ホストと関係であり、確認作業に時間が割かれそうな予感がありました。Juceのようなフレームワークを導入するという手もありますが、オーディオプログラミングにおいては低レベル嗜好であり、これは規模が大きすぎる気がします。
 logueSDKの場合、枯れている(prologueの発売は2018年なのでその想定) し、プラットフォームに関しては選択の自由もあるため、条件的にはかなり良さそうでした。他の候補として、Critter & GuitariのOrganelleやZynthianもありますが、現時点では普及率が低いと判断しています(ただし、ZynthianのようにLV2プラグインが使用できるものに関しては、PCと兼用もできるので検討の余地あり)。
cleveraudio.org
www.korg.com
まあ元々シンセには興味があるので、調べている内に単純にハイブリッドシンセとして惹かれていったということもあります。

ピアノの訳

 ポリのアナログシンセを入手するのは初めてのことです。minilogue xdを入手し、プリセット1は"Replicant xd"(Blade Runner?)を鳴らしてみると、音は想像以上に良かったです(xdは純アナログではないので、若干不安はありました)。ディジタルピアノやシンセによく入っているPiano & Stringsのようなプリセットが好きなため、自然とピアノとリアルアナログストリングスとの組み合わせを試したくなりました。他の理由を含め、まとめると以下のようになります。

  • ディジタルピアノとアナログストリングスの音色を試したい
  • 既存のオシレーターで満足できるレベルのA.Pianoの音色が存在していない(チェックした限り)
  • logueSDK 最初の開発なので、長く聴いても飽きない音色を選択
  • 音域が広いので、今後の開発の目安になる
  • 鍵盤付きのシンセサイザーに3種の神器があることを期待している

※実際のピアノとは多くの違いがあるため、A.Piano(アコースティックピアノ)に聴こえるかどうかの最終判断は聴く側に委ねます。

ターゲットがprologue, minilogue xdの理由

プレイヤーとしてモノシンセを使いこなす自信はあまりなく、ピアノに限らず和音が鳴らせる生楽器のエミュレーションを行いたいため、消去法でxd / drumlogueが残りました。drumlogueはサイズや開発環境(logueSDK 2.x)において、xdより良い面はあります。しかしドラムマシン(ハードウェアは今まで持ったことがありません)名義でのオシレーターの需要がいまいちピンと来ないため、xdで開発することにしました。またアナログパスを通すことで音にどのような変化が期待できるのか?という点にも興味がありました。

注:Nu:Tekt NTS-1 digital kitに関して
バイナリ互換性はありますが、動作環境と仕様に若干違いがあります。そのためにサポートするには動作確認が必須だと考えています。現状、実機を所持していないためターゲットから外してあります。

実機(シンセ)選択

 ターゲットから選択肢は、prologue 8/16, minilogue xd, minilogue xd moduleの内のいずれかです。prologueはすでに販売終了で、新品での入手は難しいと思います。それでminilogue xdになり、サイズ的にはモジュールの方が好ましいと考えていました。ただ、ちょうど雑誌FILTER のシンセサイザーデザイン特集でminilogueが取り上げられていたこともあり、形状がより映えそうな鍵盤付きも良いかなと思えました。購入時に価格差がほとんどなかったこともあり、最終的に鍵盤ありのminilogue xdになりました。
 
filter-synth.jp

minilogue xdを使うほど、prologueの8/16 polyのポリ数が魅力的に思えます。ただ、開発環境としてはサイズ、省エネ、6つのUser Parameterに対しMIDIのNRPNのサポートがある(prologueはなし)こともあり、minilogue xdで正解だと思います。
ポリ数を増やすためだけにmoduleの導入は大袈裟なので、より小型のmoduleが発売されることを期待しています。
※minilogue xdのレビューは別途するかも...(まだ、すべてを使いこなせていませんが...)。

開発環境

 ハードとしては、PCと実機 (シンセ)、両者を結ぶケーブル(minilogue xdには含まれていない、USBなら入力Type-B)があれば可能です。ソフトに関してはリンク先を参照して下さい。
 korginc.github.io

 実機で動作確認をすると、イテレーションがかかり、デバッグがしにくいため、PCにテスト環境を構築するのが一般的だと思います。あるいは、xdのMCU STM32F401xC(CPU:Cortex-M4)に近いマイコンがあるとDSP最適化、パフォーマンス測定などにおいて便利かと思われます。

Linuxでlogue-cliを使う場合の問題点

 Linuxだと、logue-cliを使ってOscillator転送時に、あるサイズ(デフォルトなら4KB?)を超えるとtimed outが発生します。解決方法はいくつかあるようですが、amidiで送る方法を採用しています。

github.com

実装 (C言語 & Rust)

 APIC言語です。Makefile上では、C++, アセンブリのサポートもあります。非公式のものでRustのフレームワークがいくつかあるのは確認済みですが、CからFFIでRustを呼び出すという単純な実装方式を取ることにしました。主な理由は、Cortex M4での開発が初めて & 久しぶりのMakefileで慣れていないこともあり、公式から離れすぎることに抵抗があったためです。C言語はlogue SDKのコールバック関数とRustを結びつけるのが主な役割で、100行に満たない内容です。

KORG公式で、今後Rustのサポートがあると嬉しいところ

Rustを使う理由

 Rustはメモリ安全性、優れた並行処理などの利点がありますが、logueSDK環境においてこれらの利点を享受できるものではありません。どちらかと言えば、可読性、タイプ量の減少(特にデフォルトImmutable)、単一のファイルタイプ(C++のようにヘッダ、ソースが分離していない)、null安全性などのシンプルな利点のためです。32KBの容量制約のため、試行錯誤をある程度することは容易に想定できました。結果、Rustを用いてタイプ量が少なくなるのはとても助かりました。パフォーマンスに関しては、現状特別なチェックはせず、コンパイラ任せですが、C++よりは劣ると考えいます。とは言え、現状開発しているものに関しては、パフォーマンスより先にメモリの限界が来ているので、特別気にしていません。

テスト環境

 こちらはC++ & Rustで実装しています。すべてRustの方が簡潔に書けそうですが、割とFFIを意識した実装がしたかったため、こちらもC系と組み合わせています。フレームワークはSDL2とImGuiを採用しています。

SDL2 & ImGui
オシレーターサイズ制限 32KB

 xdの公式サイトから引用します

RAM的にどんな制限がありますか?
オシレーターに関して、コードと可変領域を含め32KB以内。エフェクトはディレイに関して、最大2MBまで。

このサイズは、CD音質(44.1kHz, 16bit)のモノラル Wavファイルにおいて、約0.372秒のデータに相当します。xdの48kHz, 16bit モノラルでは、約0.341秒です。この容量制限に対応するためにパズルを解くような工夫が必要で、何度か実装の見直しを行っています。

shinPiano 約32KB

実際のunitファイル (.prlgunit / .mnlgxdunit) はzip アーカイブになるため、32KBより小さなサイズ(ここでは23.8kB)になります。

参考
サンプルプレイバック方式のシンセなので単純に比較する訳にはいきませんが、PCの主要なプラットフォームで長年活躍してきたRolandの音源データgm.dlsのサイズは3.4MBで、Piano1 以外のデータをすべて削除したgm_piano1.dlsは187.5KBになります(コードは含まれない)。

gm.dlsのサイズ
gm.dls Piano1

Piano1は、10のモノラルのサンプルで構成されています。

当然ループありで、ピッチが高くなるにつれて、サンプルの長さは短くなります。
PIANO36 0.620秒
PIANOA3 0.220秒

サンプリング周波数は22.05kHz 深度は16bitです。

デモ


※他、Xには多数投稿しています(注:古いバージョンの動画もあります)

テストリリース

fwmi.gumroad.com

限定数でテストリリースしています。主に販売サイトGumroadの評価が目的です。

YAMAHA HQMini鍵盤搭載機種の比較表(主にMIDI)

 

経緯

 YAMAHAのショルダーキーボードSHS-300を購入したところ、Mini鍵盤が、HQ(High Quality)を謳っているだけあり、なかなか好感触でした(ちなみにショルダーキーボードを求めていたのではなく、主にマイコンでテストするためBLE MIDIの機能がある製品を探していました)。現在、デスクのスペースの関係上、ミニ鍵盤の方が好ましく、私には必要十分と思えました。それからHQ Miniが搭載されているキーボードに関して、一通り調べたのでまとめてみます。

 

対象機種

   HQ Mini鍵盤かつMIDIキーボードとして利用できる製品に限定しています。よってMIDI対応ではない、Remie(PSS-E30)、PSS-F30(日本未発売)は対象外です。またVKB-100(SHS-500の元のVocaloid音源のもの)に関しては、表のスペースの都合上載せません。この機種に関してはVocaroid音源が特徴で、SHS-500と外見を含め、似ている箇所が多いですが、オクターブボタン(+1のみ、結果としてNoteの範囲は36-108)などの違いもあります。音源を抜きにして、MIDIキーボードとしてチェックした場合は、価格面からも後発のSHS-500の方が選択されそうなこともあります。
 

結果として、PSS-A50、Sonogenic(SHS-300, SHS-500)の2機種、refaceシリーズの4機種をスペースの都合上1項目とし、4項目としてまとめます。

 

比較表

   個人的な判断で、注意点は赤字、メリットは青字にしてあります。MIDI以外のチューニング機能など、あまり違いがない部分はあえて記していません。詳細はそれぞれの取扱説明書、MIDIリファレンスを参照して下さい。

  PSS-A50 SHS-300 SHS-500 reface
[鍵盤数] 37 37 37 37
[MIDI 接続]  
USB
BLE - -
ミニDIN - -
[MIDI 送信]  
PitchBend (Motion Ef.) ✅ Wheel ✅ Wheel ✅ Lever (CS/DX)
Mod
CC1
(Motion Ef.) ✅ Button
(0 / 127)
✅ Wheel -
Sustain
CC64
✅ Button ✅ Button ✅ Button ✅ Pedal (Half 対応)
(CS / DX / CP)
Expression
CC11
(Motion Ef.) - - ✅ Pedal (CS / YC)
※CS 選択式
Portamento
CC65
✅ Shift + Button - ✅ Func
→ Select Knob
-
         
Channel [1, 16] [1] *1 [1, 16] [1, 16]
Note 0-127 18-114 12-120 24-108
Octave [-4, 4]
Button
[-2, 2]
Func + Key
[-2, 2]
Button
[-2, 2]
Lever
Transpose [-12, 12]
Shift + Key(-,+)
[-6, 6]
Func + Key
[-12, 12]
Button
[[-12, 12] (Master)
Key ※Ver1.3詳細
[Size / Weight]  
Width 506mm 733mm 821mm 530mm
Depth 201mm 125mm 121mm 175mm
Height 54mm 56mm 65mm 60mm
Weight 1.2kg 1.2kg 1.5kg 1.9kg
   
[電源] USB (microB) USB (B) アダプター アダプター
電源 (電池) 単3 x4 単3 x4 単3 x6 単3 x6
アルカリ 18時間 15時間 10時間 5時間
充電式ニッケル 15時間 12時間 8時間 ? (4時間?)
消費電力 1.5W 2.5W 3W 6W
[端子]  
AUX In - ✅ 3.5mm ✅ 3.5mm ✅ 3.5mm
Line Out - - ✅ ¼” Mono ✅ ¼” L/Mono, R
Phones ✅ 3.5mm ✅ 3.5mm ✅ 3.5mm ✅ ¼”
USB Audio - - ✅ 44.1k 16bit -
[アンプ] 1.4W 0.7W 0.7W 2W x2
[スピーカー] 8cm 8cm 3.6cm 3cm x2
[音源] Mono (CC10✘) Stereo Stereo Stereo
ボイス 40
+2(Std, Dance)
11
+1(Dance)
28
+2(House, Pow)
GM
-
最大
同時発音数
32 32 48 8 (CS / DX)
128 (CP / YC)
エフェクト Chorus Reverb
パネル操作✘
Chorus Reverb
パネル操作✘
Chorus Reverb
DSP 9種類
3-8種類 (機種依存)
[他] Arpeggio
Motion Effect
Metronome
JAM (3Mode) JAM (5Mode) Phrase Looper
(CS / DX)
   
発売 2019/11 2019/11 2019/3 2015/9 (CS / DX)
2015/10 (CP / YC)
実売価格 *2 8,890 15,080 26,555 43,700-55,000
*2 2025/4/10調べ

*1 SHS-300の送信MIDIチャンネルに関しては、、MIDIリファレンスに明らかな間違いがあるので修正しています。

 

参考
  SHS-300に関してはSysExの仕様も抜け落ちているので、詳しく知りたい方は下記引用の"MIDI Reference+"を参照して下さい。Chorus(Flanger含む)/Reverbのタイプを変更できたりします。
(私の方ではCC84 Portamento Controlの動作の確認がとれていませんが...)

reddit "Yamaha Sonogenic SHS-300: There is more to get via MIDI!"

https://www.reddit.com/r/Keytar/comments/j8cz5i/yamaha_sonogenic_shs300_there_is_more_to_get_via/?rdt=41175

Other than that, I can be able to connect it to my computer and use it as a 16-part tone generator (while it does not fully support GM only the 12 panel voices (11 melodic + 1 Dance drum kit) can be played from MIDI data) however Yamaha does have a MIDI Reference but only the MIDI Implementation Chart. The synthesis engine/chip on the SHS-300 is the YMW830 SWLL which is the same one found on the PSS-A50 which has 42 voices (40 melodic + 2 drum kits). Using MIDI, it's possible to turn off local control and reverb in which you can't do from the SHS-300 panel.

However there's more! Chorus exists, but chorus can't be heard from the panel voices, that is available only from incoming MIDI data and its effect types can be changed via MIDI sysex. I decided to write MIDI Reference+ for the SHS-300 (also with a corrected MIDI Implementation Chart)

 

雑感

   SHS-300については、独立したオクターブボタンがないのがまず残念です。安価なPSS-A50がオクターブとノート範囲に関して最良です。サイズを気にしなければ、機能豊富なSHS-500が一番バランスがとれている気がします。もう少しMIDI機能(MIDI 2.0対応も含め)に焦点をあてた、HQ Mini鍵盤搭載の機種(鍵盤数のバリエーションもあると良い)が発売されることを期待します。

 

おまけ

Xより(SHS-300の音源)

※音源としては、YMW830 SWLLでPSS-A50(Monoに制限されている)と共通のようです。

 

 

 

Scala音律ファイル(.scl) 主要な古典調律のリスト

 

音律

 音律は音階と周波数の対応関係(Mapping)であり、多くの場合、音程の相対的な関係から定められています。これは音楽を構成する土台であり、旋律においては、音階のintervalの違いとして表れ、和音においては、音を構成する上音のうなりの有無により、その響きに影響します。

英語では、Intonation、Temperamentといった用語が使われます。

※ここで扱う音律は、1オクターブ 12音階に限定します。

 

Scala音律ファイル(.scl)を用いる理由

まずここでのScalaプログラミング言語ではなく、音律を扱うためのアプリケーションです。

音律データを扱う際に、Scalaの音律ファイル(.scl)を用いる理由は、以下のようなことが挙げられます。

  • 可読性(テキスト形式、分数/cent表記)
  • 精度(制限なし)
  • 豊富なデータ(公式サイト上だけでも5000ファイル超え)
  • ツール類の利用

 

以下、Scalaの公式サイトの最初の段からの引用とその自動翻訳です。

 

Scala is a powerful software tool for experimentation with musical tunings, such as just intonation scales, equal and historical temperaments, microtonal and macrotonal scales, and non-Western scales. It supports scale creation, editing, comparison, analysis, storage, tuning of electronic instruments, and MIDI file generation and tuning conversion. All this is integrated into a single application with a wide variety of mathematical routines and scale creation methods. Scala is ideal for the exploration of tunings and becoming familiar with the concepts involved. In addition, a very large library of scales is freely available for Scala and can be used for analysis or music creation.

huygens-fokker.org

 

DeepL翻訳

Scalaは、ジャストイントネーション音階、平均律、歴史的平均律微分音音階、大音音階、非西洋音階など、音楽のチューニングを試すための強力なソフトウェアツールです。音階の作成、編集、比較、分析、保存、電子楽器のチューニング、MIDIファイルの生成とチューニング変換をサポートします。これらすべてが、多種多様な数学的ルーチンと音階作成メソッドを備えた1つのアプリケーションに統合されています。Scalaは、チューニングを探求し、その概念に慣れるのに理想的です。また、Scalaには非常に多くの音階ライブラリが用意されており、分析や音楽制作に自由に利用することができます。

Scalaの使い方に関しては(この記事の主要な焦点ではないため)、他のサイトに任せます。

 

例とフォーマット

フォーマットはシンプルなテキストファイルなので、直感的に理解できると思います。

例とフォーマットの説明を公式サイトから引用します。

 

! meanquar.scl
!
1/4-comma meantone scale. Pietro Aaron's temperament (1523)
 12
!
 76.04900
 193.15686
 310.26471
 5/4
 503.42157
 579.47057
 696.57843
 25/16
 889.73529
 1006.84314
 1082.89214
 2/1

 

フォーマット

The rules

  • The files are human readable ASCII or 8-bit character text-files. 1)
  • The file type is .scl .
  • There is one scale per file.
  • Lines beginning with an exclamation mark are regarded as comments and are to be ignored.
  • The first (non comment) line contains a short description of the scale, but long lines are possible and should not give a read error. The description is only one line. If there is no description, there should be an empty line.
  • The second line contains the number of notes. This number indicates the number of lines with pitch values that follow. In principle there is no upper limit to this, but it is allowed to reject files exceeding a certain size. The lower limit is 0, which is possible since degree 0 of 1/1 is implicit. Spaces before or after the number are allowed.
  • After that come the pitch values, each on a separate line, either as a ratio or as a value in cents. If the value contains a period, it is a cents value, otherwise a ratio. Ratios are written with a slash, and only one. Integer values with no period or slash should be regarded as such, for example "2" should be taken as "2/1". Numerators and denominators should be supported to at least 231-1 = 2147483647. Anything after a valid pitch value should be ignored. Space or horizontal tab characters are allowed and should be ignored. Negative ratios are meaningless and should give a read error. For a description of cents, go here.
  • The first note of 1/1 or 0.0 cents is implicit and not in the files.
  • Files for which Scala gives Error in file format are incorrectly formatted. They should give a read error and be rejected.

 

DeepL翻訳

ルール

  • ファイルは人間が読めるASCIIまたは8ビット文字のテキストファイルであること。1)
  • ファイルタイプは .scl
  • 1つのファイルに1つのスケールがあります。
  • 感嘆符で始まる行はコメントとみなされ、無視されます。
  • 最初の(コメントでない)行には、スケールの短い説明が書かれていますが、長い行も可能であり、読み取りエラーにならないようにしてください。説明は1行のみである。説明がない場合は空行にする。
  • 2行目には音符の数が入ります。この数は、その後に続く音価の行数を示します。原則的に上限はありませんが、一定のサイズを超えるファイルを拒否することができます。下限は0ですが、これは1/1の次数0が暗黙の了解なので可能です。数字の前後にスペースを入れてもかまいません。
  • その後に、ピッチの値がそれぞれ別の行に、比率またはセント単位の値として記述されます。値にピリオドが含まれる場合はセント単位、そうでない場合は比率単位となります。比率の場合はスラッシュが1つだけ付きます。ピリオドもスラッシュもない整数値は、例えば 「2 」は 「2/1 」とみなされる。分子と分母は、少なくとも231-1 = 2147483647までサポートされるべきである。有効なピッチ値の後は無視されるべきである。スペースや水平タブ文字は許容されるが無視されるべきである。負の比率は無意味であり、読み取りエラーを与えるべきである。セントの説明はこちら。
  • 1/1または0.0セントの最初の音符は暗黙的なもので、ファイルにはありません。
  • ScalaがファイルフォーマットでErrorを出すファイルは,正しくフォーマットされていません.読み込みエラーとなり,拒否されるはずです。

 

音律ファイル(.scl)のアーカイブ

huygens-fokker.org

上記のリンクの"Scale Archive"にあります。

The scale archive can be freely downloaded. See the contents listing for a brief description of each scale file. The scales are at: http://www.huygens-fokker.org/docs/scales.zip.

※このscales.zipが5000超えの音律ファイルを含む圧縮ファイルになります(容量は小さいけど...)。

 

古典調律リスト

上記のアーカイブから主な古典調律リストを作成します(近年解釈されるバッハの音律を含む)。リストに含まれていませんが、調査のために探しているものもありますので、以下に挙げておきます。

一応、音律の歴史を流れを上から分かるように整理したつもりです(これは学術上の分類ではなく、個人の解釈によるものです)。カテゴリ内は、なるべく年代順に並ぶようにしてあります。

 

ピタゴラス純正律(系)(Just / Pure)→中全音律(ミーントーン / Meantone)→ウェル・テンペラメント(Well-Temperament)→平均律系(Equal)の流れ

File Aria Description (.sclファイル内の説明)
ピタゴラス
pyth_12 12-tone Pythagorean scale
純正律(主要3和音同比率)
malcolm   Header Alexander Malcolm's Monochord (1721), and C major in Yamaha synths, Wilkinson: Tuning In
euler   Euler's Monochord (a mode of Ellis's duodene) (1739), genus [33355]
marpurg1   Marpurg's Monochord no.1 (1776)
純正律
ramis   Monochord of Ramos de Pareja (Ramis de Pareia), Musica practica (1482). 81/80 & 2048/2025. Switched on Bach
kepler1   Kepler's Monochord no.1, Harmonices Mundi (1619)
kirnberger1   Kirnberger's temperament 1 (1766)
kirnberger2   Kirnberger 2: 1/2 synt. comma. "Die Kunst des reinen Satzes" (1774)
中全音律(ミーントーン)
meanquar 1/4-comma meantone scale. Pietro Aaron's temp. (1523). 6/5 beats twice 3/2
meanfifth 1/5-comma meantone scale (Verheijen)
meansixth 1/6-comma meantone scale (tritonic temperament of Salinas)
ウェル・テンペラメント
werck3
(ヴェルクマイスター)
Andreas Werckmeister's temperament III (the most famous one, 1681)
rameau   Rameau's modified meantone temperament (1725)
rameau-french Standard French temperament, Rameau version (1726), C. di Veroli, 200
vallotti
(ヴァロッティ)
  Vallotti & Young scale (Vallotti version) also known as Tartini-Vallotti (1754)
kirnberger
Kirnberger3
(キルンベルガー)
  Kirnberger's well-temperament, also called Kirnberger III, letter to Forkel 1779
Kirnberger 3: 1/4 synt. Comma (1744)
young1
(ヤング)
Thomas Young well temperament no.1 (1800), 1/12 and 3/16 synt. Comma
young   Thomas Young well temperament (1807), also Luigi Malerbi nr.2 (1794)
prinz Prinz well-tempermament (1808)
broadwood Broadwood's Best (Ellis tuner number 4), Victorian (1885)
ウェル・テンペラメント(バッハの解釈)
kellner Herbert Anton Kellner's Bach tuning. 5 1/5 Pyth. comma and 7 pure fifths
lehman2 Bradley Lehman Bach squiggle keyboard temperament II (2005)
jobin-bach   Emile Jobin, WTC temperament after Bach's signet
平均律
galilei   Vincenzo Galilei's approximation

Ariaの欄に関する説明

.sclファイルのリストを探している時に見つけたサイトが以下のAria Playerの音律リストです。

usermanuals.garritan.com

Aria Playerが.sclをどのように作成しているのか不明ですが、Scalaの音律ファイルのアーカイブとは一致しない箇所がありました(注:実際のファイルは未チェック)。それをチェックマークで示しています。ちなみにこのサイトの"werckmeisterIII.scl"はprinzと一致し(実際にprinzはヴェルクマイスター3の派生系)、"young_1799.scl"はyoung1と一致します(1799? 1800?どちらが正しい?)、また"rameau.scl"に関してはもともと厳密な規定はないようなので、?にしてあります。

 

音律データ

ソフトウェアプログラマーであれば、音律ファイルのフォーマットを理解していれば、データを自由に扱えますが、参考のために音律データも記載しておきます(数値を眺めるだけでも面白いかも?)。

記載するのは、以下の2種類のデータで、平均律からのずれを異なるcent精度、基準を用いて表します。

  1. 0.1cent単位のCベース
  2. 1cent単位のAベース

まず1ですが、音律は最低0.1centの精度が、論理的(高周波数におけるうなりの回数)に必要だと考えていますので、そのデータ (C基準なのは.sclに従って)。2はMIDIのMTSの1バイト仕様、あるいはGSのScale / Octave Tuningなどで使用することを想定しています。A基準なのは、基準周波数を440Hzから変更する場合、計算しやすくなるためです。

 

入力データに関しては、ミスがないように、数値を手で打ち込むようなことはしていません。sclファイルをスクリプトで読み込み、出力をLibreOffice Calc にコピー&ペーストしています。そこからCalcの計算式で1cent単位のデータに変換しています。

 

また、出力結果の検証はある程度しています。

しかし、あまり有名ではない音律ファイルに関しては、精度上の問題を抜きにしても、Webサイトには別の数値が載っていることもありました。あくまでここに載っているデータは、Scalaの音律ファイルからの対応版になります(もちろん明らかな間違いがありましたら、注釈は入れますのでお知らせ下さい)。

 

データ1 平均律からのずれ 0.1cent単位(Cベース)

※テキストの色付けは主に純正律、1/4ミーントーンとの比較、データの相違などを強調するためのものです。

File 0 1 2 3 4 5 6 7 8 9 10 11
  C C# D D# E F F# G G# A A# B
ピタゴラス
pyth_12 0.0 13.7 3.9 -5.9 7.8 -2.0 11.7 2.0 15.6 5.9 -3.9 9.8
純正律(主要3和音同比率)
malcolm 0.0 11.7 3.9 15.6 -13.7 -2.0 -9.8 2.0 13.7 -15.6 -3.9 -11.7
euler 0.0 -29.3 3.9 -25.4 -13.7 -2.0 -9.8 2.0 -27.4 -15.6 -23.5 -11.7
marpurg1 0.0 -29.3 3.9 15.6 -13.7 -2.0 -9.8 2.0 -27.4 -15.6 17.6 -11.7
純正律
ramis 0.0 -7.8 -17.6 -5.9 -13.7 -2.0 -9.8 2.0 -7.8 -15.6 -3.9 -11.7
kepler1 0.0 -7.8 3.9 15.6 -13.7 -2.0 -9.8 2.0 -5.9 5.9 17.6 -11.7
kirnberger1 0.0 -9.8 3.9 -5.9 -13.7 -2.0 -9.8 2.0 -7.8 -4.9 -3.9 -11.7
kirnberger2 0.0 -7.8 3.9 -5.9 -13.7 -2.0 -9.8 2.0 -5.9 -4.9 -3.9 -11.7
中全音律(ミーントーン)
meanquar 0.0 -24.0 -6.8 10.3 -13.7 3.4 -20.5 -3.4 -27.4 -10.3 6.8 -17.1
meanfifth 0.0 -16.4 -4.7 7.0 -9.4 2.3 -14.1 -2.3 -18.8 -7.0 4.7 -11.7
meansixth 0.0 -11.4 -3.3 4.9 -6.5 1.6 -9.8 -1.6 -13.0 -4.9 3.3 -8.1
ウェル・テンペラメント
werck3 0.0 -9.8 -7.8 -5.9 -9.8 -2.0 -11.7 -3.9 -7.8 -11.7 -3.9 -7.8
rameau 0.0 -13.2 -6.8 -2.2 -13.7 3.4 -15.2 -3.4 -11.2 -10.3 6.8 -17.1
rameau-french 0.0 -11.7 -6.8 -2.0 -13.7 3.4 -15.2 -3.4 -6.8 -10.3 1.5 -17.1
vallotti 0.0 -5.9 -3.9 -2.0 -7.8 2.0 -7.8 -2.0 -3.9 -5.9 0.0 -9.8
kirnberger 0.0 -9.8 -6.8 -5.9 -13.7 -2.0 -9.8 -3.4 -7.8 -10.3 -3.9 -11.7
Kirnberger3 0.0 -7.8 -6.8 -5.9 -13.7 -2.0 -9.8 -3.4 -5.9 -10.3 -3.9 -11.7
young1 0.0 -6.1 -4.2 -2.2 -8.3 -0.1 -8.1 -2.1 -4.2 -6.3 -0.2 -8.2
young 0.0 -9.8 -3.9 -5.9 -7.8 -2.0 -11.7 -2.0 -7.8 -5.9 -3.9 -9.8
prinz 0.0 -9.8 -6.8 -5.9 -13.7 -2.0 -11.7 -3.4 -7.8 -10.3 -3.9 -11.7
broadwood 0.0 -4.0 -2.0 -2.0 -7.0 -1.1 -5.0 0.0 -3.0 -5.0 -1.1 -6.0
ウェル・テンペラメント(バッハの解釈)
kellner 0.0 -9.8 -5.5 -5.9 -10.9 -2.0 -11.7 -2.7 -7.8 -8.2 -3.9 -9.0
lehman2 0.0 -2.0 -3.9 -2.0 -7.8 2.0 -3.9 -2.0 -2.0 -5.9 -2.0 -5.9
jobin-bach 0.0 -13.2 -6.8 -7.6 -13.7 -2.0 -15.2 -3.4 -11.2 -10.3 -5.6 -17.1
平均律
galilei 0.0 3.0 -2.0 1.0 -4.0 -5.0 -6.0 -7.0 -8.0 -9.0 -10.0 -11.0

 

データ2 平均律からのずれ 1cent単位(Aベース Aを0に調整)
File 0 1 2 3 4 5 6 7 8 9 10 11
  C C# D D# E F F# G G# A A# B
ピタゴラス
pyth_12 -6 8 -2 -12 2 -8 6 -4 10 0 -10 4
純正律(主要3和音同比率)
malcolm 16 27 20 31 2 14 6 18 29 0 12 4
euler 16 -14 20 -10 2 14 6 18 -12 0 -8 4
marpurg1 16 -14 20 31 2 14 6 18 -12 0 33 4
純正律
ramis 16 8 -2 10 2 14 6 18 8 0 12 4
kepler1 -6 -14 -2 10 -20 -8 -16 -4 -12 0 12 -18
kirnberger1 5 -5 9 -1 -9 3 -5 7 -3 0 1 -7
kirnberger2 5 -3 9 -1 -9 3 -5 7 -1 0 1 -7
中全音律(ミーントーン)
meanquar 10 -14 4 21 -3 14 -10 7 -17 0 17 -7
meanfifth 7 -9 2 14 -2 9 -7 5 -12 0 12 -5
meansixth 5 -7 2 10 -2 7 -5 3 -8 0 8 -3
ウェル・テンペラメント
werck3 12 2 4 6 2 10 0 8 4 0 8 4
rameau 10 -3 4 8 -3 14 -5 7 -1 0 17 -7
rameau-french 10 -1 4 8 -3 14 -5 7 4 0 12 -7
vallotti 6 0 2 4 -2 8 -2 4 2 0 6 -4
kirnberger 10 1 4 4 -3 8 1 7 3 0 6 -1
Kirnberger3 10 3 4 4 -3 8 1 7 4 0 6 -1
young1 6 0 2 4 -2 6 -2 4 2 0 6 -2
young 6 -4 2 0 -2 4 -6 4 -2 0 2 -4
prinz 10 1 4 4 -3 8 -1 7 3 0 6 -1
broadwood 5 1 3 3 -2 4 0 5 2 0 4 -1
ウェル・テンペラメント(バッハの解釈)
kellner 8 -2 3 2 -3 6 -4 5 0 0 4 -1
lehman2 6 4 2 4 -2 8 2 4 4 0 4 0
jobin-bach 10 -3 4 3 -3 8 -5 7 -1 0 5 -7
平均律
galilei 9 12 7 10 5 4 3 2 1 0 -1 -2

 

ソフトウェアプログラマーのためのMIDI CCリスト

更新

 2024/8/13

  • SystemCommon & System Realtime の項目を一覧記述に変更
  • System Realtimeの※(脚注)を追加
  • CCリストにGS仕様 CC1 Control / CC2 Controlを追加
  • 追加に伴い一部の説明を修正

 

変更理由

 Systemメッセージに関しては、最初は簡潔さを考慮して省いていましたが、未定義箇所があり、テスト的に用いる(あくまで予約済みである点には注意)ことが可能な点を考慮すると、明示した方が良いという判断です。CC1/2 Controlに関しては、デフォルト値の関係上、記載すべき項目でしたが、書き忘れていました。

 

書く理由

 MIDIコントロールチェンジのリストはWeb上に多く見かけますが、プレイヤー/サウンドプログラマー向けの資料が多いです。ソフトウェアプログラマー向けの資料(空きCC、デフォルト値、Resetすべき項目、詳細資料などを記載)はあまり見ないため、備忘録を兼ねて作成することにしました。

 またM5Stack UnitSynth (SAM2695)のCCリスト化も兼ねています。 (比較のためRoland SC-88Proも掲載)

 GS(NRPN)に関しては、一応記載しています。

※Systemメッセージ & MPEに関しては、おおよその配置箇所を示すだけにとどめます。

 

MIDIメッセージ概要

MIDIメッセージの大きな分類を示しておきます。

コントロールチェンジ(CC)は分類上、Status Byteが0xBn(n:channel)、 データの1バイトが0-119になります。120-127はチャンネルモードメッセージなりますが、CCと同じデータ形式を採るため、実装上はまとめて扱われることが多いように思われます。Descriptionの色に関しては後述します。

Status Byte Data Bytes Description Message Spec.
& 0xf0
(上位4bit)
& 0xf
(下位4bit)
1Byte 2Byte 3…
0x80 Channel
0-15
Note Velocity - Note Off Channel Voice GM
0x90 Velocity 0 - Note Off GM
Velocity 1-127 - Note On GM
0xA0 Pressure - Polyphonic Key Pressure
(Aftertouch)
 
0xB0 Control 0-119 Value - Control Change (GM)
Control 120-127 Value - Channel Mode Channel Mode (GM)
0xC0 Program - - Program Change Channel Voice (GM)
0xD0 Pressure - - Channel Pressure
(Aftertouch)
GM
0xE0 Value (LSB) Value (MSB) - Pitch Bend Change GM
0xF0 0x0 可変 SYSEX System Exclusive  
0x1 Value
- - MIDI Time Code
Quater Frame
System Common  
0x2 Value (LSB) Value (MSB) - Song Position Pointer
(SPP)
 
0x3 Song - - Song Select  
0x4/0x5 可変 Undefined(Reserved)  
0x6 - - - Tune Request  
0x7 - - - EOX ( End Of eXclusive)  
0x8 - - - Timing Clock System Realtime
 
0x9 可変 Undefined(Reserved)  
0xA - - - Start  
0xB - - - Continue  
0xC - - - Stop  
0xD 可変 Undefined(Reserved)  
0xE - - - Active Sensing  
0xF - - - System Reset  

※ 仕様上、System Realtime Messageは他のMessageより優先権があり、他のStatus-Dataの合間に表れても良い

 

以下、個人的なピックアップ項目です。

  • Status Byteは最上位ビットがONで、データと区別できる
  • SYSEXを除くと、すべてのメッセージが3バイト以下になる(実装上はSYSEXが別の構造を採ることが多い)
  • Velocityと音量の関係は指数関数的であることを推奨(MIDI 1.0仕様書)、Velocity Mappingの存在も意識する必要がある
  • Pitch Bend / SPP のMSB / LSBは間違えやすい部分(SYSEXには逆順のデータが存在し、一貫性がない)
  • 0xFFのSystem Reset(工場出荷時設定にリセット)はテストに便利(仕様上もマニュアルを推奨)

 

コントロールチェンジ (+チャンネルモードメッセージ)一覧

Descriptionの色の意味は次の通りです。

  • 緑:Reset All Controller (CC121)でリセットされない項目
  • 赤:Reset All Controller (CC121)でリセットされる項目
  • 青:未定義

 

またCCの背景色の色の意味は次のようになっています。

  • 灰色:ドラムチャンネルでの受信、非推奨項目

いずれもGM2の仕様書を元にしています。GM2の仕様に該当しない項目に関しては、そのままです。従って実装上の必要性に応じて、項目は変えると良いかもしれません(例えば、Freezeを実装した場合、これは論理的(他のPedalに従い)にResetすべき項目に含んで良いと思われます)。

 

Valueの[]はDefault値を表します。

 

Category Spec. CC Value Description SAM
2695
88
Pro
Note Ref.
MSB

受信時
MSB→LSB
LSBは0に

  0   Bank Select    
GM 1 [0] Modulation Wheel    
  2   Breath Controller - -    
  3   Undefined - -    
  4   Foot Controller - -    
GM2 5 [0] Portamento Time 推奨グラフあり  
GM2 6 [0] Data entry (N)RPNの値  
GM 7 [100] Volume 40*log10(cc7/127) [dB]  
  8 [64] Balance - - L/Lower→R/Upper  
  9   Undefined - -    
GM 10 [64] Pan L→R 推奨式あり RP-036
GM 11 [127] Expression 40*log10(cc11/127) [dB]  
  12/13   Effect Control 1/2 - -    
  14-15   Undefined - -    
  16-19   General Purpose
1-4
汎用操作子
(2バイト拡張可能)
 
GS 16   [CC1 Control] SYSEXを用いて、
CC[0-0x5f]に変更可
 
GS 17   [CC2 Control] SYSEXを用いて、
CC[0-0x5f]に変更可
 
  20-31   Undefined - -    
LSB

LSBのみ
変更は可
  32 [0] Bank Select LSB -    
  33-37   * LSB - -    
GM2 38 [0] Data entry LSB - (N)RPNの値  
  39-43   * LSB - -    
例1 42 [0]? Pan LSB - -    
例2 43 [127]? Expression LSB - -    
  44-63   * LSB - -    
Switch

送信側
0: OFF
127: ON

受信側
0-63 : OFF
64-127: ON
GM 64 [0] Sustain Pedal
/ Damper (Hold)
ハーフダンパー可
0-127
 
GM2 65 [0] Portamento    
GM2 66 [0] Sostenuto Pedal
(Chord Hold)
   
GM2 67 [0] Soft Pedal    
  68 [0] Legato Footswitch - - On:Mono Mode
再アタックしない
Off: Modeを復帰
 
  69 [0] Freeze
(Hold2)
- -    
Sound
Controller
(Default)

CC71-78
Relative
  70 [0] Sound Variation - -   RP-021
2推奨 71 [64] Timber/Harmonic
Intensity
(Filter Resonance)
GS GS   RP-021
2推奨 72 [64] Release Time GS GS Realtimeは任意 RP-021
2推奨 73 [64] Attack Time GS GS Realtimeは任意 RP-021
2推奨 74 [64] Brightness
(Filter Cutoff)
GS GS 暗→明 RP-021
2推奨 75 [64] Decay Time GS GS   RP-021
2推奨 76 [64] Vibrato Ratio GS GS   RP-021
2推奨 77 [64] Vibrato Depth GS GS   RP-021
2推奨 78 [64] Vibrato Delay GS GS   RP-021
  79   Undefined - -   RP-021
    80-83   General Purpose
5-8
- 汎用操作子
(1バイトのみ)
 
  Dream 80 [4] Reverb Program - 汎用操作子5  
  Dream 81 [2] Chorus Program - 汎用操作子6  
    84   Portamento Control - Source Note
On/Off(CC65)は無視
 
    85-87   Undefined - -    
    88   High Resolution
Velocity Prefix
- - On / Off 下位7bit
0x80-0x3ffff
Velocity 0では無効
PR-053
    89-90   Undefined - -    
Effect
Controller
GM2 91 [40] Reverb Send Level 2695はDefault未記載  
  92   Tremolo Depth        
GM2 93 [0] Chorus Send Level    
  94   Celeste(Detune)
Depth
Delay Send Level
-    
  95   Phaser Depth - -    
    96   Data Increment(+1) - - (N)RPNの値を操作 RP-018
    97   Data Decrement(-1) - - (N)RPNの値を操作 RP-018
NRPN

MSB 1

LSB
Sound
Controller

MSB
24-31

LSB
Drum Note

値のLSBは
無効

  98 [0x7F] NRPN LSB ※1    
GS   8 Vibrato Ratio Sound Controller
CC71-78に対応
[64] Relative
 
GS   9 Vibrato Depth  
GS   10 Vibrato Delay  
GS   32 TVF Cutoff  
GS   33 TVF Resonance  
GS   99 TVF&TVA
Attack Time
 
GS   100 TVF&TVA
Decay Time
 
GS   102 TVF&TVA
Release Time
 
    0x7F null 値操作を無効  
  99 [0x7F] NRPN MSB ※1    
GS   1 →LSB     Sound Controller  
GS   24 Drum inst.
Pitch Coarse
[64] Relative  
GS   26 Drum inst.
Level
   
GS   28 Drum inst.
Pan
0: Random
1-127: L→R
 
GS   29 Drum inst.
Reverb Send L
   
GS   30 Drum inst.
Chorus Send L
   
GS?   31 Drum inst.
Delay Send L
- SC-88 / Pro
専用と記載
 
Dream   0x37   - SAM2695 Special  
    0x7F null 値操作を無効  
RPN

項目
MSB(0)
/ LSB

値設定
CC6

CC38

値の増減
CC96
or
CC97
GM 100 [0x7F] RPN LSB    
GM   0 Pitch Bend
Sensitivity
[semitone] / [cent]
[2 / 0]
 
GM   1 Channel Fine
Tuning
[-100, +100) [cent]
[0x40 / 0]
RP-022
GM   2 Channel Coarse
Tuning
[-64, +63] [semitone]
[64]
RP-022
    3 Tuning Program
Select
- - 0-127 CA-020
    4 Tuning Bank
Select
- - 0-127 CA-020
GM2   5 Modulation Depth
Range
- - MSB: [semitone]
LSB: [100/128 cent]
0 / 0x40
CA-026
MPE   6 MPE
Configuration
- - Ch [0/F]: Lower/Upper
0: MPE OFF
1-15: Member Channels
CA-034
    0x7F null 値操作を無効  
GM 101 [0x7F] RPN MSB    
    0 →LSB     有効  
    0x7F null 値操作を無効  
    102
-119
  Undefined        
                 
Channel
Mode
Message
GM2 120 0 All Sound Off All Sound Off  
GM 121 0 Reset All
Controllers
項目は色を参照

 
  122 0/[127] Local Control - - 0:OFF 127:ON  
GM 123 0 All Notes Off All Notes Off  
GM2 124 0 Omni Off - All Notes Off  
GM2 125 0 Omni On - All Notes Off  
GM2 126 0-16 Mono On All Sound Off ※2  
GM2 127 0 Poly On All Sound Off ※2  

※1 デフォルトでは無効、有効にするためにはGS Resetが必要

※2 MIDI 1.0規格書には”オール・ノート・オフ”と記載

 

参考資料

https://amei.or.jp/midistandardcommittee/RP&CAj.html

  • RP-024 "GMシステム・レベル2 v1.0(日本語版)"
  • RP-024 "GMシステム・レベル2 v1.2a(英語版)"

https://amei.or.jp/midistandardcommittee/MIDIspcj.html

  • MIDI1.0規格書

 

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/products/unit/Unit-Synth/SAM2695.pdf

  • SAM2695 Datasheet (SAM2695.pdf)

 

 

 

Unit-Synth (SAM2695) その3 Pitch(1cent以下のTuning)

SAM2695 Pitchに関する問題点(経緯)

MIDIでPitchと言えば、Note、Pitch Bend、Portamento、Vibrato、Tuning等々いろいろありますが、ここで取り上げる問題点は主にTuningです。

問題に気づいた最初のきっかけは、M5Unit-Synthのコードを眺めていた時です。

github.com

src / M5UnitSynth.cpp

void M5UnitSynth::setTuning(uint8_t channel, uint8_t fine, uint8_t coarse) {
    uint8_t CMD_CONTROL_CHANGE[] = {
        (uint8_t)(MIDI_CMD_CONTROL_CHANGE | (channel & 0x0f)),
        0x65,
        0x00,
        0x64,
        0x01,
        0x06,
        (uint8_t)(fine & 0x7f)};

    sendCMD(CMD_CONTROL_CHANGE, sizeof(CMD_CONTROL_CHANGE));
 ...
}

引数fine が1バイト? となりました。データシートも見てみましょう。

P27

RPN 0001h
Bnh 65h 00h 64h 01h 06h vv
Fine tuning in cents (vv=00 -100, vv=40h 0, vv=7Fh +100

やはりLSBの記載はありません。vvの範囲を見ると1cent単位の精度が確保できていないことがわかります。

Date Entry LSB未対応

データシートのP26をチェックすると、CTRL 06(Data Entry MSB)に対し、CTRL 38 (Data Entry LSB)の記載がないことが確認できます。
当初、これはデータシートの記載ミスだろうと思いました。
しかし、実際にLSBを送信したところ無反応でした。
※ちなみにテストは同音色をDetuneし、そのうなりで判断しています(テスト用音色にsin波が欲しいところ)。

このことはLSBを使用するChannel Fine TuningとPitch Bend Sensitivityに影響します。
またChannel Fine Tuningは、General MIDI音源の必須項目なので、厳密な意味でGM音源と言えなくなるのでは?という話になります。

Channel Fine Tuning

一応、正しい仕様も見ておきましょう。
この部分はコードで書いた方がわかりやすいので、Cで記述します。

 int x = (msb << 7) + lsb; // [0x0000, 0x3fff]
 float cents = (float)(x - 0x2000) / (float)(0x2000) * 100.0f; // [-100, 100)[cent]

分解能は100/8192(0x2000)で、約0.0122[cent]で、centsの最大値は+99.988[cent]ぐらいになります。
※正確には上下非対称になっている点に注意して下さい。

さて、MSBしか存在しないということは、Channel Fine Tuningにおいて、1cent以下のチューニングができないということになります。ただPitchを変更する方法は他にも存在するので、用途に応じて代替手段を取ることができます。

1cent以下のチューニング 代替手段

以下の表を参考にして下さい。

マスター(チャンネル共通) 最小値 最大値 精度
GS Master Tune -100.0 +100.0 0.1

※GS Master Tuneは正確に精度0.1であり、上下対称の仕様になっています。

チャンネル別 最小値 最大値 精度
GS Scale Tuning -64 +63 1
GM Pitch Bend - - -

※Scale TuningはOctave間のTuning機能で、本来は音律の指定に使います
※Pitch Bendの各項目の値は、Pitch Bend Sensitivityの値により変化

取り上げたGS Master Tune, GS Scale Tuningは、GM仕様にも同様の機能があります。
しかし、SAM2695はGM仕様よりGS仕様に準拠している部分が多いので、GM慣れしているとちょっと戸惑うかもしれません。


Pitch Bend Sensitivity

こちらのLSBに関しては、仕様上無視することが可能なので、そのようになっていると認識していれば問題ありません。
ちなみにMSBが半音(100 cent)、LSBが100/128 cent単位になります。



次回は、Filterを取り上げるつもりだったのですが、その前に、一度MIDI仕様の表(主にコントロールチェンジ)を作成してみるつもりです。

Unit-Synth (SAM2695) その2 構成&同時発音数

 

構成

まずデータシートからメインのブロック図を引用します。

 

P42

8-2 SIGNAL PROCESSING SYNOPTIC

 

SAM2695 ブロック図

 

前回説明したようにUnity-Synthの構成上、[Mike] - [Echo]に関しては検証しません。信号の流れは、デフォルト(上図のOutput Selectorの表示通り)で、[MIDI(シンセサイザー)] -> [GS仕様のReverb/Chorus]とMix -> [Dream固有の4Band EQ] -> [Dream固有の3D(Spartial Effect)]となっています。

残念ながら、MIDIシンセサイザーの構成に関する詳細な説明はありません。後述します。

"Reverb / Chorus"はGS仕様で、RolandSC-88Proに近いですが、パラメータPre-LPFは存在していません。

"EQ"は2x2構成となっており、EQ2(bass/treble), EQ1(med low/high)で表されます。

EQ2のみONの場合 2Band、追加でEQ1をONにすると 4Band となります。

デフォルトでEQは有効になっているので、その値には注意が必要です。

  Level Frequency
Range [dB] Default Range [kHz] Default(HEX) Default
EQ2 Low band (bass) [-12, 12] +6dB [0, 4.7] 0c 444.1Hz
High band (treble)  [-12, 12] +6dB [0, 18.75] 40 9448.8Hz
EQ1 Med Low band [-12, 12] 0dB [0, 4.2] 1b 892.9Hz
Med High band [-12, 12] 0dB [0, 4.2] 72 3770.1Hz

※Frequency Defaultに関しては、RangeとDefault HEX値から"linear scale"(データシート曰く)で計算しています。実際の動作は未検証です。

"3D"に関しては詳細な図がありますので引用します。

 

P42

8-3 SPATIAL EFFECT BLOCK DIAGRAM

3D (Spatial effect)

3Dは上記のようなステレオエフェクトになっています。

Unit-Synthの場合、単なるDelayエフェクトという扱いになりそうです。

ちなみにNRPNの表記がありますが、Dream固有のパラメータは "2-1 SPECIAL MIDI MESSAGES" P15- にまとめられていて、NRPNを送信する形で変更可能です。

 

今後のためにVolume Nrpn 3720hの説明をチェックしておきます。

NRPN #
(High|Low)
Description Power-up
Default
3720h Spatial Effect volume 0= no effect, 7Fh= maximum effect 00h

Defaultでは、volume = 0で無効です。

 

何も記載がないMIDIシンセサイザー部分ですが(サンプルプレイバック方式では珍しいことではない)、本格的にパラメータを操作する足がかりになるように少し言及しておきます。シンプルなサンプルプレイバックシンセサイザーは基本的に似た構造を取るので、かの有名なSoundfontの構成と比較してみることにします。

 

以下、Soundfont2.04の仕様書(sfspec24.pdf)からの引用です。

P48

Soundfont 2.04 シンセ構成図 参考として

作図に不慣れなため、SAM2695に関しては、相違点だけ挙げておきます。これはあくまで"3- DETAILED MIDI IMPLEMENTATION"のパラメータをチェックした上での推測になります。

  • Modulation Envelopeなし
  • Modulation LFOはRateは全チャンネル共通
  • Volume EnvelopeはADR構成 ( SoundfontはDAHDSR )

 

Modulation LFOの仕様は特殊で、Rateが全チャンネル共通です。パラメータ設定にも記載があります。

P 28

SYSEX F0h 41h 00h 42h 12h 40h 2ph 03h vv xx F7h

 

Mod lfo1 rate control (default = 40h).

n is don’t care.

Rate is common on all channels

上記の "n" is don't care は typo で、正しくは "p" is don't careです。
(全チャンネル共通は変わりません)
このような仕様になっている理由は、パフォーマンスのための簡略化だと推測しています。

 

 

同時発音数

 

概要を再掲載すると以下のようになっています。

 

P1

o 64-voice polyphony (without effects)
o 38-voice polyphony + effects

 

同時発音数38は、Defaultの設定です。

effectsのON/OFFにより、同時発音数は変化します。

Defaultでは、2ボイス仕様の音色は、同時に19音しか鳴らせません(ちょっと心許ないかも...)。

 

また最大同時発音数を超えた場合の挙動ですが、消音アルゴリズムにより古い音がOFFになります。これは音量の減衰を伴わないため、ノイズの原因になり得ます。

 

その詳細は、"5- NRPN 0375Fh: Effect on/off – Polyphony selection" P34-で確認できます。

 

またP35には具体的なエフェクトの組み合わせ例が載っていますが、これが冗長で、間違いも含まれています。一部、抜粋します。

...

30h (REV, CHRのみON) の POLY48は間違いで正しくは47

...

 

分かりにくいので、表を作成しました。

 

Effect - E REV CHR OM
(3D)
M EQ2 EQ1 Any
Bit 7 6 5 4 3 2 1 0  
Hex - - 0x20 0x10 0x8 - 0x2 0x1  
-POLY - - -13 -3 -1 - -4 -4 -1

 

  - E REV CHR (3D) M EQ2 EQ1 Any - POLY HEX
Max - - - - - - - - 0 0 64 0x0
Default - -  -13  -3  -1 -  -4  -4  -1 -26 38 0x3B
お勧め - -  -13  -3 - -  -4 -  -1 -21 43 0x32

上の表が各EffectをONにした場合、消費発音数(-POLY)を表します。

下の表が設定別の合計消費発音数(-) / 最大同時発音数(POLY) / 設定値の16進バイト表記(HEX)(データシートのNRPN 375F vv)になります。

 

※EffectのE(ECH)、M(MIC)は入力部分なので、OFF設定で無視(動作も未検証)

※OMはOutput Mode (Spatial effect) ブロック図では、3Dとなっているので、(3D)表記にしています。

※以下の説明にあるように、POLYを1消費する構成がある。(ECH, MICを除いて)確認した限りでは、どのエフェクトでもONになると1消費するので、これを"Any"表記としています。

In some configurations, polyphony is decreased by 1 for reason of internal mixing.

 

ところで構成で見てきたように、Defaultでは、EQ1のLevelは0dB設定、3DはVolume 0で"no effect"設定になっています。そのため、これらのEffectの有効フラグをOFFにしても、Default設定と音に違いは生じません。上の表のお勧め設定は、これに相当します。

 

そんな訳で、以下のNRPNコマンドを送れば、同時発音数を5 POLY稼げるということになります。

[0xB0, 0x63, 0x37, 0xB0, 0x62, 0x5F, 0xB0, 0x06, 0x32]

※ここでのチャンネル指定は、何番でもOKです。

 

Unit-SynthにおけるEQの設定に関する疑問

SAM2695のEQ2のデフォルト値は、チップとして意図的に良い音質を追求した設定値になっているはずです。ただ、Unit-SynthにはDACとスピーカーが含まれていますので、より適した設定値がありそうです。もし詳しい方がいましたら、ご教授頂けると幸いです。

 

次回はPitchを取り上げる予定です。