チュートリアル16

サンプリング:サウンドファイルのレコーディングと演奏

メモリからの演奏vs.ディスクからの演奏

これまでに、直接にレコーディングしたり、予めレコーディングしてあるAIFFやSound Designer IIのファイルから読み出して、サウンドをメモリ(buffer‾の中)にストアする方法を見てきました。一度メモリにサウンドがストアされてしまえば、それをcycle‾、lookup‾、index‾、play‾、groove‾、wave‾等による様々な方法でアクセスすることができます。

当然ながら、サンプルをストアする場合、buffer‾は主としてMaxアプリケーションの未使用のRAMの量に制限されます。サウンドは、保持しているメモリの量に応じた数しかストアできません。多量のオーディオデータの演奏、レコーディングをするために、ハードディスクを記憶装置として使用する方法は、より合理的です。しかし、ハードディスクのアクセスは、RAMのアクセスより多くの時間を要します。;そのため、ハードディスクから演奏する時でも、MSPは、サウンドの一部をプリロードするための小さなバッファを作る必要があります。この方法では、MSPはプリロードされたサウンドを演奏し、その間にハードディスクから次のサウンドを得ることができるので、過度の遅延やディスクのアクセスタイムによる不連続を引き起こしません。

MSPでディスクからサウンドファイルを演奏する場合、通常の(標準速度で前方への)プレイバックだけが適しています。とはいっても、どんなファイルを演奏するか、ファイルのどの部分を演奏するか、そしていつそれを演奏するかといった非常にフレキシブルなコントロールが可能です。

サウンドファイルをレコーディングする:sfrecord‾

MSPには、AIFFファイルに直接レコーディングし、またはAIFFから直接演奏するための、sfrecord‾、及びsfplay‾というオブジェクトがあります。サウンドファイルをレコーディングすることは特に簡単で、単にファイルを開き、レコーディングを開始し、停止するだけです。(ファイルを閉じる必要すらありません; sfrecord‾が処理をしてくれます。)パッチャーウィンドウの右上隅に、ファイルをレコーディングするためのパッチがあります。

ディスク上のサウンドファイルにレコーディングします

sfrecord‾は、インレットで受取ったどのようなシグナルデータでも、ディスクにレコーディングします。シグナルデータは、adc‾、ezadc‾オブジェクトから、あるいは他のどんなMSPオブジェクトからでも直接送ることができます。

* "Create an AIFF file"と記されたメッセージボックスをクリックして下さい。ファイル名をつけるための"Save As"ダイアログボックスが示されます。(十分な空きスペースを持つボリュームにファイルを保存することを確認して下さい。)サウンドをセーブしたいフォルダを指定し、ファイル名を入力し、"Save"をクリックして下さい。オーディオをオンにして下さい。レコーディングを開始するtoggleをクリックして下さい。;レコーディングが終了したら、もう一度その上でクリックして下さい。

サウンドファイルの演奏:sfplay‾

Patcherの左の部分には、サウンドファイルを演奏するためのパッチがあります。sfplay‾の基本的な使用では、以下の例で示すようにわずかなオブジェクトしか必要としません。ファイルを演奏するためには、ただそれをオープンしてsfplay‾をスタートさせればよいだけです。sfplay‾の音声出力は、dac‾、ezdac‾またはMSPの中のどこにでも送ることができます。

シンプルなサウンドファイル演奏の実現

* "Set the current file"と記された[open]メッセージボックスをクリックして、レコーディングしたsoundfileをオープンして下さい。そして、(オーディオをオンにして)"Play/Stop"と書かれたtoggleをクリックし、そのファイルを聞いて下さい。

キュー(演奏指示の合図)による抜粋の演奏

sfplay‾はサウンドファイル全体をメモリへロードする必要がないので、実際に同じsfplay‾オブジェクトで開かれた多くのファイルが使用でき、そのうちのどれでも(または、そのどんな部分でも)キューによって演奏することができます。最後(最近)に開かれたファイルはsfplay‾によって"current(カレント)"ファイルであるとみなされ、メッセージ1を受け取るとそのファイルを演奏します。

* 残りの"open"メッセージ・ボックスをクリックし、他のサウンドファイルをオープンして下さい。"Define cues, 2 to 9"と記されたメッセージボックスをクリックして下さい。

