チュートリアル 17:サンプリング
復習

サンプリング演習

この章では、オーディオのサンプリングと演奏の方法についてのあなたの理解度をチェックできるように、演習問題を提示します。サンプルパッチで示される解答を調べる前に、自分自身の新規ファイルで演習をやりとげてみて下さい。(あなた自身のパッチを設計する間、サンプルパッチを開いておかないようにして下さい。そうでないと、オーディオをオンにしたとき両方のパッチを聞くことになってしまいます。)

演習問題は、次のようなパッチを設計することです。

  • コンピュータのキーボードで”a”を入力するとオーディオがオンになる。再度”a”を入力するとオーディオをオフに切り替える。

  • コンピュータのキーボードで”r”を入力すると、コンピュータに(入力ジャック、または内部CDプレーヤーから)入力されている任意のオーディオを 1秒間レコーディングする。

  • “p”を入力するとレコーディングしたものを演奏する。演奏はサウンドが2秒間続くように半分の速度で行われる。

  • 演奏するとき、サンプルには振幅エンベロープが適用され、サンプルの両端で唐突なクリックノイズが聞こえることのないように、最初と最後の僅かな時間で振幅を次第に減少させる。
  • サンプルは、3Hzのビブラートを伴って演奏される。ビブラートの深さは、半音(係数 : 2±1/12)ずつ上下とする。

ヒント

サウンドを buffer~ にストアし、メモリから演奏する必要があるでしょう。

record~ によって buffer~ に直接レコーディングすることができます。(チュートリアル13参照)。record~ へのサウンドは、adc~(またはezadc~)から入力されます。

半分の速度で buffer~ からサンプルを演奏するために play~ groove~ の2つの選択肢があるのは明らかです。しかし、ここではプレイバック速度を継続的に変化させることによってサウンドにビブラートを付け加えたいため、groove~ の方がより良い選択です。groove~ はプレイバック速度を直接コントロールするために、(おそらく時間上で変化するような)シグナルを使用します。(チュートリアル14参照)

振幅エンベロープは line~ オブジェクトによって生成されることがベストです。このとき line~ のアウトプットは、(groove~ から)出力シグナルの振幅をスケールするために、*~ オブジェクトへ送られます。エンベロープを描くために function オブジェクトを使用して、line~ に、その描かれたエンベロープを出力することもできるでしょう。(チュートリアル7参照)

コンピュータのキーボードは、要求されたタスクを実行するために、adc~record~groove~line~(またはfunction)オブジェクトにトリガを送る必要があります。押されたキーの値を得るために key オブジェクトを、また、使用するキーの機能を検出するためにselect オブジェクトを使用して下さい。

サンプルにビブラートをかけるために、cycle~ オブジェクトによるサイン波を使用して下さい。cycle~ の周波数はビブラートの速さを、サイン波の振幅はビブラートの深さを決定します。従って、正確なビブラートの深さを作り出すためには、*~ オブジェクトによって cycle~ の振幅をスケールする必要があります。

ビブラートについてのチュートリアル10の説明では、モデュレートオシレータの出力をキャリアオシレータの周波数入力に加算することによってビブラートを作りました。しかし、この演習では2つの相違点があります。まず第1に、モデュレートオシレータは、もう一つの cycle~ オブジェクトの周波数より、むしろ groove~ のプレイバック速度をモデュレートする必要があります。第2は、キャリア入力へのモジュレータ出力の加算(チュートリアル10の場合)は、キャリア周波数が上下に同じ周波数変化するようなビブラートを作りますが、等しいピッチ(音程)で上下するビブラート(この演習で求められているもの)にはなりません。ピッチの変化は、キャリア周波数に特定の量(値)を加算するというより、乗算することによって作り出されます。

ピッチを半音1個分上げるためには、その周波数に2の12乗根、つまり係数2の1/12乗(約1.06)を掛けなければなりません。また、ピッチを半音1個分下げるためには、2の-1/12乗(約0.944)を掛けなければなりません。この範囲内で連続して変化するシグナル値を計算するためには、MSPオブジェクト pow~ を使う必要がありますが、これについてはまだ説明されていません。詳しくは、このマニュアルの”Object”セクションの解説を参照して下さい。

解答

・サンプルパッチのパッチャーウィンドウをずっと右の方までスクロールして、この演習問題の解答を見て下さい。


オーディオサンプルのレコーディングとプレイバックについての演習問題の解答

buffer~ オブジェクトへのアーギュメントでは、ミリ秒で表される長さ(1000)、チャンネル数(2)を指定します。これは、最初にどれくらいのメモリが buffer~ に割り当てられるかを決定します。


buffer~ の名前、長さ、チャンネルをセット

buffer~ に割り当てられるメモリが1秒に限られているため、buffer~ にレコーディングするとき、record~ オブジェクトにレコーディングの停止を知らせる必要はありません。buffer~ の最後まで達するとレコーディングは停止します。

コンピュータキーボードからのキーストロークは key によって報告され、select オブジェクトは ‘a’、'r’、'p’のキーを見つけるために使用されます。select からの bang は、adc~record~ groove~ に対して必要なメッセージをトリガします。


キーストロークが検出され、MSPオブジェクトにメッセージを送るために使用されます

キーストローク ’p’はまた、サンプルが演奏されると同時に振幅エンベロープをトリガするためにも使用されます。このエンベロープはgroove~ の出力をスケールするために使用されます。


2秒間のエンベロープは、サンプルの最初と最後の振幅をフェードイン、フェードアウトします

sig~ 0.5 オブジェクトは、groove~ の基本的なプレイバック速度を、通常の半分にセットします。3Hzのコサイン波の振幅は係数0.083333(1/12に等しい値ですが、コンピュータでは12で割るより効率的です。)によってスケールされます。そのため、値は-1/12から1/12まで変化します。このサイン波シグナルは指数関数 pow~ の指数として使用され(入力値による2の累乗)、結果はプレイバック速度に掛ける係数として使用されます。


通常の半分の速度で、±半音でのプレイバック