作るサウンドエレクトロニクス

4 ハイブリッドシンセサイザ


本章では、「ハイブリッドシンセサイザ」と呼ばれて一世を風靡した 「CPU制御のアナログ方式電子楽器」の音源システムを実際に製作しながら 検討します。まず最初に、誤解の多いMIDIにまつわる遅延の「迷信」に ついての検証実験を行い、MIDIとサウンドエレクトロニクスとの関係に ついて考察します。そして、古典的な「アナログシンセサイザ」「トップ オクターブ方式」「サンプリングメモリ方式」などについて紹介し、 さらに「ポリフォニックとアサイナ」という重要なテーマを検討した上で、 AKI-H8をモジュールとして活用したハイブリッドシンセサイザ、という 具体的なシステムの製作実験に挑戦していきましょう。

●「MIDI遅れの迷信と真実」の検証実験

前章でAKI-H8によるシステム開発の実験をするなかで、すでにMIDIを扱って いますが、このMIDIについては、まだ多くの誤解と迷信があるようです。 図4.1 は、筆者がよく質問される「MIDIは遅れる」という迷信に関する、 技術的なポイントの解説です。ここではあまり詳細に検討する紙面がありま せんが、結論から言えば、「MIDIが遅れる」という事実のほとんど全ては 「MIDI音源システムのCPUソフトの動作」に起因しています。他の要因に ついては、時間的なオーダとして無視できるほどに小さいのです。そして 問題なのは、市販の電子楽器(音源モジュール)の場合には、この主要な 遅延原因の部分がメーカのノウハウ、というブラックボックスに入っていて、 カタログ等でも絶対に公開されていない、という点にあります。

そこでまず、 図4-1 で「真実!」と記載された部分、つまり「MIDI音源の遅れ」 の実際の様子とオーダについて、検証実験を行ってみましょう。ここでは筆者 の計測条件を詳細に記述して、読者の皆さんが正確に追試を行えるように 心がけてみましたので、興味のある方は、それぞれお手元の電子楽器について 調べてみてはいかがでしょうか。

まず、実験の道具立てから始めます。パソコンのシーケンスソフトウェアで、 「分解能は4分音符を960ステップまで実現」などと言っているものがあります が、そもそもパソコンの時間精度はそれほど良くありませんので、これは まったく技術的には無意味なものです。そこで、今回の実験は、ハードとして 道具を用意する必要があります。 図4.2 は、この計測のための実験システム全体 の回路図です。ソフトウェアの走るAKI-H8を使用していますが、計測の本質 部分には、パソコンのようなソフトが介在していない、というのが重要な点です。

リスト4.1 は、この 図4.2 のAKI-H8に用意したソースプログラム、 リスト4.2 は AKI-H8にダウンロードするオブジェクトファイルです。これを用いることに より、読者の皆さんも同じ条件で追試できます。ここでは、ポートPA3のスイッチ (機械的にどちらかの状態に固定するスライドスイッチを使用して下さい) によって、

 OFF状態:シングルトリガモード
 ON状態:トラフィックモード(後述)
の二つの動作モードを設定します。そして、ポートPA2のスイッチ(ノンロック タイプのプッシュスイッチを使用して下さい)によって、ONした瞬間に、MIDI の9チャンネルでノートナンバ84のピッチ、ベロシティ127(最大)のONイベントを 送り、すぐさまそのOFFイベントを送り、その瞬間にポートPB0の信号をローから ハイに立ち上げて、しばらくするとローに立ち下げる、という動作をします。 つまり、このAKI-H8システムは、プッシュボタンの操作によってMIDIの発音 情報を出力するとともに、その「情報送出タイミング」という電気的信号を、 ソフトウェアでなくハード的に瞬時に発生している、というところがポイント となります。パソコンのシーケンスソフトでは、この基準タイミングの遅れと ばらつきの要因を排除できないのです。

図4.3 は、このシステムでモードを「シングルトリガモード」に設定しておいて、 トリガ用のプッシュスイッチを押した時の、AKI-H8のMIDI用シリアル出力端子 の信号を計測した様子です。上段のPB0のポート出力信号は、下段のMIDI信号 (通常はハイレベル)がごそごそと約2msecほど動いた(MIDI情報は5バイト ですので、320μsec * 5 = 1.6msec ほど)最後のあたりで信号が立ち上がって いるのが判ります。厳密に同時ではありませんが、この信号の立ち上がり部分 を「該当するMIDIイベントが発信された」基準タイミングとして使用します。

図4.4 は、このシステムでモードを「トラフィックモード」に設定しておいて、 トリガ用のプッシュスイッチを押した時の、AKI-H8のMIDI用シリアル出力端子 の信号を計測した様子です。上段のPB0のポート出力信号はまったく同じ条件で、 「該当するMIDIイベントが発信された」基準タイミングとなっていますが、 下段のMIDI信号ラインには、かなりの密度で他のMIDI情報も混在させています。 ただし、PB0のハード的信号は、MIDI出力ルーチン内で間違いなく、対応する イベントのMIDI情報を出力するようにしているところがポイントです。 ここで混ぜている情報ですが、

 ・MIDI1チャンネルとMIDI16チャンネルの両方(9チャンネルをはさむ)
 ・ノートナンバとして0から127までを順次スキャン
 ・ベロシティの値は「1」(最低レベルなのでほとんど聞こえない)
 ・ONイベントの直後に対応するOFFイベントを続ける(同時ON数は常に1音)
というものを、MIDIラインに約70%の密度でびっしり流れるように調整して 設定したものです。混ぜられている情報はすべてベロシティが最小値でほぼ 聞こえないので、受け手の音源からは、プッシュスイッチのタイミングに よって、シングルトリガモードと同じような単音のサウンドが出てきます。 そこで、トリガ信号からこの単音サウンドまでの遅延を計測できるわけです。

さて、それではさっそく、筆者の実験結果を紹介してみましょう。実験は基本的 に全て、それぞれ20回の「トリガスイッチのプッシュ」を行い、ポートPB0の 信号の立ち上がりを基準として、それぞれの音源で高速立ち上がりの「ピアノ 音色」による発音の様子を同時に計測して、そのスタートまでの遅延時間を 計測しました。個々の計測データそのものは省略して、ここでは結果をまとめた 図4.5 のグラフによって検討します。このグラフの縦軸は、MIDI送信トリガから 実際の発音までの遅延時間で、横方向には6種類の音源システムを並べて比較 しています。また、それぞれの音源システムの左側はシングルトリガモード(S)、 つまり単音イベントへの最速反応の時間、また右側はトラフィックモード(T)で、 多量のMIDIメッセージの洪水を受信しながら、該当するイベントの発音までの 遅延を調べたものです。いずれも20回の実験で最大値と最小値、さらに平均値 をプロットしています。

音源システムの一番左側は、筆者の手元の「Roland SC-88ST Pro」という製品 のデータです。なお、同じ型番の製品でもロットごとに内蔵CPUソフト等は変更 されていきますので、あくまで筆者の持っている音源のデータであることに注意 して下さい。ここではシングルトリガでは安定した3msecの遅延で発音し、非常に 高速なレスポンスであることが判ります。ただしトラフィックモードでは、 最短で17msec、最長で125msecの発音遅延があり、かなりのばらつきがあります。 平均の72msecという遅延は、音楽の専門家でなくても十分に「判ってしまう」 遅延ですから、このような極端に厳しい条件とはいえ、たとえば音楽的時間を 調べるような音楽心理学の実験に使用できない事が判ります。筆者はこの結果に 驚いて、ちょっと古いのですが、さらに3種類のMIDI音源を並べて実験し、この グラフの隣にプロットしてみました。ほぼ同じような傾向ですが、機種の下に コメントした内容に注意しておきましょう。実験してみると、「MIDIを送信した というトリガが出ているのに発音されず沈黙している」という現象が頻発した のです。これは、

 ・多量のダミーデータの処理に追われて肝心のデータを受け損ねた
 ・ONとOFFの間隔が非常に小さいので、場合によっては発音を無視する
というような可能性が考えられますが、詳細は不明です。少なくとも、この現象 にはメーカや機種ごとに傾向の違いはあるようでした。

そしてグラフの右側の二つは、筆者の手持ちの Macintosh PowerBook 2400c を用いて、パソコンのソフトウェアによる音源システム、つまり「ソフトシンセ」 について同様に実験したものです。条件としては、両者はCPUのクロックが 180MHzと240MHzという違いがあるだけで、あとは以下のような条件で共通です。

 ・MacOS 8.1.0
 ・RAM 80MB
 ・CPU PowerPC 603ev(built-in FPU)
 ・CPU speed 240MHz/180Mhz
 ・Bus speed 40MHz
 ・QuickTime 3.0.0
 ・OMS 2.3.4
 ・MAX 3.5.9
つまりここでは、リアルタイム処理に強いMAXを用いて、「MIDI入力をそのまま QuickTime音源に送る」というもっとも単純なパッチ( 図4.6 )によって、 サウンドを鳴らしています。ここで気付くのは、最初の1音については、32-34msec とかなり遅いのに対して、トラフィックモードでもほとんど変化がない、という 事です。もしかすると、多量のトラフィックの場合には内部処理を最初から放棄 するようになっているのかもしれませんが、「発音むら」の点では「たまに鳴ら ない」という程度で良好だったので、これは内蔵CPUの性能の差なのかもしれま せん。

サンプリングオシロスコープで計測した個々の信号の様子を全て紙面に載せる余裕 はありませんので、載っていない図は付録CDROM内のデータトラックを参照して みて下さい。以下、代表的な機種ごとの測定結果の図について、番号とデータとの 対応を紹介しておきます。◎印はシングルトリガモード、◆印はトラフィック モードでの計測データです。

