チュートリアル17

サンプリング:復習

サンプリング演習

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

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

* Macのキーボードで”a”をタイプするとオーディオがオンになる。再度”a”を押すとオーディオをオフに切り替える。

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

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

* 演奏される時、サンプルには振幅エンベロープが適用され、サンプルの両端で唐突なクリックノイズが聞こえることのないように、最初と最後で振幅をわずかに先細りにする。

* サンプルは、3Hzのビブラートを伴って演奏される。ビブラートの深さは、半音(係数、2の±1/12乗)ずつ上下とする。

ヒント

サンプルを半分の速度で演奏する必要があるので、sfplay~(標準速度での演奏しかできない)を選択することは適当ではありません。サウンドをbuffer~にストアし、メモリから演奏する必要があるでしょう。

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

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

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

Macのキーボードは、要求されたタスクを実行するために、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~の最後まで行くと、レコーディングは停止します。

Macキーボードのキーストロークは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の入力値による累乗)、結果はプレイバック速度に掛ける係数として使用されます。

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

<-前の章 次の章->