sfplay‾へ"preload"メッセージを送ると、ファイルの全体または部分を指定して、それにキューナンバーを割り当てます。これによって、sfplay‾はナンバーを受け取るごとにそのキューを演奏します。サンプルパッチでは、キュー2、3及び4はファイルの全体を演奏し、キュー5はsacre.aiffの最初の270ミリ秒を演奏する等です。キュー1は常にカレントの(最も最近開かれた)ファイルを演奏するために、また、キュー0はsfplay‾を停止するために予約されています。

sfplay‾は、キューを受け取ると、演奏中のものを止めて直ちに新しいキューを演奏します。(また、sfplay‾にナンバーのリストを送信することによってキューの待ち行列を与えることができ、この時sfplay‾は連続して各キューを演奏します。)実際に、各々の"preload"メッセージは、キューを開始するためのオーディオデータを含んだ小さいバッファを作るので、キューナンバーを受け取ると直ちにプレイバックを開始することができます。

ここでは、キュー0〜9が定義されているので、sfplay‾にそのナンバーを送ることによって異なったオーディオの「抜粋」を演奏することができます。パッチの左上部分では、Macのキーボードから直接ナンバーを入力することができます。

ナンバーキーからのASCIIコードがsfplay‾へのキューとして用いられます

* "Keyplay On/Off"と記されたtoggleをクリックして下さい。ナンバーキーをタイプして、異なる定義済みキューを演奏してみて下さい。終わったら、"Keyplay"をオフにして下さい。

いろいろなファイルの抜粋を試す

おそらく、キューを定義する前に、指定したい開始点と終了点を明確に決めるために、ファイルのセグメント(区間)を聞く必要があるでしょう。"seek"メッセージを利用すると、カレントファイルのどんなセグメントでも聞くことができます。

* 再びあなたのサウンドファイル(他のものでも構いません)をオープンし、それをカレントファイルとして下さい。このパッチの右側の部分で、"seek"メッセージのための終了点を入力して下さい。指定した区間の演奏が始まります。他の開始点、終了点で試してみて下さい。

求める開始と終了時点を見つけたら、キューを設定するために"preload"メッセージでそれを使うことができます。sfplay‾は、"seek"メッセージから要求される「抜粋」の区間を前もって知ることはできないので、その抜粋をプリロードすることができません。それで、演奏を開始する前にハードディスクにアクセスするためのわずかな遅延を生じます。このため、seekは試聴のためのツールとして用いるのが最善の使用法です。;直ちにプレイバックすることの方が重要な、パフォーマンスの状況下では、プリロードされたキューの方が勝っています。

ファイル終了時でのイベントのトリガ

パッチャーウィンドウの右下の部分では、sfplay‾の右のアウトレットの使用法を示しています。キューが演奏をすべて終えた(または”0”メッセージによって停止された)時、sfplay‾は右のアウトレットからbangを送ります。このサンプルパッチで、bangは次の(ランダムに選択された)キューのためのトリガとして使用されています。そのため、sfplay‾は各キューが終了した後、効果的に自分自身を再開します。

キューが終了した後、sfplay‾は次のキューをトリガします

このパッチの中でのgateオブジェクトの重要性に注意して下さい。もしgate‾がないと0のキューが0以外のもう一つのキューをトリガーしてしまうため、sfplay‾を停止させることができません。gateは、キュー0がsfplay‾に送られる前に閉じてしまいます。

* "Play random excerpts"と記されたパッチで、メッセージボックスをクリックして、キューをプリロードして下さい。そして、toggleをクリックして、プロセスをスタートさせて下さい。もう一度toggleをクリックし、ストップさせて下さい。オーディオをオフにして下さい。

まとめ

大きな、または(かつ)多数のオーディオサンプルは、全部をRAMに読み込もうとするより、ハードディスクから読み出すほうが良い場合がよくあります。sfrecord‾、sfplay‾は、ハードディスクへサウンドファイルをレコーディングし、演奏するための簡単な方法を提供します。sfplay‾は、同時に多くのサウンドファイルを開いておくことができます。preloadメッセージを使って、あらかじめ特定のファイルまたはその区間を演奏するためのキューを定義することができます。sfplay‾にseekメッセージを与えて、キューのための異なる開始点、終了点を試すことができます。キューが演奏を終了(または停止)した時、sfplay‾は右側のアウトレットからbangを出力します。このbangは(sfplay‾への次のキューの送信を含めて)他のプロセスをトリガするために使用できます。

<-前の章 次の章->