作るサウンドエレクトロニクス 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」
「Roland SC-55markII」
「Korg 05R/W」
「Kawai GMega」
「PowerBook2400c」 この実験の紹介と結果については以上です。ここから得られる結論としては、 ・ハード音源とソフト音源では、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」というのは「音名」と呼ばれるもので、ここでは音楽心理学
などで一般的に使われる表現を用いています。つまりアメリカ式の音階記号と、
オクターブを表す整数のペアとなっています。
・古楽でよく使われる「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パッチを使えばとても容易です。(^_^)
|