「Roland SC-88ST Pro」
   ◎遅延2msec( 図4.7
   ◆遅延51msec( 図4.8
   ◆遅延12msec( 図4.9
   ◆遅延111msec( 図4.10

「Roland SC-55markII」
   ◎遅延3msec( 図4.11
   ◆遅延153msec( 図4.12
   ◆遅延40msec( 図4.13

「Korg 05R/W」
   ◎遅延3msec( 図4.14
   ◆遅延90msec( 図4.15
   ◆遅延136msec( 図4.16

「Kawai GMega」
   ◎遅延3msec( 図4.17
   ◆遅延166msec( 図4.18
   ◆遅延62msec( 図4.19

「PowerBook2400c」
   ◎遅延33msec( 図4.20
   ◆遅延43msec( 図4.21

この実験の紹介と結果については以上です。ここから得られる結論としては、

 ・ハード音源とソフト音源では、1音目の発音遅延に10倍の違いがある
 ・多数のMIDI情報を受けた場合には、市販の電子楽器では発音遅延が大きく
  なり、さらに発音遅延のばらつきが非常に大きく、発音モレも起きてくる
 ・ソウトウェア音源では、多数のMIDI情報に対する反応がハード音源とは
  かなり異なっているようである
ということになるでしょうか。メーカからは全て伏せられていることなのですが、 MIDIを活用するためには、このあたりは注意していく必要があるでしょう。

●古典的アナログシンセサイザ

本章のタイトル「ハイブリッドシンセサイザ」とは、アナログ方式と ディジタル方式を組み合わせたシンセサイザ、という意味です。その 歴史的にもっとも基本となる古典的なアナログシンセサイザとしては、 ムーグ博士の「ミニムーグ」という古典的名機が有名です。現在では、 とても高価なビンテージマシンとして、一部のマニアしか所有していない ものですが、これは 図4.22 のようなシステム構成をしています。

まず最初に、演奏する人間(この当時は自動演奏するコンピュータは 存在してしませんでした)との接点として、鍵盤ブロックがあります。 ここでは、それぞれの鍵盤ごとに、そのピッチに対応した異なる制御電圧を 発生するのがもっとも重要な機能です。この時代のシンセサイザは「単音楽器」 で、鍵盤で和音を弾くことがなかったので、 図4.23 のように、単純に基準電圧を 等しい抵抗で分割した電圧を用意して、鍵盤ごとのスイッチでその中の一つ を選択する、という方式で十分でした。ただし、サウンドの周波数を音楽的 に見た場合には、周波数が2倍となるごとに「オクターブ」という等間隔に 並ぶ必要がありますので、等間隔の電圧から図のような指数変換回路を 経て、次段のVCOの制御電圧を作る必要があります。 [→章末コラム:音楽に用いるピッチと周波数の一覧]

また鍵盤ブロックでは、この制御電圧とともに、「鍵盤のON/OFF」という 演奏情報も取り出して、次段のEGのための制御信号として出力しています。 なお、このような方式であれば、本章の最初で触れた「MIDI遅れの迷信と 真実」の検証実験のような、ON/OFF指定からの遅れというのは存在せず、 演奏者にとって快適なレスポンスが保証されています。

鍵盤からのピッチ制御電圧を受けるのが、電圧制御オシレータ(VCO)です。 ここでは、後段のVCFフィルタで豊富な音色変化を作るために、倍音を多く 含んだ、鋸歯状波、方形波、三角波などの波形を生成しています。 また、数Hz程度の超低周波オシレータ(LFO)の電圧も同時に与えること で、ピッチが細かく振動して、音楽的には「ビブラート」の効果を得る こともできます。LFOのスピードやデプス(かかり具合)なども、全て パネルに並んだボリュームでコントロールします。 そして、鍵盤のキーイングによって、同時にエンベロープジェネレータ (EG)もトリガして、音の立ち上がり時のピッチ変化をつけることもできます。 EGで生成するエンベロープは、既に第2章で紹介したADSRという形状の ものがもっともポピュラーです。

このVCOブロックについては、アナログ時代には

 ・ペアトランジスタによる指数変換回路
 ・トランジスタやICによる電圧制御発振回路
などの色々な方式が提案されてきたのですが、その後、もっとも早く ディジタル化(ハイブリッド化)されて、アナログVCOは早々に消えて しまう運命となりました。その理由は、人間の聴覚のうち、音量や音色に 比べて、音高(ピッチ)に対する分解能と精度はもっとも高精度であり、 アナログ回路に固有の誤差や変動によるピッチの「狂い」が、もっとも 耳障りとなったためです。そこで、本書では入手困難な特殊なトランジスタ を使用したアナログ回路に深入りすることは避けて、ピッチについては ディジタル方式で正確に実現することにします。

また、VCOの出力を受けて、次にあるのが電圧制御フィルタ(VCF)のブロック です。これは音の3要素では「音色」の制御を担当する、シンセサイザ の心臓部とも言えるブロックです。固定的なフィルタで音色の特性が変化する ことは既に述べてきましたが、アナログシンセサイザの場合には、 代表的なVCFの特性としては、 図4.24 のようになります。まず、ローパス フィルタの音色的効果の基本となる「カットオフ周波数」を、制御電圧に よって上下に移動することができます。これは、たとえばトランペット のような吹奏楽器の雰囲気には必須の要素で、うまくエンベロープを 作った制御電圧でこのカツトオフ周波数を動かすと、人間の話し声の ような雰囲気を作ることもできます。また、カットオフ周波数をLFOで 周期的に動かすと、ギターの古典的なエフェクトである「ワウワウ」の ような効果を実現できます。

また、フィルタのカットオフ周波数付近の共振特性を大きく持ち上げること ができるのも重要な特徴で、このレゾナンス(共鳴)特性の制御に よって、色々な楽器に特有の「クセ」をつけたり、さらに持ち上げて そのまま発振させてしまうこともできます。このVCFによる音色上の特長は、 ロックやポピュラーの世界ではいくつもの「定番」的なサウンドとして 受け継がれています。ディジタル方式でなかなか実現できない場合には、 アナログシンセサイザの音色をそのままサンプリングして記録した音を 混ぜて再生することまで行われています。

そして、VCFで音色に関する時間的変化を受けたサウンドは、VCAの ブロックに来ます。ここは、ゲインを電圧で制御するアンプであり、 最終的なサウンドのエンベロープを形成する機能を持ちます。ここにも EGとともにLFOがあり、この低周波信号による持続的な音量変化は「トレモロ」 効果と呼ばれています。

このようなアナログシンセサイザの欠点は、アナログならではの精度と 安定度にあります。電源を入れてしばらくはピッチなどの動作が安定 しないとか、他の楽器とのチューニングがなかなか合わない、という 使いにくさがあります。また、基本的に 図4.22 という壮大なシステムを 使って、なんとたった1音しか生成できません。そこで、このアナログ シンセサイザのブロックを6個とか8個とか、多数並べてまとめてマイコン で制御する、という方向に発展していきました。この様子は、本章の 「ポリフォニックとアサイナ」のところで検討していきましょう。 また、本章では、 図4.22 の古典的アナログシンセサイザを念頭に置いて、 現代版のシンセサイザを製作していくことになりますから、この図と その仕組み(サウンドの3要素との関係)は、十分に理解しておきましょう。

●トップオクターブ方式

単音(モノフォニック)電子楽器のシンセサイザとは別に、最初から 多数の鍵盤を持って複音(ポリフォニック)であることを要請された 電子楽器としては、電子オルガンと電子ピアノがあります。これらの 楽器では、基本的に「押された鍵盤の数だけの音が出る」という機能 が必須となります。(実は、現在市販されている電子オルガンや電子 ピアノには、「同時発音数」という仕様があって、まったくこの条件を 満たしていないのですが、一般のユーザはその事実に気付かないで 使っています。(^_^;))

アナログシンセサイザでは、単音を出すだけで相当なシステムが必要に なっていましたが、これをずらりと並べたのではコスト的に民生機器 になりませんから、発想の転換が必要となります。そこで、歴史的には、 「音質は二の次として、とにかく全鍵ポリフォニックを実現する」と いうアプローチが行われてきました。そこで登場した技術が、「トップ オクターブ方式」という、もっとも初期のディジタル技術です。 オルガンやピアノなどの電子鍵盤楽器では、この全鍵完全発音とともに、 和音演奏でハーモニーが濁らないために、水晶発振による高精度な ピッチ設定機能が必須のものでした。音色回路やエンベロープ回路が まだまだアナログ技術を中心とする時代にあって、とにかくピッチの部分に 正確なディジタル回路技術を導入するところから、ディジタル電子楽器の 歴史はスタートしたわけです。

ここでは、紙上のシミュレーションによって、トップオクターブ方式 の電子楽器を設計してみることにしましょう。興味のある読者は、 実際にICを並べて製作することもできますので、その回路図までを設計して みることにします。過去には、このような設計による「電子楽器用トップ オクターブLSI」が実際に半導体メーカ(TIや東芝が有名でした)によって 製造され、市販されていたのです。

音楽のピッチの上での枠組みは、12等分平均率の12種類のピッチさえ 正確に生成できれば、あとのオクターブ関係は「分周回路」によって 次々に1オクターブ下のピッチを生成できますから、もっとも高い周波数 の12個の周波数が生成できればいいことになります。そこでここでは、 目標として、以下のオクターブのピッチを取り上げてみましょう。 [→章末コラム:音楽に用いるピッチと周波数の一覧]

この基準となる最高オクターブ(トップオクターブ)の周波数さえ設定されて しまえば、そこから下のオクターブのピッチは厳密に分周されていきますので、 周波数の設定精度は、トップオクターブの設計に全て依存することになります。

-------------------------------
Note  MIDI  HEX    A4=440Hz
-------------------------------
A  6   93  [5D]   1760.000Hz
Bb 6   94  [5E]   1864.655Hz
B  6   95  [5F]   1975.533Hz
C  7   96  [60]   2093.005Hz
C# 7   97  [61]   2217.461Hz
D  7   98  [62]   2349.318Hz
Eb 7   99  [63]   2489.016Hz
E  7  100  [64]   2637.020Hz
F  7  101  [65]   2793.826Hz
F# 7  102  [66]   2959.955Hz
G  7  103  [67]   3135.963Hz
G# 7  104  [68]   3322.438Hz
-------------------------------

共通の基準となる水晶振動子の周波数を「ある整数でクリアさせるカウンタ」 で分周するのですから、もっとも分周データの大きいのは最低ピッチのA6 です。そこで、分周データを何ビットとするかで、およその基準周波数が 決まります。とりあえず「分周データのビット数で表現できる最大値」にA6 の周波数(1760Hz)を乗算すると、

----------------------------------------------
分周データのビット数  その最大値  基準周波数  最寄りの水晶周波数
----------------------------------------------
           8                 255       0.4488MHz         400KHz
           9                 511       0.8994MHz         800KHz
          10                1023       1.8005MHz         1.8MHz
          11                2047       3.6027MHz         3.5MHz
          12                4095       7.2072MHz         7.0MHz
----------------------------------------------
となります。最寄りの水晶周波数というのは、得られた基準周波数を越えない 値で、秋葉原あたりで入手できそうな、キリのいい数値ということです。

そこで、今度はこの水晶周波数を用いたとして、具体的にトップオクターブ を構成するための分周データを、12音のそれぞれについて求めることに します。具体的には(電卓でもできる作業ですが)、リスト4.5のような Cプログラムによって、以下のような結果となりました(付録CDROMのリスト 4.6に、分周データが8ビットから12ビットまでの全ての結果があります)。

まず、分周データを8ビットとしたシミュレーション結果を抜き出して検討 してみましょう。

----------------------------------------------
Div. Data = 8bit : Standard X'tal Freq. = 400000.000000 Hz
     A  6   93  [5D]   1760.000Hz   data= E3 (0.120%)  data= E4 (0.319%)
     Bb 6   94  [5E]   1864.655Hz   data= D6 (0.242%)  data= D7 (0.225%)
     B  6   95  [5F]   1975.533Hz   data= CA (0.236%)  data= CB (0.258%)
     C  7   96  [60]   2093.005Hz   data= BF (0.059%)  data= C0 (0.462%)
     C# 7   97  [61]   2217.461Hz   data= B4 (0.215%)  data= B5 (0.339%)
     D  7   98  [62]   2349.318Hz   data= AA (0.154%)  data= AB (0.431%)
     Eb 7   99  [63]   2489.016Hz   data= A0 (0.441%)  data= A1 (0.183%)
     E  7  100  [64]   2637.020Hz   data= 97 (0.455%)  data= 98 (0.206%)
     F  7  101  [65]   2793.826Hz   data= 8F (0.121%)  data= 90 (0.574%)
     F# 7  102  [66]   2959.955Hz   data= 87 (0.102%)  data= 88 (0.634%)
     G  7  103  [67]   3135.963Hz   data= 7F (0.435%)  data= 80 (0.350%)
     G# 7  104  [68]   3322.438Hz   data= 78 (0.328%)  data= 79 (0.501%)
----------------------------------------------
データの見方ですが、たとえば最上段のA6の場合、A=440Hzの基準周波数に 対する12等分平均率のピッチは1760.000Hzです。これをF0としましょう。 すると、ここでの水晶周波数:400KHzを分周してF0を作り出す整数と しては、16進表記で「E3」というデータになり、この時の周波数(目標周波数 よりもやや高い)の設定誤差は、
    (得られた周波数 − 目標周波数)/ 目標周波数 * 100
として、0.120%という誤差の値となります。分周データは「切り捨て」を していますので、ここに1を足した値「E4」が、目標周波数よりもやや低い 周波数を得るための分周値となり、この誤差は、
    (目標周波数 − 得られた周波数)/ 目標周波数 * 100
として、0.319%になった、ということです。トップオクターブでは、この 誤差の小さい方の分周データを採用する、ということにすれば、この8ビット においては、もっとも周波数の誤差の大きいのは、
     G  7  103  [67]   3135.963Hz   data= 7F (0.435%)  data= 80 (0.350%)
のところで、「0.35%の誤差」ということになります。ところで、音楽の世界 では、ピッチの単位として「セント」という値で表現します。これは、 「1オクターブを指数関数的に等間隔の比に刻んで、半音を100セント、 1オクターブを1200セントとする」という定義になっています。そこで、 ここでの誤差(0.35%)を計算してみると、これは「約59.6セント」となり、 これでは音楽的にはまったく使い物になりません。(^_^;) 50セントといえば「半音の半分」であり、中東諸国のアラビア音階を構成 しているピッチです。日本のメーカの電子楽器で中東に輸出されるものでは、 わざわざ50セント異なる音階になるように設計変更しているぐらいなのです。

そこで次に、分周データを12ビットとしたシミュレーション結果を抜き出して 検討してみましょう。

----------------------------------------------
Div. Data = 12bit : Standard X'tal Freq. = 7000000.000000 Hz
     A  6   93  [5D]   1760.000Hz   data= F89 (0.007%)  data= F8A (0.018%)
     Bb 6   94  [5E]   1864.655Hz   data= EAA (0.001%)  data= EAB (0.025%)
     B  6   95  [5F]   1975.533Hz   data= DD7 (0.010%)  data= DD8 (0.018%)
     C  7   96  [60]   2093.005Hz   data= D10 (0.014%)  data= D11 (0.016%)
     C# 7   97  [61]   2217.461Hz   data= C54 (0.024%)  data= C55 (0.007%)
     D  7   98  [62]   2349.318Hz   data= BA3 (0.020%)  data= BA4 (0.014%)
     Eb 7   99  [63]   2489.016Hz   data= AFC (0.013%)  data= AFD (0.023%)
     E  7  100  [64]   2637.020Hz   data= A5E (0.019%)  data= A5F (0.018%)
     F  7  101  [65]   2793.826Hz   data= 9C9 (0.021%)  data= 9CA (0.019%)
     F# 7  102  [66]   2959.955Hz   data= 93C (0.038%)  data= 93D (0.004%)
     G  7  103  [67]   3135.963Hz   data= 8B8 (0.008%)  data= 8B9 (0.037%)
     G# 7  104  [68]   3322.438Hz   data= 83A (0.042%)  data= 83B (0.005%)
----------------------------------------------
これも同じように、誤差の小さい方の分周データを採用する、ということにすれば、 この12ビットデータによるトップオクターブ分周方式においては、もっとも周波数 の誤差の大きいのは、
     F  7  101  [65]   2793.826Hz   data= 9C9 (0.021%)  data= 9CA (0.019%)
のところで、「0.019%の誤差」ということになります。これをセント換算 すると「約3.29セント」となりますが、これは音楽の専門家でも十分に納得 できる誤差範囲であり、一般の電子楽器の精度としては上等な部類に入る ものです。そこで、ここではトップオクターブの水晶周波数として7.0MHzを 採用し、12音の生成にそれぞれ12ビットのカウンタを使用することにします。 マスタークロックオシレータとしては、 図4.25 のように簡単なもので十分です。 この出力は、12音のそれぞれを生成するための12ビットカウンタに共通に 供給されることになります。それぞれのピッチで使用する分周データは、 誤差の小さい方を採用するということで、
----------------------------------------------
     A  6   93  [5D]   1760.000Hz   data= F89 (0.007%)
     Bb 6   94  [5E]   1864.655Hz   data= EAA (0.001%)
     B  6   95  [5F]   1975.533Hz   data= DD7 (0.010%)
     C  7   96  [60]   2093.005Hz   data= D10 (0.014%)
     C# 7   97  [61]   2217.461Hz   data= C55 (0.007%)
     D  7   98  [62]   2349.318Hz   data= BA4 (0.014%)
     Eb 7   99  [63]   2489.016Hz   data= AFC (0.013%)
     E  7  100  [64]   2637.020Hz   data= A5F (0.018%)
     F  7  101  [65]   2793.826Hz   data= 9CA (0.019%)
     F# 7  102  [66]   2959.955Hz   data= 93D (0.004%)
     G  7  103  [67]   3135.963Hz   data= 8B8 (0.008%)
     G# 7  104  [68]   3322.438Hz   data= 83B (0.005%)
----------------------------------------------
ということになります。そこで、ここでは一例として、まずデータ「F89」 による、「A6」音を生成する回路を設計してみましょう。実はほとんど 同じような手法で、12音の回路は簡単にできてしまいます。

A6音を生成するための分周回路は、 図4.26 のようになります。かなり 複雑なようですが、要するに入力のマスタークロックに従って、3個の バイナリカウンタ74HC163による12ビットカウンタを構成して、その 最終段を出力としているものです。そして、コンパレータ74HC85には 12ビットバイナリの値として、データ「F89」よりも一つだけ小さい 「F88」が設定されています。これにより、ゼロからF88までのステップ を進んだところで、カウンタの出力とコンパレータの設定値とが一致 して、カウンタは再びゼロに戻る、ということで「F89進カウンタ」が 構成されます。同期カウンタ163を使っているので、一つだけ少なく なるというところがポイントです。

そこで、同じように「C7」音の回路(データとしてD0Fを設定)を 構成したのが 図4.27 であり、「E7」音(データはA5E)は 図4.28 の ようになります。つまり、回路図としてはそれぞれまったく同一構成 であり、コンパレータ74HC85の設定値として+5VにするかGNDにするか、 という部分だけを変更してやればいいのです。個々にICで製作すると 大変ですが、このような同一構成の回路を集積するのをもっとも得意 とするLSIの世界では、システムをLSI化する格好の題材とも言えます。 (なお、残りのトップオクターブのための回路設計については、興味 ある読者の皆さんの課題として、敢えて回路図を載せませんので、 どうぞ挑戦してみて下さい)

さて、このようにして12音を生成してしまえば、あとは楽器としては 簡単なフィルタによる音色回路で音色を生成して、鍵盤ごとのスイッチ でON/OFFしてミキシング、というような流れとなります。 図4.29 は トップオクターブ方式による古典的な電子オルガンのシステム図で、 ここで設計したようなトップオクターブ12音生成用分周回路からの 出力を受けて、12音それぞれにオクターブずつ分周するフリップフロップ がずらりと並びます。そして、それらを組み合わせて音色を生成する ミキシングアンプ回路があり、その出力が鍵盤スイッチによって合成 されます。非常に多量の配線でジャングルのようになりますが、これで 鍵盤数だけの同時発音を実現することができます。 [→章末コラム:オルガンの音色生成の方法、CDROMの14トラック]

また 図4.30 は、トップオクターブ方式による古典的な電子ピアノの システム図で、ここでは音色の生成のために、波形のデューティ比を 変化させたり微分回路や積分回路を利用しています。また、減衰音の エンベロープを生成するための簡単なトランジスタ放電回路が、鍵盤の 数だけ必要になり、鍵盤スイッチはこのエンベロープ回路をトリガする ことになります。これまた、鍵盤の下の基板にずらっと同じ回路が びっしり並ぶことになります。(実は筆者はこのシステムを、中学生の 時に一生懸命、製作したことがあります。トップオクターブはアナログ オシレータを12個並べた簡易型でしたが、多数のフリップフロップを 並べ、トランジスタによる超小型・立体配線のエンベロープ・ゲート 回路を61鍵分、並べました。当時のディジタルICは消費電流が大きく、 冬は動作させているだけで暖房になったものでした。(^_^;))

なお、このような回路方式であれば、多数(鍵盤数だけ全て)の発音を 実現するシステムであっても、本章の最初で触れた「MIDI遅れの迷信と 真実」の検証実験のような、ON/OFF指定からの遅れというのは存在 しません。逆に言えば自然楽器と同等に不自然な遅れのない、演奏者に とって自然で快適な発音レスポンスが保証されています。

●サンプリングメモリ方式

アナログ電子楽器の構成要素のうち、もっとも初期にディジタル化された のは、上記のトップオクターブ方式のような「ピッチ生成」の部分でした。 そして、VCFのフィルタ回路やVCAの可変アンプ回路は、さらにしばらく、 専用アナログICなどによって支えられながら、アナログの世界を保って いました。そして、次にディジタル化されたのは、「波形」の生成の部分 です。ここでは、マイコンとともに登場した「メモリLSI」がその主役と なり、技術的には「サンプリング」の手法によりサウンドを生成します。

まず、簡単な例で見てみましょう。 図4.33 は、EPROM(紫外線消去可能 タイプの書き込み可能メモリ)の載った実験基板です。ここではEPROMに 27C256という、256Kビット(8bit * 32Kbytes)のものを使用して、 そのデータバス出力のところに、8ビットラッチ74HC574による、簡易型の D/Aコンバータを接続しています。この回路のEPROMのアドレスバスに対して、 図4.34 のような「水晶発振−多段カウンタ」回路を接続すると完成です。 ここでは既に、EPROMに リスト4.8 (インテルHEX形式)のデータが書き 込まれている、とします。このデータは、実はリスト4.9のような Cプログラム(このリストは一部を省略しています)によって自動生成 されたものです。

この例では、EPROMのアドレスのうち、下位12ビットが74HC393のカウンタ列 からの出力で順に読み出されますが、実は1周期を256アドレスで回るような データが16個(4ビット)のグループとして、全部で8グループ入っています。 つまり、256ワード周期のサウンド波形として見ると、たった1個のEPROMに、 128個の異なったサウンド素材を盛り込めるわけです。多量の情報を集積できる メモリの応用分野として、ワープロ(多量の日本語フォントメモリが必要)と 並んで、電子楽器というのは大容量メモリを活用する格好の舞台なのです。 この波形メモリの出力データは74HC574で「ラッチ」(保持)され、さらに ICのドライブ能力を活用して、そのまま「ラダー型」と呼ばれる接続の抵抗網 に供給され、D/A変換出力の電圧が得られます。

回路図に接続先の書いていない、EPROMの3本の上位アドレス(A12、A13、A14) を「+5Vに接続」「GNDに接続」のいずれに組み合わせるか、でメモリ内の データブロックを切り替えるようになっています。電子楽器であれば、この ような上位アドレスを切り替えて、音色を切り替えているのと同じです。 以下、このサンプルEPROMの出力信号波形の例を紹介しましょう。

----------------------------------------------
図4.35 : 「A12=GND」「A13=GND」「A14=GND」
	最初の256ワードが最大振幅のサイン波で、次のサイン波は振幅を
	7/8にして、...というように次第に振幅を減衰させたような波形。
	電子オルガンの「レピテイション」という、周期的な振幅変化の効果
	を持ったサウンド。
----------------------------------------------
図4.36 : 「A12=+5V」「A13=GND」「A14=GND」
	最初は普通のサイン波で、そこから次第に2倍の周波数のサイン波と
	ミキシングしていく、そのミキシング比をなめらかに増やしていく
	ような変化。基音だけのサイン波と、2倍音のサイン波との間を
	モーフィング(次第になめらかに変容)したような効果。
----------------------------------------------
図4.37 : 「A12=GND」「A13=+5V」「A14=GND」
	最初は普通のサイン波で、そこからPWM変調(パルス幅変調)的に
	1周期の長さを縮めながら、余った時間はゼロレベルを持続して、
	ピッチを変化させずに音色を変化させた例。この変化を周期的に
	行うと、「デチューン」効果のような分厚い音が簡単に得られる。
----------------------------------------------
図4.38 : 「A12=+5V」「A13=+5V」「A14=GND」
	最初を周波数fのサイン波とすると、次の同じ時間に2周期のサイン波
	を2fというピッチで詰め込み、次には3fを3周期、...というように、
	16倍音までの整数倍音成分に次々とシフトするというデータ。
----------------------------------------------
図4.39 : 「A12=+5V」「A13=+5V」「A14=+5V」
	このブロックには、定常的な256ワードの波形データとして、色々な
	自然楽器の有名な波形データ(バイオリン、オーボエ、サックス、
	ボイス、アナログシンセ)等の波形が並ぶ。これを定常的にサウンド
	として聞くためには、A8-A11の上位アドレスをカウンタ393から外して、
	+5VかGNDにそれぞれ選んで固定することが必要。
----------------------------------------------

このように、波形メモリ(サンプリングメモリ)方式を使えば、フィルタ などのアナログ手法を使わずに、そのまま任意の音色のサウンドを簡単に 再生することができます。パソコンの「サウンドレコーディング機能」は、 まさにこの好例です。しかし、これだけでは「楽器」の音源として使うには 非常な困難があるのです。この点について検討してみましょう。

図4.40 は、この思考実験のためのシステム図です。最初に高精度高安定度の 水晶発振回路による「マスターオシレータ」がありますが、この周波数は あとで決定します。いま、とりあえずこのマスターオシレータからカウンタ 回路のクロックを生成するための「プリスケーラ」(あからかじめ分周する 回路)を仮に「30分周」としておきましょう。すると、 図4.34 のような8ビット カウンタによって波形メモリを読み出す方式の音源の場合、波形は256ワード で1周期ですから、たとえばA5=880Hzを生成するとすれば、ここからマスター クロックが決定されます。つまり、880Hzを256ステップで生成するためには 880*256=225.3KHz、そしてプリスケーラで30分周しているので、元の水晶発振 回路としては、880*256*30=6.7584MHzという水晶振動子を用意すればいいこと になります。

ところが、ここからが問題です。音源としてはA5の音だけでなく、12等分 平均率のそれぞれの音を生成しなければなりません。 図4.40 のシステムで これを実現するためには、プリスケーラ回路の分周データを音階に合わせて 調整することになります。そこで実際に電卓片手に計算してみたのが、 図4.40 の下段の数値です。ここでは、[章末コラム:音楽に用いるピッチと 周波数の一覧]を参考にして、目的とする周波数の上下で、誤差の小さな 方を採用するようにしました。しかし結果としては、この部分だけで37セント もの誤差があったり、プラス側とマイナス側に誤差が分布していることで、 このシステムを「楽器」と見た場合には、とても音楽に使えないものである ことが判ります。

この誤差の原因は、プリスケーラの分周データが「30」という、かなり小さな 値であったことにあります。30というのは約5ビットということです。誤差を 少なく、精度を上げるためには、「トップオクターブ方式」で見たように、 このプリスケーラとして8ビット以上、理想的には12ビット精度ぐらいに すればいいことになります。ところが、8ビットをフルスケールに活用する ような場合には、マスタークロックは

	880 * 256 * 255 = 57.4464MHz
となり、十分な精度である12ビットの場合には
	880 * 256 * 4095 = 922.5216MHz
ということになり、一般的なディジタル電子回路としては実現不可能なレンジ になってしまいます。そこで、この単純なプレスケーラ方式でない別の手法が 必要になります。この「固定サンプリング/位相累算方式」については、次章 の完全ディジタルシステムで挑戦していきましょう。

●ポリフォニックとアサイナ

さて、古典的な電子楽器の流れの中で、単音のアナログシンセサイザと、 複音を優先させて音質等に目をつぶったトップオクターブ方式について紹介 してきましたが、電子楽器の歴史はまだまだ進んでいきました。ちょうど、 いわゆる「マイコン」が登場してきた時代であり、単音シンセサイザの ポリフォニック(複音)化は、 図4.41 のようなシステムとして実現されて いきました。これは、システムに「同時発音数」という概念を定義して、 その発音チャンネル分、実際にアナログシンセサイザを並べてしまう、と いう「力ワザ」です。6音ポリ、とか8音ポリ、という多くの名機が登場 したものです。そして、鍵盤の演奏情報をマイコン(CPU)が監視して取得し、 この情報に基いてそれぞれのシンセブロックに必要なアナログ制御電圧を、 CPUのD/Aポートとして供給しました。ここから、第1章で見たような、最近 のディジタル方式( 図4.42 のような構成)に進歩するには、約10年の期間 を必要としたのです。

ところで、 図4.41 図4.42 のように、システムにソフトウェアという要素 が導入されるとともに、共通して「同時発音数」という概念が必要になった のですが、ここに重要な問題が発生することになりました。これは、音源 システムとして一定の発音数の制限がある場合には、ハイブリッドでも ディジタルでも、そしてパソコン内のソフトシンセであっても同じように 直面する問題です。その本質について検討してみましょう。

実際の電子楽器や音源では見当たりませんが、ここでは 図4.43 のように、 システムが「4音ポリフォニック」という仕様であるとしましょう。つまり、 メインのCPUが管理する発音チャンネルとして、AからDまでの4系統がある、 ということです。図のように、時間とともにまず最初の「ON」イベントが 発生します。ここではトップオクターブ方式と違って、イベントが発生して みないと、そのピッチ情報は判らない点に注意して下さい。CPUはONとなった 鍵盤の位置を走査(スキャン)して、あるいはMIDI情報の中のノートナンバ 情報を取得して、この発音のためのピッチを初めて知るのです。

そして、この1音目については、4つの発音チャンネルは全て空いているの で、たとえば図のようにAチャンネルに「割り当て」をします。アサイナ、 というのはこのような「発音割り当て機構」ということです。同様に、 この音がONの状態のまま、2音目のONがやってきてBチャンネルに、3音目 がやってきてCチャンネルに、4音目がやってきてDチャンネルに割り当て られます。この時、アサイナは同時に「現在の残り空きチャンネル数」を チェックして、この情報を保持しておきますから、この値がゼロとなります。 そして、鍵盤はピアノなら88鍵あり、人間の指は10本あり、音楽では4音 コードを両手で弾くこともごく普通ですから、図のように「他の4音が ONで持続しているところに5音目のONが来る」という状態になります。 ここでどうするか、というのが、アサイナの本質的な課題なのです。これは 同時発音数が4音であっても32音であっても64音であっても発生すること ですから、全ての電子楽器やディジタル音源システムに共通の課題です。

アサイナのもっとも単純な戦略としては、 図4.44 のような「先押し優先」 方式が有名です。これは、発音チャンネルの空きが無い場合には、それ 以降の新しい発音イベントは無視して鳴らさない、という原理です。 あとで埋まっていた発音チャンネルが空いた時に、既に無視していた発音 を再現することはしませんから、この「鳴らなかった音」はそのまま永久 に消えることになります。この方式の場合、たとえば指の数よりも多い 16音などの発音チャンネル数が用意されていれば、一般の人はあまり 気付かないのですが、少ない場合には突然に音が出なくなるので、かなり 不自然な演奏になってしまいます。一方、アサイナをCPUのソフトで実現 したり、昔のようにICのハードロジックで実現していた時には、「空き チャンネル数」だけを調べて、ゼロならその後一切の処理を無視すれば いいので、設計としてはもっとも簡単なものでした。

その次に一般的な戦略としては、 図4.45 の「後押し優先」方式があります。 これは、発音イベントごとに、割り当てられた発音チャンネルに対応して、 「現在発音中のチャンネルで何番めに古いか」という情報を刻々と演算 して保持しておく必要があります。多数のチャンネルが次々にONになります が、途中で先にOFFになって空いたチャンネルの影響は、他の全てのチャン ネルにも関係してきますから、このCPU処理はちょっとしたパズルになります。 そして、発音チャンネルが満杯の時には、「もっとも古い発音」のチャンネル を強制的にOFFにして、そこに最新の発音イベントの情報を割り当てる、 というものです。ピアノなどの減衰音の楽器では、古い発音ほど減衰して 音量が低下しているので、消してもあまり目立たない、というメリット がある方法です。しかし、新しいONイベントに際して、

 ・もっとも古い発音チャンネルの検索
 ・そのチャンネルに対するOFFイベントの処理
 ・全チャンネルの履歴情報の更新
 ・新しい発音チャンネルのONイベントの処理
を実行することになりますから、アサイナのソフトウェア処理としては、 かなり面倒なことになってきます。現在市販されている電子楽器の多くは、 基本的にはこの方式をとっていますので、興味ある読者は、楽器屋さんの 店頭などで試してみましょう。

アサイナには、システムの同時発音数という限界と音楽的な自然さを 擦り合せるために、まだまだ色々な方式があります。 図4.46 の例では、 基本的には「後押し優先」なのですが、ここに「最低音は例外として残す」 という指導原理を加えた方式です。各発音チャンネルの時間的な前後関係 だけでなく、さらにそれぞれのピッチ情報を取得して、「現在発音して いる中での最低音である」という情報と比較更新することが、それぞれの イベントのたびに必要になります。そして、発音チャンネルが満杯の時に 強制OFFさせるチャンネルを探索しますが、ここで「最低音を発音中」と いうチャンネルは聖域として残して、それ以外の候補を捜す、というもの です。わざわざ面倒な方法を採用しているように思う読者もいると思います が、実はこれがなかなか音楽的には意味があるのです。ピアノ演奏など で多数の鍵盤が鳴っている場合、単純な「後押し優先」方式のアサイナ では、ピアノ演奏によくあるアルペジオ演奏やオクターブユニゾン演奏 で、もっとも最初に弾かれた最低音が消されることになりますが、 これは意外に耳についてしまう(気付かれてしまう)のです。ところが 最低音だけを残す、というシンプルな原理で、その次の音を消して みると、和音の響きの中にあるので、かなり気付きにくくなります。 ちょっとしたアイデアですが、システムを「音楽の道具である楽器」と 考えてみると、この方式はとても「音楽的」なものと言えます。

音源システムが、システムとして単一音色から「マルチティンバー」、 つまり複数の音色系列を同時に生成できるような時代になると、 図4.47 のようなアサイナも数多く登場してきました。ここでは、発音チャンネル が満杯で新しい発音イベントがあった場合、それぞれの発音チャンネルの 「現在のエンベロープ値(音量に相当)」をいちいち取得して比較し、 もっとも音量の小さいチャンネルから強制OFFしていく、というものです。 実はこれは、高域と低域では大幅にエンベロープ特性の異なる電子ピアノ でも必要な手法で、多くのシステムで採用されています。強制的に消去 するのにもっとも違和感が少ないのは、もっとも音量の小さなチャンネル を消すことだ、というのは自然な発想ですが、実現はなかなか大変です。 つまり、CPUは基本的には発音の時に音源ブロックに必要な情報(ピッチ、 音色、エンベロープ、音量など)を送るだけでなく、アサイナとして処理 しながら、刻々と各発音チャンネルの現在の音量を監視しなければ ならないのです。

このように、アサイナとはポリフォニックのシステムでは必須のもの ですが、いざ実際に実装するとなると、なかなか奥の深いものであること が判ったと思いますが、もう一つだけ、さらに頭の痛くなる条件を紹介 しておきましょう。これも、MIDIやシンセなど、音楽演奏にとっては 無視したり省略したりできない、重要なファクターです。それは、 図4.48 にある「ダンパーペダル」というものです。これは歴史的にはピアノの 持っている機構ですが、現在ではシンセサイザなどでも同じ機能として 標準装備しているもので、すっかり一般的になった概念です。この図を よく眺めて理解してみて欲しいのですが、ダンパーの機能とは、「発音の OFFを保留する」というものです。つまり、ダンパーがONになっている期間 にあった「発音OFFイベント」は、無視されるのでなく保留されて発音は 継続し、ダンパーOFFのイベントで一斉に発音OFFが実行される、という ものです。この動作を理解した上で、再びアサイナの設計(当然、ダンパー に対応したものです)を試みてみると判りますが、問題は非常にややこしく なってきます。本書ではこれ以上の深入りを避けますが、実際にはピアノ の「ソステヌートペダル」という機能を実現するためには、さらに複雑で 高度な処理が必要となり、アサイナのソフトウェアはより巨大なものに なっていきます。たかが楽器、というにはあまりに深いこの世界の一端を 知っていただければ、と思います。

●AKI-H8によるハイブリッドシンセサイザの構築[A]VCOブロック

さて、それではいよいよ、AKI-H8で古典的アナログシンセサイザの各ブロック を実現する、という珍しい手法によるハイブリッドシンセサイザの製作を 紹介してみましょう。まず最初に、ピッチを指定して音源波形を生成する、 という「VCOブロック」です。ここでは鍵盤でなく、外部のMIDIキーボード やコンピュータからのMIDI入力によって演奏情報が入ってくる、という 仕様にします。また、AKI-H8のソフトウェアによる波形生成の機能として、 同時発音数を「4音」、アサイナとしては「先押し優先」という仕様にして おきます。つまり、MIDIの1チャンネル(変更したければAKI-H8のソースの MIDIチャンネル指定部分を容易に変更できます)について、発音チャンネル として4つを確保して、これが埋まるまではポリフォニックとして機能します。 もし、同時に5音が指定されると、もっとも後に届いた情報は無視されます。 同じノートナンバが重複して到来した時(あるノートがONになっているの に、このOFFが来ないで同じノートナンバでさらにONが来た、という矛盾 した状態)には、発音チャンネルが空いていても新しいノートイベントを 無視する、という機能を組み込んでおくことにします。

システムの基本設計は、前章の最後の[コラム:AKI-H8のメインルーチンの 処理速度]の結果を受けて行いました。ここでは、25μ秒、つまり毎秒 40000回というタイマ割り込みでも楽々と処理をこなしたAKI-H8の性能を 活用して、同じ25μ秒の割り込み周期を、ソフトウェア楽音合成のタイミング として利用します。つまり、4音ポリフォニックの動作で40KHzサンプリング ですから、各音については10KHzサンプリングとなります。これはサンプリング 定理により、5000Hzまでの楽音信号を生成できることを意味しますので、 実用上は十分なものです。この枠組みであれば、 図4.49 のように、それぞれ の発音チャンネルごとの出力を系列加算することもなく(データのオーバー フローの心配もありません)、だらだらとD/Aポートから出力するだけでいい ことになります。このD/Aポートの出力にはローパスフィルタが必要ですが、 他に外付け部品はまったく不要です。

楽音生成のためのタイマ割り込みで行う処理としては、バックグラウンド として処理されている「MIDI割り込み」「4音ポリのアサイナ」によって、 発音チャンネルごとに既に設定されている波形メモリ読み出し位相アドレス 情報に従って、波形メモリ部分から該当するアドレスの波形データを読み 出してD/Aポートに出力する、ということになります。アサイナにより 「無音」とされているチャンネルでは、D/Aポートにゼロを意味する中間値 の「128」を出力します。この「波形メモリ読み出し位相アドレス」という 概念は、実は本書ではまだ紹介していないもので、詳しくは次章のディジタル システムで解説するものですので、ここでは興味のある人は、 リスト4.10 に あるCプログラムを眺めるということで、基本的には生成された リスト4.11 の 結果をそのまま使う、ということにしておきましょう。

リスト4.11 の内容ですが、出力の周波数帯域として、C1からC7までの 6オクターブ、としました。また、一般のVCOでは、ピッチに低周波オシレータ LFOの出力を反映させて、周波数の周期的変動、つまりビブラートをかける ものも多いのですが、ここでは省略しています。技術的には、 リスト4.11 の 最後にある、ノートナンバごとに用意された周波数設定データをより細かく 分割して、いわばその「小数点以下のデータ」を別のタイマによって周期的に 上下させてやることで簡単に実現できます。しかしここでは、AKI-H8によって ソフトウェアシンセサイザを実現する、という部分にスポットを当てたい ので、この付加的な機能は次章に譲ることにしました。また、このVCOブロック では4音ポリですが、いったんD/A変換して以降のブロックに接続する関係で、 以降のブロックは最初の発音イベントに依存した単音システムのように動作 します。そこで、このVCOブロックでは、古い音が残っているところに新しい イベントが到来した時には、エンベロープが生きたままピッチの生成を突然に 停止して新しいピッチの波形をゼロポイントから読み出すために、直流成分 のノイズが出ることになります。この点は完全なポリフォニックでない ハイブリッドタイプということで、ちょっと目をつぶっておきましょう。(^_^;)

また、 リスト4.12 は、 図4.39 のところに登場した、1周期256ワードの 色々な楽器音の波形データを、AKI-H8のプログラムに埋め込むために 変換したものです。とりあえず、ここではこの16種類の波形をMIDIの プログラムチェンジで切り替えて読み出す(波形アドレスの上位ビット にこの4ビット16状態をそのまま割り当てる)、ということにしました。 これらのデータは既存のシンセサイザの楽器音から取材したもので、 後半には数学的に規定した単純な波形データも並んでいます。

図4.50 が、このVCOブロックの回路図となります。目新しいものは何もなく、 これまで何度も出てきたMIDI受信機能、そしてD/A出力に簡単なローパス フィルタを入れただけ、というものです。このブロックの出力がアナログ電圧 となっているので、オシロで実際の波形を見たり、ここにアンプをつないで 「聞く」こともできる、というのが重要なメリットです。完全にディジタル化 されたシステムでは、最終の出口でD/A変換された出力からしかシステムの 動作が「見えない」のですが、このようにモジュール化したことで、それぞれ のブロックの動作を追うことができる、というのは、アナログ時代の大きな メリットだったのです。ちなみにこの回路では、波形と音域によっては 4音を同時に出力した時にレベルがオーバーして、クリップのかかった信号 となってしまいます。気になる場合には、図の上の方のOPアンプ(この回路 では単一電源動作をさせていますから、下のボルテージフォロワで基準電位 の2.5Vを作っています)の帰還抵抗を小さくしてゲインを下げてみて下さい。

そして、 リスト4.13 がこのVCOブロックのAKI-H8のソフトウェアです。内容 としては、ここまでに登場した「MIDI割り込み」「タイマ割り込み」「D/A コンバータ出力」という機能を統合しています。新しい内容としては、 波形メモリを読み出す位相アドレスの指定と、アサイナの機能があります。 ここでは単純な「先押し優先」のアルゴリズムを使っていますので、処理は 比較的、簡単なものとなっています。興味のある人はリストを追ってみて、 アサイナを「後押し優先」に変更する、というのはいい演習となります。 また、 リスト4.14 にフラッシュROMに焼き込むプログラムリストを入れて あります。このブロックだけでも、とりあえずのMIDIオルゴールとして 使える用途があるかもしれません。

図4.51 はこのVCOブロックを、ユニバーサル基板の片隅に組み立ててみた ところで、残りのスペースにVCFとVCAのブロックのAKI-H8の空間を空けて あります。 図4.52 はこのAKI-H8基板の下に隠れている部分で、MIDI受信の ためのフォトカプラと、出力ローパスフィルタのためのOPアンプLM324が 見えます。このフォトカプラのMIDI受信信号は他のAKI-H8にも分配する ことになります。 図4.53 はこのAKI-H8の下の配線部分で、部品も少しだけ ついています。まぁ、あまり美しくないですが、バラックの実験ですので、 こんなものでしょう。

本書の付録CDROMのサウンドトラックのうち、第15トラックのサンプル サウンドは、このAKI-H8によるVCOブロックだけで、MIDIシーケンス データにより自動演奏させてみたサンプル音です。音域が高いところで 折り返しノイズが聞こえてきて音が濁る様子、先押し優先のアサイナと 発音数の限界から一部の音が鳴らずにちょっと不自然になっている様子 など、色々と聞こえてきて参考になるでしょう。

●AKI-H8によるハイブリッドシンセサイザの構築[B]VCFブロック

次のブロックとしては、アナログシンセサイザのVCFの機能を実現する ものとして、AKI-H8のソフトウェアによるディジタルフィルタの実現に 挑戦してみましょう。まず、ここで全体のシステムを確認しておくと、 図4.54 のようになっています。前段のVCOブロックからは、アサイナで 割り当てられた4音ポリフォニックの混ざった楽音信号が、D/Aコンバータ としては1本のアナログ信号としてまとまっています。そこで、このVCF ブロック以降では、それぞれの音に個別に音色フィルタやエンベロープを かけることはできませんので、「無音状態から最初に発生したイベント」 に対してVCFやVCOの動作をスタートさせ、「最後に残っていた発音がOFF」 になった事を受けて、楽音OFFに対する動作を行うことになります。これ は昔のハイブリッドシンセサイザにあった、擬似ポリフォニックのスタイル です。つまり、ある音が既に鳴り続けている時に別の新しい音がONになった 場合には、VCFやVCOは再トリガされない、という仕様です。

この仕様によって、VCFブロックのAKI-H8がMIDI受信に対して行う処理は VCOのアサイナとは動作が異なります。つまり、発音イベントに際して、 「現在、他に発音中の音があるかどうか」という情報がもっとも重要に なります。これはダンパーペダルの処理や後押し優先のアサイナで必要な 処理と類似していますが、逆にそのノートナンバにつていは無視していい ので、ここでは簡単に「ONイベントでインクリメント、OFFイベントで デクリメントされる変数」を設けて、これがゼロであるかどうか、という 判定処理を行うことにしました。

さて、それではいよいよ、VCFの心臓部のディジタルフィルタをAKI-H8に 実装する部分について紹介しましょう。AKI-H8は16ビット*16ビットの 符号付き乗算を1.5μsecで実行しますので、かなりの信号処理をソフト ウェアで実現できる可能性があります。本書ではディジタル信号処理の 理論的な部分に深入りすることは避けていますので、ここでは

  三上直樹「ディジタル信号処理の基礎」(CQ出版)
を参考文献として(以下[文献]と言った場合にはこの本)、その結果を そのまま使用していくことにします。アナログシンセサイザのVCFでは、 一般に共振特性の「Q」が可変のローパスフィルタを用いていますが、 ここでは[文献]77ページにある、双1次s-z変換によるバターワース型の 2次IIRディジタルLPFを 図4.55 のように構成して、その係数を[文献]の 80ページにあるフィルタ設計プログラムによって計算しました。AKI-H8の A/D変換とD/A変換に使用するサンプリング周波数は20KHzで、カットオフ 周波数として2.5KHzから250Hzまでの係数を求めた結果がリスト4.15の ようになります。これをリスト4.16のようなCプログラムで変換して、 リスト4.17のような定数データファイルを作成しました。ここでは5ワード の係数データにダミーで3ワードの「ゼロ」を加えることで、データを 全て8ワード境界に並べて簡単にアクセスすることを狙っています。

ここまでの準備を経て、 図4.56 がこのVCFブロックの回路図となりました。 既にVCOブロックの部分にMIDI受信のためのフォトカプラ回路ができて いますから、ここではその出力をもらってそのままAKI-H8のシリアル入力 に供給できます。そしてA/D入力の部分には、前段のローパスフィルタが ありますから、こちらも省略できます。D/A出力側は前段と同様のものを 置いて、レベル調整は現物合わせで抵抗をカットアンドトライしましょう。 また、AKI-H8のソースプログラムは リスト4.18 、オブジェクトは リスト4.19 のようになりました。なお、ここでは、リスト4.17とディジタル フィルタの定数が一部変わっています。これは、実際にこのシステムを 製作してみたところ、カットオフを下げるとあまりに出力レベルが 下がってしまうので、[文献]92ページの方法に従って、b0-b2の係数を 8倍に持ち上げているためです。このために、VCFブロックに入力が無い 時には一部のパラメータで出力にノイズが出てきますが、これはVCAの部分 でカットされるので、このままで行くことにします。

ソフトウェア上の細かい仕様としては、まず、MIDIプログラムチェンジを 設定すると、「トリガーVCFモード」になります。これは、最初の発音 イベントで最高カットオフからスタートして、次第に時間とともにカットオフ を下げていく、という動作をします。また、MIDIチャンネルプレッシャーの 1チャンネルで0から40までの値を送ると、このモードが外れて、固定的な カットオフをその値に設定する、というデバッグモードも設けました。これ により、MAXなどによって外部から固定フィルタとしてのカットオフを制御 できます。当初はもう一つ、周期的にカットオフを上下する「ワウワウ」の モードも入れるつもりでしたが、やはり2次のバターワースフィルタでは Qが持ち上がっていないので、あまりワウワウ効果がないので断念しました。 ただし、ダイレクトにカットオフを制御できますので、簡単なMAXパッチに よってワウワウ効果のほどを試すことはできます。

本書の付録CDROMのサウンドトラックのうち、第16トラックのサンプル サウンドは、このAKI-H8によるVCFブロックにVCOブロックのサウンドを 供給して、外部MIDIキーボードを弾いてみたサンプル音です。ディジタル ローパスフィルタのカットオフ周波数のパラメータ5個を、17.5msecごとに ばさっと変えているのですが、けっこうスムースな音色変化が実現できて います。ただし、どうしてもカットオフが下がるとともに出力レベルも 低下して、音量エンベロープの変化も出てきてしまう様子がよく判ります。 また、前の音の鍵盤を離さないうちに次の鍵盤を弾くと、この音色変化が キャンセルされている様子も聞こえるでしょう。

また、第17トラックのサンプルサウンドは、実際にサンプルのMIDIシーケンス でVCOからVCFまでのブロックを演奏しているものです。途中で次々にプログラム チェンジを送って音色を切り替えていますが、さすがに2段にわたって異なる サンプリング周波数で非同期にサンプリングを重ねているので、折り返しノイズ が低域に強烈に出てきています。しかしこれは各ブロックを個別にAKI-H8で 実現する、という本システムのコンセプトですので、「人間フィルタ」でそれ 以外の部分を聞いてみましょう。ここまで製作した状態の筆者の実験基板は 図4.57 のように2枚のAKI-H8が並び、基板裏の配線は 図4.58 のように簡単に まとまっています。システムの機能の一部をソフトで実現することの効能を 見ることができますね。(^_^)

●AKI-H8によるハイブリッドシンセサイザの構築[C]VCAブロック

AKI-H8を3個縦列接続したハイブリッドシンセの最終ブロックはVCAです。 これは、古典的なアナログシンセでは最終段に位置して、別のエンベロープ ジェネレータから供給されるエンベロープ電圧、さらに低周波発振器LFOの 出力電圧をトレモロ効果として加算して、この制御電圧により最終的な信号 出力に振幅変調するブロックです。しかし本システムでは、鍵盤演奏に相当 する情報は共通にMIDIから受信しますし、エンベロープの生成もトレモロも 全てAKI-H8のソフトウェアで実現しますから、外見上はVCOやVCFと同様に、 たった1個のAKI-H8が担当することになります。

このVCO部分の機能的なシステム構成としては、 図4.59 のようなものを考えて みました。普通ならA/D入力とD/A出力のサンプリング周期の間に、わざわざ このように3回もの乗算演算を入れずに、たとえばトレモロ波形とデプスの 乗算は「設定」の際にソフトウェアで行います。そして、その結果となる 変調波形テーブルをCPUのRAMに展開しておいて、信号処理の際にはそれを ただ参照する、というのが定石的なテクニックです。ところがAKI-H8の標準 システムでは、ROMは128KBと広大にあるのですが、RAMが4KBしかありません。 筆者はMIDIの受信FIFOバッファにこのうち1024bytesを割いていることもあり、 RAMを最小限にする、という設計指針から、このようにしています。もちろん、 既に完成しているVCFブロックで、AKI-H8の信号処理エンジンとしての演算 能力を最大限に活用できる、と確認できているというのがスタートラインに あります。

実は既に、前章の 図3.24 のシステムで、ソフトウェア的にエンベロープを 生成していますので、この部分はほぼ同じようにいきます。このシステム では個別のエンベロープでなく全体をまとめてかけますので、ADSRの形状 にする意味があまりありません。ノートOFFで、中身のピッチが消えてしまう ので、サステインの状態のエンベロープが無意味になりますので、ここ では多段の減衰特性によるパーカッシブ形状としておきましょう。その減衰 速度、さらにトレモロのスピードについても、トレモロのデプスと変調波形 形状とともにMIDI制御することにします。

さて、VCAブロックの回路図ですが、実は 図4.56 のものとまったく同一と いうことになります。前段からA/Dで受けて、D/A出力にローパスフィルタが 入る、という外部的な構成はまったく同じです。AKI-H8のソフトウェアだけ でVCFになったりVCAになったりしてしまう、という点に注目しましょう。 回路図としては 図4.56 を使って、「VCO」と書かれた部分を「VCF」に直す だけで、あとはそのままです。

そこで開発のメインは、ソフトウェア上での作業となります。ここで新しい 内容としては「トレモロ変調」の部分ですので、その実現方法を詳解しましょう。 まず、変調波形として、 図4.60 のような考え方でいきます。つまり、同じ元と なる変調波形の最高レベルを維持して、最低レベルをゼロまでのどこにするか、 というような係数データにすると、この結果の値をそのまま振幅乗算値として 利用でき、これが変調の「デプス」に相当するので、デプスごとの振幅波形 は不要になります。そこで変調波形データとしては、全て1周期256ワードと して、サイン波形、三角波、時間的に対称な2種類の鋸歯状波、という4種類 を用いることにしました。このデータは、 リスト4.20 のようなもので、あと はAKI-H8のソフトに全て任せることにします。

実際のプログラムとしては、ソースが リスト4.21 のように、フラッシュROM のためのMOTファイルが リスト4.22 のようになりました。詳しく解説する 紙面はありませんが、基本的には 図4.59 の考え方をそのままソフトと して実現しているだけです。MIDIから制御できるパラメータとしては、 実験に使用した 図4.61 のMAXパッチを見ると判りますが、MIDIの1チャンネル のポリフォニックプレッシャーを使って、

 ・ノート[0]:VCAの指数関数型減衰エンベロープの減衰速度
 ・ノート[1]:トレモロ変調のデプス
 ・ノート[2]:トレモロ変調のスピード
 ・ノート[3]:トレモロ変調波形の選択(0-3)
というように規定しています。

図4.61 のMAXパッチの右側にある簡易自動演奏によって、このシステム 全体を鳴らして、トレモロ変調の深さと波形を切り替えたサウンドサンプル が、付録CDROMの第18トラックに入っています。かなりのノイズは仕方ない ところですが、トレモロの様子はよく判るでしょう。 実際に製作した基板の外見としては、VCOとVCFとVCAの3枚のAKI-H8が並んで 図4.62 のようになりました。

以上で、AKI-H8をフルに活用したハイブリッドシンセサイザの製作実験は 完成です。何度もA/D変換とD/A変換を縦列接続したためのノイズや誤差の 蓄積はどうしようもありませんが、サウンドエレクトロニクスの重要な エッセンスは満載されてます。そして、たった4000円のカードマイコンが、 ソフトウェアによってこれだけの実力を持っている、という発見は、今後 いろいろなシステムを開発する参考となるでしょう。興味をもたれた方は 挑戦してみて下さい。(^_^)

[コラム:音楽に用いるピッチと周波数の一覧]

コンピュータ音楽で用いるピッチと周波数について、以下のようにまとめて みました。表の数値ですが、それぞれの行が12等分平均率のピッチを表して います。

最初の「Note」というのは「音名」と呼ばれるもので、ここでは音楽心理学 などで一般的に使われる表現を用いています。つまりアメリカ式の音階記号と、 オクターブを表す整数のペアとなっています。
次の「MIDI」というのは、そのピッチに相当する、MIDIの「ノートナンバ」 の数値(10進数表現)です。その次の「HEX」は、これを16進数として表現 したものです。
その次にあるのが、それぞれ該当する12等分平均率の周波数で、最初の「Hz」 の添えられたものは、もっとも一般的な「A4=440Hz」という基準ピッチの ものです。
その右に続いているのは、

 ・古楽でよく使われる「A4=430Hz」
 ・古楽でよく使われる「A4=435Hz」
 ・オーケストラでよく使われる「A4=442Hz」
 ・一部のピアノ調律に使われる「A4=445Hz」
という、異なった基準ピッチに対応する周波数です。参考にしてみて下さい。
----------------------------------------------
Note  MIDI  HEX       A4=440Hz       430Hz      435Hz      442Hz      445Hz
----------------------------------------------
C -1    0  [00]      8.17580Hz       7.990      8.083      8.213      8.269
C#-1    1  [01]      8.66196Hz       8.465      8.564      8.701      8.760
D -1    2  [02]      9.17702Hz       8.968      9.073      9.219      9.281
Eb-1    3  [03]      9.72272Hz       9.502      9.612      9.767      9.833
E -1    4  [04]     10.30086Hz      10.067     10.184     10.348     10.418
F -1    5  [05]     10.91338Hz      10.665     10.789     10.963     11.037
F#-1    6  [06]     11.56233Hz      11.300     11.431     11.615     11.694
G -1    7  [07]     12.24986Hz      11.971     12.111     12.306     12.389
G#-1    8  [08]     12.97827Hz      12.683     12.831     13.037     13.126
A -1    9  [09]     13.75000Hz      13.438     13.594     13.812     13.906
Bb-1   10  [0A]     14.56762Hz      14.237     14.402     14.634     14.733
B -1   11  [0B]     15.43385Hz      15.083     15.258     15.504     15.609
C  0   12  [0C]     16.35160Hz      15.980     16.166     16.426     16.537
C# 0   13  [0D]     17.32391Hz      16.930     17.127     17.403     17.521
D  0   14  [0E]     18.35405Hz      17.937     18.145     18.437     18.563
Eb 0   15  [0F]     19.44544Hz      19.003     19.224     19.534     19.666
E  0   16  [10]     20.60172Hz      20.134     20.368     20.695     20.836
F  0   17  [11]     21.82676Hz      21.331     21.579     21.926     22.075
F# 0   18  [12]     23.12465Hz      22.599     22.862     23.230     23.387
G  0   19  [13]     24.49971Hz      23.943     24.221     24.611     24.778
G# 0   20  [14]     25.95654Hz      25.367     25.662     26.075     26.252
A  0   21  [15]     27.50000Hz      26.875     27.188     27.625     27.813
Bb 0   22  [16]     29.13524Hz      28.473     28.804     29.268     29.466
B  0   23  [17]     30.86771Hz      30.166     30.517     31.008     31.218
C  1   24  [18]     32.70320Hz      31.960     32.332     32.852     33.075
C# 1   25  [19]     34.64783Hz      33.860     34.254     34.805     35.042
D  1   26  [1A]     36.70810Hz      35.874     36.291     36.875     37.125
Eb 1   27  [1B]     38.89087Hz      38.007     38.449     39.068     39.333
E  1   28  [1C]     41.20344Hz      40.267     40.735     41.391     41.672
F  1   29  [1D]     43.65353Hz      42.661     43.157     43.852     44.150
F# 1   30  [1E]     46.24930Hz      45.198     45.724     46.460     46.775
G  1   31  [1F]     48.99943Hz      47.886     48.443     49.222     49.556
G# 1   32  [20]     51.91309Hz      50.733     51.323     52.149     52.503
A  1   33  [21]     55.00000Hz      53.750     54.375     55.250     55.625
Bb 1   34  [22]     58.27047Hz      56.946     57.608     58.535     58.933
B  1   35  [23]     61.73541Hz      60.332     61.034     62.016     62.437
C  2   36  [24]     65.40639Hz      63.920     64.663     65.704     66.150
C# 2   37  [25]     69.29566Hz      67.721     68.508     69.611     70.083
D  2   38  [26]     73.41619Hz      71.748     72.582     73.750     74.250
Eb 2   39  [27]     77.78175Hz      76.014     76.898     78.135     78.666
E  2   40  [28]     82.40689Hz      80.534     81.470     82.781     83.343
F  2   41  [29]     87.30706Hz      85.323     86.315     87.704     88.299
F# 2   42  [2A]     92.49861Hz      90.396     91.447     92.919     93.550
G  2   43  [2B]     97.99886Hz      95.772     96.885     98.444     99.112
G# 2   44  [2C]    103.82617Hz     101.466    102.646    104.298    105.006
A  2   45  [2D]    110.00000Hz     107.500    108.750    110.500    111.250
Bb 2   46  [2E]    116.54094Hz     113.892    115.217    117.071    117.865
B  2   47  [2F]    123.47083Hz     120.665    122.068    124.032    124.874
C  3   48  [30]    130.81278Hz     127.840    129.326    131.407    132.299
C# 3   49  [31]    138.59132Hz     135.442    137.016    139.221    140.166
D  3   50  [32]    146.83238Hz     143.495    145.164    147.500    148.501
Eb 3   51  [33]    155.56349Hz     152.028    153.796    156.271    157.331
E  3   52  [34]    164.81378Hz     161.068    162.941    165.563    166.687
F  3   53  [35]    174.61412Hz     170.646    172.630    175.408    176.598
F# 3   54  [36]    184.99721Hz     180.793    182.895    185.838    187.099
G  3   55  [37]    195.99772Hz     191.543    193.770    196.889    198.225
G# 3   56  [38]    207.65235Hz     202.933    205.293    208.596    210.012
A  3   57  [39]    220.00000Hz     215.000    217.500    221.000    222.500
Bb 3   58  [3A]    233.08188Hz     227.785    230.433    234.141    235.731
B  3   59  [3B]    246.94165Hz     241.329    244.135    248.064    249.748
C  4   60  [3C]    261.62557Hz     255.680    258.653    262.815    264.599
C# 4   61  [3D]    277.18263Hz     270.883    274.033    278.443    280.332
D  4   62  [3E]    293.66477Hz     286.991    290.328    295.000    297.002
Eb 4   63  [3F]    311.12698Hz     304.056    307.591    312.541    314.663
E  4   64  [40]    329.62756Hz     322.136    325.882    331.126    333.373
F  4   65  [41]    349.22823Hz     341.291    345.260    350.816    353.197
F# 4   66  [42]    369.99442Hz     361.585    365.790    371.676    374.199
G  4   67  [43]    391.99544Hz     383.086    387.541    393.777    396.450
G# 4   68  [44]    415.30470Hz     405.866    410.585    417.192    420.024
A  4   69  [45]    440.00000Hz     430.000    435.000    442.000    445.000
Bb 4   70  [46]    466.16376Hz     455.569    460.866    468.283    471.461
B  4   71  [47]    493.88330Hz     482.659    488.271    496.128    499.496
C  5   72  [48]    523.25113Hz     511.359    517.305    525.630    529.197
C# 5   73  [49]    554.36526Hz     541.766    548.066    556.885    560.665
D  5   74  [4A]    587.32954Hz     573.981    580.655    589.999    594.004
Eb 5   75  [4B]    622.25397Hz     608.112    615.183    625.082    629.325
E  5   76  [4C]    659.25511Hz     644.272    651.764    662.252    666.747
F  5   77  [4D]    698.45646Hz     682.582    690.519    701.631    706.393
F# 5   78  [4E]    739.98885Hz     723.171    731.580    743.352    748.398
G  5   79  [4F]    783.99087Hz     766.173    775.082    787.554    792.900
G# 5   80  [50]    830.60940Hz     811.732    821.171    834.385    840.048
A  5   81  [51]    880.00000Hz     860.000    870.000    884.000    890.000
Bb 5   82  [52]    932.32752Hz     911.138    921.733    936.565    942.922
B  5   83  [53]    987.76660Hz     965.317    976.542    992.256    998.991
C  6   84  [54]   1046.50226Hz    1022.718   1034.610   1051.259   1058.394
C# 6   85  [55]   1108.73052Hz    1083.532   1096.131   1113.770   1121.330
D  6   86  [56]   1174.65907Hz    1147.962   1161.311   1179.998   1188.007
Eb 6   87  [57]   1244.50793Hz    1216.224   1230.366   1250.165   1258.650
E  6   88  [58]   1318.51023Hz    1288.544   1303.527   1324.503   1333.493
F  6   89  [59]   1396.91293Hz    1365.165   1381.039   1403.263   1412.787
F# 6   90  [5A]   1479.97769Hz    1446.342   1463.160   1486.705   1496.796
G  6   91  [5B]   1567.98174Hz    1532.346   1550.164   1575.109   1585.800
G# 6   92  [5C]   1661.21879Hz    1623.464   1642.341   1668.770   1680.096
A  6   93  [5D]   1760.00000Hz    1720.000   1740.000   1768.000   1780.000
Bb 6   94  [5E]   1864.65505Hz    1822.277   1843.466   1873.131   1885.844
B  6   95  [5F]   1975.53321Hz    1930.635   1953.084   1984.513   1997.982
C  7   96  [60]   2093.00452Hz    2045.436   2069.220   2102.518   2116.789
C# 7   97  [61]   2217.46105Hz    2167.064   2192.263   2227.540   2242.659
D  7   98  [62]   2349.31814Hz    2295.925   2322.621   2359.997   2376.015
Eb 7   99  [63]   2489.01587Hz    2432.447   2460.732   2500.330   2517.300
E  7  100  [64]   2637.02046Hz    2577.088   2607.054   2649.007   2666.987
F  7  101  [65]   2793.82585Hz    2730.330   2762.078   2806.525   2825.574
F# 7  102  [66]   2959.95538Hz    2892.684   2926.320   2973.410   2993.591
G  7  103  [67]   3135.96349Hz    3064.692   3100.328   3150.218   3171.599
G# 7  104  [68]   3322.43758Hz    3246.928   3284.683   3337.540   3360.193
A  7  105  [69]   3520.00000Hz    3440.000   3480.000   3536.000   3560.000
Bb 7  106  [6A]   3729.31009Hz    3644.553   3686.932   3746.262   3771.689
B  7  107  [6B]   3951.06641Hz    3861.269   3906.168   3969.026   3995.965
C  8  108  [6C]   4186.00904Hz    4090.872   4138.441   4205.036   4233.577
C# 8  109  [6D]   4434.92210Hz    4334.128   4384.525   4455.081   4485.319
D  8  110  [6E]   4698.63629Hz    4591.849   4645.243   4719.994   4752.030
Eb 8  111  [6F]   4978.03174Hz    4864.895   4921.463   5000.659   5034.600
E  8  112  [70]   5274.04091Hz    5154.176   5214.109   5298.014   5333.973
F  8  113  [71]   5587.65170Hz    5460.660   5524.156   5613.050   5651.148
F# 8  114  [72]   5919.91076Hz    5785.367   5852.639   5946.819   5987.182
G  8  115  [73]   6271.92698Hz    6129.383   6200.655   6300.436   6343.199
G# 8  116  [74]   6644.87516Hz    6493.855   6569.365   6675.079   6720.385
A  8  117  [75]   7040.00000Hz    6880.000   6960.000   7072.000   7120.000
Bb 8  118  [76]   7458.62018Hz    7289.106   7373.863   7492.523   7543.377
B  8  119  [77]   7902.13282Hz    7722.539   7812.336   7938.052   7991.930
C  9  120  [78]   8372.01809Hz    8181.745   8276.882   8410.073   8467.155
C# 9  121  [79]   8869.84419Hz    8668.257   8769.051   8910.162   8970.638
D  9  122  [7A]   9397.27257Hz    9183.698   9290.485   9439.987   9504.060
Eb 9  123  [7B]   9956.06348Hz    9729.789   9842.926  10001.318  10069.201
E  9  124  [7C]  10548.08182Hz   10308.353  10428.217  10596.028  10667.946
F  9  125  [7D]  11175.30341Hz   10921.319  11048.311  11226.100  11302.295
F# 9  126  [7E]  11839.82153Hz   11570.735  11705.278  11893.639  11974.365
G  9  127  [7F]  12543.85395Hz   12258.766  12401.310  12600.871  12686.398
----------------------------------------------
なお、この表のデータは付録CDROMのリスト4.3に、またこの表を自動生成 するために筆者が作成したC言語プログラムはリスト4.4として収納されて います。

[コラム:オルガンの音色生成の方法]

いろいろな歴史のある楽器の中でも、オルガン(クラシックの世界で オルガンと言った場合には、いわゆる「パイプオルガン」を指します)と いう楽器は、1つの鍵盤を押すと、同時に非常に多数のパイプが鳴ることで そのサウンドを生成します。そして、ストップ(音栓)と呼ばれる制御 パネルによって音色を設定するという機能は、かなり西洋の合理的な性格 を持っています。このオルガンの音色設定方法は、その後、電気楽器の ハモンドオルガン(ジャズやポピュラーの世界で「オルガン」と言えば これを指します)の「ハーモニックドローバー」という音色設定スライダー にそのまま受け継がれました。そして「電子オルガン」の登場する時代 となっても、まったく同等にこの音色生成方法は生き続けています。と いうのも、この考え方は、「サイン合成によるフーリエ合成」という 科学的発想と、「倍音成分による音色の印象」という聴覚心理的事実に よって、人間にとても自然なものだからなのです。ここでは、オルガンの 音色生成のシステムを紹介するとともに、実際にサンプルサウンドによって この世界を体験的に理解していただきたいと思います。

オルガン(ここではパイプオルガン、あるいはハモンドオルガンを指す こととします)の世界では、ある鍵盤を押した時に出るそのものの音を 「8フィート」と言います。これは基準となるパイプの長さ、と考える ことができます。すると、同じ鍵盤に対して「16フィート」というのは、 長さ(音の波形の周期)が倍で振動数が半分、という、オクターブ下の サウンドを意味します。これを8フィートと混ぜると、低音に厚みのある サウンドとなります。同様に4フィートというのはオクターブ上の音、 2フィートは2オクターブ上、1フィートは3オクターブ上の音で、これら を混ぜると、高域の豊富なきらびやかな音になってきます。

そして、これらオクターブ関係だけでなく、3倍音のオクターブ下となる のが、8フィートに対して完全5度上の「5と3分の1フィート」です。 同様に、5倍音(長3度の2オクターブ上)も利用して、

 ・8フィートに対してオクターブと完全5度上の「2と3分の2フィート」
 ・8フィートに対して2オクターブと完全5度上の「1と3分の1フィート」
 ・8フィートに対してオクターブと長3度上の「3と5分の1フィート」
 ・8フィートに対して2オクターブと長3度上の「1と5分の3フィート」
というパイプも、よく使われます。そこで、これらを実際に次々と混ぜる 度合いを変化させながら、実際のオルガン音楽として体験できるサンプル サウンドを制作して、付録CDROMのトラック14に入れてみましたので、CD プレーヤで聞いてみて下さい。

このサウンドですが、筆者は以下の方法で制作しました。まず、付録CDROM にあるリスト4.7のような、MIDIイベントの並んだファイルを用意します。 これを、 図4.31 のようなMAXパッチによってMIDI自動演奏させ、あわせて 合成音声で生成しているサウンドの解説を読み上げます。筆者は、図に並んだ ボタンを次々にクリックするだけです。

そして、 図4.32 のような楽音合成パッチを組み込んだ「Kymaワークステー ション」というシステム(本書では紹介を省略します。興味のある読者は、 共立出版bit別冊「コンピュータと音楽の世界」に筆者の書いたKyma紹介 記事を参照して下さい)によって、以下のような倍音構成によるサイン波 合成システムで、刻々と変化する倍音成分と演奏情報に対応した サウンドをリアルタイム生成し、これをSGI Indyワークステーションで レコーディングしました。

音楽の進行とともに、オルガン音色として、以下のようにサウンドが変化 していますので、聞きながら追いかけてみましょう。

----------------------------------------------
初期状態
 ・8フィートに対してオクターブ下の「16フィート」
 ・鍵盤そのものに対応する「8フィート」
 ・8フィートに対して完全5度上の「5と3分の1フィート」
 ・8フィートに対してオクターブ上の「4フィート」
 ・8フィートに対してオクターブと長3度上の「3と5分の1フィート」
 ・8フィートに対してオクターブと完全5度上の「2と3分の2フィート」
 ・8フィートに対して2オクターブ上の「2フィート」
 ・8フィートに対して2オクターブと長3度上の「1と5分の3フィート」
 ・8フィートに対して2オクターブと完全5度上の「1と3分の1フィート」
 ・8フィートに対して3オクターブ上の「1フィート」
						→ いずれも level=0 に設定
----------------------------------------------
ボイス「Let's start : 8 feets only.」
 ・鍵盤そのものに対応する「8フィート」
						→ level=60 に設定
 ・音楽演奏スタート
----------------------------------------------
ボイス「Adding : 4 feets and : 2 feets.」
 ・8フィートに対してオクターブ上の「4フィート」
						→ 5秒かけて level=45
 ・8フィートに対して2オクターブ上の「2フィート」
						→ 10秒かけて level=40
----------------------------------------------
ボイス「Adding : 16 feets and : one feet.」
 ・8フィートに対してオクターブ下の「16フィート」
						→ 8秒かけて level=30
 ・8フィートに対して3オクターブ上の「1フィート」
						→ 15秒かけて level=30
----------------------------------------------
ボイス「Adding : 5 and one thirds feets and : 2 and two thirds feets.」
 ・8フィートに対して完全5度上の「5と3分の1フィート」
						→ 8秒かけて level=30
 ・8フィートに対してオクターブと完全5度上の「2と3分の2フィート」
						→ 15秒かけて level=30
----------------------------------------------
ボイス「Adding : one and one thirds feets and : one and three fifths feets.」
 ・8フィートに対して2オクターブと完全5度上の「1と3分の1フィート」
						→ 8秒かけて level=25
 ・8フィートに対して2オクターブと長3度上の「1と5分の3フィート」
						→ 15秒かけて level=25
----------------------------------------------
ボイス「Adding : 5 and one thirds feets and growing other feets.」
 ・8フィートに対して完全5度上の「5と3分の1フィート」
						→ 8秒かけて level=25
 ・8フィートに対してオクターブ下の「16フィート」
						→ 30秒かけて level=55
 ・鍵盤そのものに対応する「8フィート」
						→ 60秒かけて level=65
 ・8フィートに対して完全5度上の「5と3分の1フィート」
						→ 40秒かけて level=45
 ・8フィートに対してオクターブ上の「4フィート」
						→ 35秒かけて level=55
 ・8フィートに対してオクターブと完全5度上の「2と3分の2フィート」
						→ 45秒かけて level=45
 ・8フィートに対して2オクターブ上の「2フィート」
						→ 25秒かけて level=55
 ・8フィートに対して2オクターブと長3度上の「1と5分の3フィート」
						→ 45秒かけて level=50
 ・8フィートに対して2オクターブと完全5度上の「1と3分の1フィート」
						→ 45秒かけて level=50
 ・8フィートに対して3オクターブ上の「1フィート」
						→ 35秒かけて level=55
----------------------------------------------
ここで、たとえば「35秒かけて level=55」というのは、それ以前の状態 から35秒間かけて、少しずつなめらかにレベルが55に直線的に向かっていく、 ということです。それぞれの倍音成分について、同時になめらかに変化させる (それもMIDIの1から4チャンネルまで同時に)ようなことは、このような MAXパッチを使えばとても容易です。(^_^)


トップに戻る