これまでのチュートリアルの例では、基本的な波形を使ってサウンドを合成しました。ここからの数章では、サイン波を用いて、その他のよく知られたいくつかのシンセシス技法について見ていきます。これらの技法の大部分は、コンピュータが使用される以前のアナログシンセシスの方法によるものとはいえ、有益で、実用的なものです。
サイン波は、1つの周波数でのエネルギーを持ちます。複合音は、異なるいくつか(または多く)の周波数のエネルギーで構成されるものと定義されるため、複合音を合成する1つのわかりやすい方法として、複数のサイン波オシレータを使用し、それらをすべて加算することが考えられます。
複合音を作るために、4つのサイン波を加算します
もちろん、複合音を合成するためにどんな波形を加算してもかまいません。しかし、このチュートリアルの例ではサイン波にこだわろうと思います。サイン波の加算によって複合音を合成することは、いくぶん退屈な方法ですが、複合音の各コンポーネント(部分音)の振幅、周波数の完全なコントロールを可能にします。
チュートリアルパッチでは、各々が振幅、周波数、位相について独立してコントロールされる6つのコサイン波オシレータ(cycle~ オブジェクト)を加算しています。パッチをシンプルにするために、基音(基本周波数)との比によって各部分音の周波数を指定できる partial~ というサブパッチを設計しました。
サブパッチ partial~ の内容
例えば、基本周波数の2倍の周波数を持つ部分音が必要な場合、アーギュメントとして2.0をタイプする(または、第2インレットに値を送る)だけです。この方法では、いくつかの partial~ オブジェクトが同じソースから基本周波数の値を(左インレットで)受け取っている場合には、仮に基本周波数の値が変更されたとしても、それらの周波数の比は同じままです。
もちろん、非常に面白いサウンドを作るためには、各々の部分音の振幅は独立な関係を保ちながら変化しなければなりません。したがって、メインパッチでは、各部分音の振幅は、固有のエンベロープジェネレータで制御します。
チュートリアル3で、line~ オブジェクトに1組の値のリストを送り出すことで振幅エンベロープをつくる方法を見ました。それは、目的の値と所要時間を与えることでした。この、線分の連結によって制御関数を作る方法は、チュートリアル6でも説明したように、多くの場面で役に立つもの(振幅エンベロープを生成することは、特に一般的な使用法)です。
functionオブジェクトは、そういった線分関数を生成するための大きな手助けとなります。その理由は、このオブジェクトが、関数の領域、レンジ(x軸、y軸での数値)を定義するだけでなく、好きな形を(グラフィカルに)描くことができるからです。ブレークポイントが必要な所をマウスでクリックするだけで関数を描くことができます。functionは、bang を受け取ると、2番目のアウトレットから目的の値ー所要時間のペアを要素とするリストを送り出します。このリストをline~ オブジェクトの入力として使用すると、描かれた形に対応したシグナルの変化を作り出します。
function は line~ で使用されるコントロールシグナルのためのグラフィカルな関数ジェネレータです
ところで、function はMaxにおいて、シグナル処理以外の目的でも同様に役に立ちます。これは、補間するルックアップテーブルとして使用できるのです。インレットに数値を受け取ると、それをx軸の値とみなし、描かれた関数(ブレークポイントの間は必要に応じて補間します)の対応するy軸の値を左のアウトレットから出力します。
6つの部分音だけでも、「リアルな」楽器のような音から、明らかに人工的な波形の結合による音まで、様々な音色を作ることができます。実際に試してみることができるように、いくつかの異なる音のセッティングがpresetオブジェクトにストア(保存)されています。それぞれの音の簡単な説明は下に述べられています。
・ezdac~ スピーカーアイコン上をクリックしてオーディオをオンにして下さい。ボタンをクリックして音を演奏してみて下さい。preset オブジェクトにストアされているプリセットをクリックして、セッティングを変更して下さい。ボタンをクリックして新しい音を聞いてみて下さい。
プリセット1: | この音は、本当は実際の楽器をエミュレートしているわけではありません。単に、調和する関係(倍音関係)にある部分音のセットで、各々異なった振幅エンベロープを持っています。様々な部分音が前面にでてくるために、音が伸びている間に音色がわずかに変わっていく様子に注意して下さい。(もし、実際の音色の変化に気付かないときは、音の持続時間を長くしてみて(例えば8000ミリ秒)、よりゆっくりと変化していく音を聞いてみて下さい。 |
プリセット2: | この音は、まるで教会のオルガンのように聞こえます。部分音は基本波とすべてオクターブの関係にあり、アタックは適度に速いのですがパーカッシブというほどではありません。そして音の振幅は持続している間、ほとんど減衰しません。上の方の部分音が、下の方のものより速く消えていくのが、聞き取れるだけでなく視覚的にもわかります。 |
プリセット3: | この音は、わずかにチューニングをずらされた倍音関係の部分音からできています。アタックはごく速く、振幅は最初のアタックの後、かなり速く減衰します。これは、音にパーカッシブな、あるいは撥弦音のような効果を与えます。 |
プリセット4: | この音の部分音のための振幅エンベロープは、トランペットの低い音域の音の分析によって導かれたものです。もちろん、ここでは実際のトランペット音に現れる多くの部分音のうちの6つだけによるものです。 |
プリセット5: | この音の部分音のための振幅エンベロープは、同じトランペット音の分析によるものです。しかしこの場合、奇数次の倍音だけが用いられています。これは、ほとんどクラリネットのような音を作り出します。その理由は、クラリネットの円筒状の孔が奇数次倍音を共鳴させるからです。また、この音の長い持続は全体のエンベロープを減衰させますが、これがなおさら典型的なクラリネットに似たアタックを与えています。 |
プリセット6: | これは、完全に人工的な音です。最も低い部分音が最初に始まり、6番目の半音高い部分音がそれに続きます。最後には、第1と第6の部分音の間の周波数を持った残りの部分音が始まり、微分音によるクラスタをつくり出します。うなりの効果は、これらのわずかに周波数の異なる波の干渉によるものです。 |
プリセット7: | このケースでは、部分音は長2度の間隔をあけられています。各部分音の振幅が増減することで、アルペジオのような全音音階のクラスタの複合効果を作り出しています。これが、単音というよりむしろ全音音階によるコードなのは明らかですが、段階的で重なり合っているアタックとディケイによって、音はうまく一緒に溶けあっています。 |
プリセット8: | この音で、部分音は十分に強い高調波成分スペクトルを感じさせますが、まだ基本ピッチを感じ取ることができます。しかし、それは十分にずれたチューニングをされていて、調和的でない「ベル」のスペクトルに似ています。パーカッシブなアタック、素早いディケイ、そして音の持続の部分での部分音の独立した変化は、すべて金属製のベルを打った音の特徴です。 |
このようにいくつかのシグナルをまとめて加算するとき、多くの場合その合計が dac~ オブジェクトの振幅の限界より大きくなってしまうため、全体の振幅は *~ オブジェクトで適切に調整されなければならないという点に注意して下さい。
・この音をスタートとして、この加法シンセシスパッチで自分自身の音をデザインしてみたいと思うでしょう。基本周波数、部分音そして、プリセット音の持続期間を変更して、音を変えてみて下さい。また、ブレークポイントの上でドラッグして、エンベロープを変更することも可能です。
function オブジェクトで関数を描くためには
このチュートリアルでは説明されていませんが、function でブレークポイントの作成、移動、削除は、Maxメッセージを使って実行することも可能です。詳細はマニュアルのObjectsセクションの function についての記述を参照して下さい。
数値を続けた setdomain メッセージは、エンベロープの外形を変更せずに、functionのX軸のスケール(目盛り)を変更します。"Duration" というナンバーボックスの数値を変更した場合、functionには setdomain メッセージが送信されています。
加法シンセシス(アディティブシンセシス)は、音を加算することによって新しい複雑な音を合成するプロセスです。純粋なサイン音は1つの周波数のエネルギーだけを持つため、加法シンセシスの基本となる構成要素ですが、もちろん他のどんなシグナルでも、加算することができます。足しあわされたシグナルは、DACでクリップされることのないように、1より小さい定数シグナル値で振幅を調整する必要があるでしょう。
複合音の音色が、ピッチが変わっても同じままであるためには、各部分音は基本周波数との関係を維持しなければなりません。各部分音の周波数を基本周波数に対する比(倍数)によって決定すると、基本周波数が変わった場合でも音のスペクトルを維持することができます。
複合されたな音が面白い音色を持つために、部分音の振幅はある程度独立性をもって変化させなければなりません。function オブジェクトでは、振幅エンベロープのようなコントロールの外形を描くことができます。そしてfunction が bang を受信すると、その形を line~ オブジェクトに送り、line~ は対応するコントロールシグナルを生成します。
function | グラフィカルな関数ブレークポイントエディタ |