チュートリアル 16:サンプリング
オーディオファイルのレコーディングと演奏

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

これまで、直接レコーディングしたり、あらかじめレコーディングしてあるオーディオファイルから読み出すことによって、サウンドをメモリ(buffer~の中)にストア(格納)する方法を見てきました。ひとたびサウンドがメモリにストアされれば、それに対してcycle~lookup~index~play~groove~wave~ 等によって様々な方法でアクセスすることができます。

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

オーディオファイルをレコーディングする:sfrecord~

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


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

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

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

オーディオファイルの演奏:sfplay~

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


シンプルなオーディオファイル演奏の実装

・"Set the current file"と表示された openというメッセージボックスをクリックして、レコーディングしたオーディオファイルを開いて下さい。そして、(オーディオをオンにして)"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~ にそのナンバーを送ることによって異なったオーディオの抜粋を演奏することができます。パッチの左上部分では、コンピュータのキーボードから直接ナンバーを入力することができます。


ナンバーキーからの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~ へ次のキューの送信を行なうことも含まれます。

参照

sfplay~ ディスクからオーディオファイルを演奏
sfrecord~ ディスク上のオーディオファイルに録音