tn8's SuperCollider site
tdfc

Audio Tutorial 6

6. Accessing Audio


■6.1 オーディオ入力の利用方法

オーディオの入力にはAudioIn ユニット・ジェネレータを利用します。
AudioIn ユニットジェネレータではアクティブなサウンドハードウェアからオーディオを 得ることができます。AudioInは入力チャンネル数という一つのパラメータをとります。 物質的な入力チャンネル数は事実上、入力ルートによって決められてきます。
例えば、私はdigidesign社のDigi001を使用していますがこの場合は(Digi001は8チャンネ ルのオーディオインを備えているので)最大入力チャンネル数は8チャンネルと なりますし、もし、オーディオソースをステレオのCDにするならば、入力チャンネル数は 2チャンネルになるでしょう。

では、実際のプログラムを見てみましょう。
*フィードバックを防ぐためにヘッドフォンを使用してください。

チャンネル1から入力されたオーディオを再生します

{ AudioIn.ar(1) }.play;

2チャンネル以上のチャンネルを入力するには配列を利用します。

{ AudioIn.ar([1, 2]) }.play;

上述の例では配列の中身は[1, 2]ですので、1チャンネルと2チャンネルから入力された オーディオを再生することになります。

■6.2 ディスクからオーディオファイルを再生する

ディスクからのオーディオファイル再生にはDiskIn ユニット・ジェネレータを利用しま す。 詳しくは、DiskIn ヘルプファイルを参照してください。

( var file; file = SoundFile.new; // 新しいSoundFileオブジェクトをつくります

if (
file.readHeader(":Sounds:floating_1"), // ファイルのヘッダーを読み込みます
{ //読み込み成功

Synth.scope({
DiskIn.ar(
file, // 再生するサウンドファイル
false // ファイルのループポイントに従うかどうか
)
}, 0.5);
});
)

■6.3 RAMからオーディオファイルを再生する

RAMに読み込まれたファイルはディスクからファイルを読み込んだ場合よりもいろいろな 方法で処理をすることができます。RAMに読み込まれたファイルを再生するにはPlayBufユニット・ジェネレータを利用します。詳しくは、PlayBuf ヘルプファイルを参照してください。

(
// 録音時と同じスピードで普通のプレイバックをします
var filename, file, signal;
filename = ":Sounds:floating_1"; // 使用するサウンドファイルのパス名

file = SoundFile.new; // SondFile objectをつくる

if (file.read(filename), { // 全体のファイルを読み込む

signal = file.data.at(0); // シグナルバッファができる

Synth.play({
PlayBuf.ar(
signal, // サンプルバッファ

file.sampleRate, // サンプリングレート
1, // プレイバックレート
0, // 再生開始位置、サンプル数で指定
0, // ループの開始位置、サンプル数で指定
signal.size-2 // ループの終了位置、サンプル数で指定
)
});
},{ (filename ++ " not found.\n").post });
)

////////////////////////////////////////////////////////////

(
// マウスでプレイバックレイトをコントロールする
var filename, file, signal;
filename = ":Sounds:floating_1"; // 使用するサウンドファイルのパス名

file = SoundFile.new; // SoundFile objectをつくる

if (file.read(filename), { // 全体のファイルを読み込む

signal = file.data.at(0); // シグナルバッファができる

Synth.play({
PlayBuf.ar(
signal, // サンプルバッファ
file.sampleRate, // サンプリングレート
MouseX.kr(0.25, 4, 'exponential'), // プレイバックレート

0, // 再生開始位置、サンプル数で指定
0, // ループの開始位置、サンプル数で指定
signal.size-2 // ループの終了位置、サンプル数で指定
)
});
},{ (filename ++ " not found.\n").post });
)