chiptune

SCでチップチューンを奏でよう:その3

つづいて、シーケンスを書きましょう。SuperColliderでシーケンスを記述する方法はいくつかありますが、ここでは、Pbindというクラスをつかいます。Pbindでは、常に、キーワードとそれに与える数値(パラメータ)を、1つのセットとして書いています。使えるキーワードは、あらかじめ決まっていたり、前回記述したSynthDefの中で追加することができます。

キーワードとパラメーターの記述例

/dur, 1, // duration、音を1秒間隔で鳴らす。
/legato, 0.5, // レガート、音の長さを半分にする。
/amp, 0.5, // 全体の音量を半分にする(最大1)
/tone0, 5, // 1つ目の音色を5番にする
/tone1, 5, // 2つ目の音色を14番にする

パラメータは、数値か、Pseqなどをつかってシーケンスにすることもできます。

/dur, Pseq([0.2,0.1,0.1],inf), // duration、音を1秒間隔で鳴らす。
/tone0, Pseq([5,7,7],inf), // 1つ目の音色を5、7、7、と1音毎に変える。

なお、指定されないパラメータには、デフォルトの初期値が適応されます。

実際に音を鳴らしてみます。

// 1秒毎に音を鳴らす
Pbind(
\instrument, \atari2600,
\dur, Pseq([1], inf),
\amp, 0.5
).play;

//音の鳴らす間隔を変える
Pbind(
\instrument, \atari2600,
\dur, Pseq([0.25,0.125,0.125], inf),
\amp, 0.5
).play;

//音の鳴らす間隔を変える
Pbind(
\instrument, \atari2600,
\dur, Pseq([0.25,0.125,0.125], inf),
\legato, 0.5,
\amp, 0.5
).play;

//さらに音色も変える
Pbind(
\instrument, \atari2600,
\dur, Pseq([0.25,0.125,0.125], inf),
\legato, 0.5,
\tone0, Pseq([5,7,7],inf),
\amp, 0.5
).play;

//さらに音高も変える
Pbind(
\instrument, \atari2600,
\dur, Pseq([0.25,0.125,0.125], inf),
\legato, 0.5,
\tone0, Pseq([5,7,7],inf),
\freq0, Pseq([1,2,3,4,5],inf),
\amp, 0.5
).play;

//さらに音高も変える
Pbind(
\instrument, \atari2600,
\dur, Pseq([0.25,0.125,0.125], inf),
\legato, 0.5,
\tone0, Pseq([5,7,7],inf),
\freq0, Pseq([3,4,5,6,7,8],inf),
\amp, 0.5
).play;

//さらに2つめの音も変える
Pbind(
\instrument, \atari2600,
\dur, Pseq([0.25,0.125,0.125], inf),
\legato, 0.5,
\tone0, Pseq([5,7,7],inf),
\freq0, Pseq([3,4,5,6,7,8],inf),
\amp0,15,
\tone1, Pseq([8],inf),
\freq1, Pseq([31,15],inf),
\amp1,Pseq([15,8, 15,1,7],inf),
\amp, 0.5
).play;

//いろいろ変える サンプルを聴く:chiptune_sample3
// Pn(x,m) は、1つ目の値xを、n回繰り返します。
// P(0,16) は、0を16回繰り返す

Pbind(
\instrument, \atari2600,
\dur, Pseq([0.125], inf),
\legato, 0.5,
\tone0, Pseq([8],inf),
\freq0, Pseq([31,31,15,15,9,1],inf),
\amp0,12,
\tone1, Pseq([4],inf),
\freq1, Pseq([31,15 ,21,7],inf) - Pseq([Pn(0,12), Pn(8,12)],inf),
\amp1,Pseq([15,8, 15,1,7],inf),
\amp, 0.5
).play;

SCでチップチューンを奏でよう:その2

チップシュミレーショタの拡張クラスやプラグインをダウンロードしたら、所定の場所に置きましょう。Application Support ライブラリに置く方法もありますが、ここではとりあえず、下記の場所に置くことにしましょう。

・拡張クラス(拡張子:.sc)は、SuperCollider > SCClassLibraryフォルダ内にいれます。
・ヘルプファイル(拡張子:.htmlまたは.rtf)は、SuperCollider > Helpフォルダ内に入れます。
・プラグイン(拡張子:.scx)は、SuperCollider > pluginsフォルダ内に入れます。

インストールできたら、SuperColliderを再起動するか、リコンパイル(コマンド + Kを押す)しましょう。これで、可愛いチップチューンを鳴ならしてみる事ができます。まずは、helpファイルに付いているサンプルプログラムを動かしてみると良いかと思います。

※コードを実行するには、とりあえずサーバを起動します。左下のlocalhost serverパネルの「Boot」ボタンをおします。そして実行したい部分を選択し、enterキー(マシンによっては、fn + returnキー)を押します。音を止めるには、コマンド + .(ピリオドキー)を押します。

さて、私が最初に気に入って使っているクラスを紹介します。それは、Atari2600。なんとも、名前が素敵な感じです。Atari TIAチップのエミュレータ。音は、同時に2音しかでません!(もちろんコンピュータ上で、複数のAtari2600クラスインスタンスを使えば、何音でも同時に成らす事ができますが、ここは、このレトロスペクティブな制限に、マゾヒスティックに従いましょう。)

ヘルプファイル、Atari2600.htmlをみると、
*ar(audc0, audc1, audf0, audf1, audv0, audv1, rate)

と、あり、これが、設定できるパラメータです。それぞれ2音づつ、音色、音高、音量を、書きます。つまり、audc0は1つ目の音の音色、audc1は2つ目の音の音色、audf0、audf1はそれぞれの音の周波数、audv0、audv1はそれぞれの音の音量です。

音色は0から15、周波数は0から31、音量は0から15の値を指定します。なお、周波数(音の高さ)は、30kHzを除算する係数として記述し、音色にも依存するため、12音階的な正確なピッチを奏でようとすると、失敗します…この辺りは、遊びながら、いい音楽を探してく必要があります。

シーケンスを書く前に、SynthDefと呼ばれる、シンセの定義を書きます。とりあえず、次のコードを実行しておいてください。


SynthDef(\atari2600, {|out= 0, gate= 1, tone0= 5,
tone1= 8, freq0= 10, freq1= 20, amp= 1,amp0 =15, amp1 = 15, pan= 0, relT = 0.05|
var e, z;
e= EnvGen.kr(Env.asr(0.001, amp, relT), gate, doneAction:2);
z= Atari2600.ar(tone0, tone1, freq0, freq1, amp0, amp1);
Out.ar(out, Pan2.ar(z*e, pan));
}).store;

これができたら、試しに音を出してみます。

~atari = Synth(\atari2600, [\amp0, 0]) // この行を実行して音を1音だけ出す。

音が出たら、音色を聴いてみましょう。一行づつ実行してみましょう。何も選択していない状態では、カーソルのある1行だけが、実行されるので、ここでは次々enterキーを押せば、音色が変わって行きます。

// 上のコードで音を出したまま、次のコードを1づつ実行して、
// 音色を変える サンプルを聴く:Atari2600_tones
~atari.set(\tone1, 0)
~atari.set(\tone1, 1)
~atari.set(\tone1, 2)
~atari.set(\tone1, 3)
~atari.set(\tone1, 4)
~atari.set(\tone1, 5)
~atari.set(\tone1, 6)
~atari.set(\tone1, 7)
~atari.set(\tone1, 8)
~atari.set(\tone1, 9)
~atari.set(\tone1, 10)
~atari.set(\tone1, 11)
~atari.set(\tone1, 12)
~atari.set(\tone1, 13)
~atari.set(\tone1, 14)
~atari.set(\tone1, 15)

// 音程を変えるサンプルを聴く:Atari2600_freq
~atari.set(\freq1, 31)
~atari.set(\freq1, 30)
~atari.set(\freq1, 29)
~atari.set(\freq1, 28)
~atari.set(\freq1, 27)
~atari.set(\freq1, 26)
~atari.set(\freq1, 25)
~atari.set(\freq1, 24)
~atari.set(\freq1, 23)
~atari.set(\freq1, 22)
~atari.set(\freq1, 21)
~atari.set(\freq1, 20)
~atari.set(\freq1, 19)
~atari.set(\freq1, 18)
~atari.set(\freq1, 17)
~atari.set(\freq1, 16)
~atari.set(\freq1, 15)
~atari.set(\freq1, 14)
~atari.set(\freq1, 13)
~atari.set(\freq1, 12)
~atari.set(\freq1, 11)
~atari.set(\freq1, 10)
~atari.set(\freq1, 9)
~atari.set(\freq1, 8)
~atari.set(\freq1, 7)
~atari.set(\freq1, 6)
~atari.set(\freq1, 5)
~atari.set(\freq1, 4)
~atari.set(\freq1, 3)
~atari.set(\freq1, 2)
~atari.set(\freq1, 1)
~atari.set(\freq1, 0)

次回は、シーケンスも書くことにしましょう。

SCでチップチューンを奏でよう:その1

今年のSCシンポジウムは、ベルリンで9月に開催予定、だそうです、楽しみ。

さてさて、本題。
本来、狭義での「チップチューン」は、1980年代頃のコンピュータやゲーム機に搭載された内蔵音源チップ(主にPSG, Programmable Sound Generatorと呼ばれている)を、使って作られた音と音楽のことを指します。多くのチップは、3つの矩形波と1つのノイズ発振器から成り、その制約の中で、いかに豊かな音楽を作り出して行くか、という挑戦にも似た作曲・プログラミング活動は、私のSuperColliderを用いてのそれに近いものを感じます。しかし、最近は、矩形波やピコピコした音が入っていれば、それでチップチューン(のようなもの)とみなされている楽曲も多く、制約好きの私にとっては、これは、大変軟弱な – 音楽的に優れているかどうか、はさておき – ひ弱なものに聴こえます。

さて、そこで、SCでチップチューンを奏でてみましょう。「チップを鳴らしてこそチップチューンだ、コンピュータなんて!」という硬派な反論は大歓迎ですが、私は、SCが大好きなのです、仕方ありません。

SCには、いくつかのチップをエミュレートするプラグインが用意されています。これは、FredrikOlofsson氏によりSCに移植されたもので、彼のウェブサイトから無償でダウンロードすることができます。MacOS X版とwindows版が用意されています。入手できる主なクラスのリストは、下記の通り。間違っていたり、チップをつかった音楽のよいサンプルを見つけたら、ぜひ教えてくださいね!

// – - – - – - – - – - – - – - – - – - – - – - – - – - – - – - – - – - -
Astrocade … 家庭用ゲームコンソール「Astrocade」のカスタムIOチップ。
参考ビデオ:http://www.youtube.com/watch?v=HPrmN35zGLw

Atari2600… Atari TIAチップ。
参考ビデオ:http://www.youtube.com/watch?v=pvZF8LCC3n4

AY8910… AY-3-8910チップ。多くのアーケードゲーム(Intellivision, Vectrex)や家庭用ゲームコンソール(MSX, AtariST, ZX Spectrum 128など)に使われた。
参考ビデオ:http://www.youtube.com/watch?v=ZKVv_OWg08A

Pokey … POKEYのチップ。Atari400, 800 XLシリーズ、XEシリーズ、Atari5200などにつかわれていたらしい。8bit版。
MZPokey … POKEYのチップ。16bit版。
参照:http://ja.wikipedia.org/wiki/Atari_8ビット・コンピュータ

Nes2 … NES(Nintendo Entertaiment System)のAPU(AudioProcessingUnit)
参考:http://crystal.freespace.jp/pgate1/nes/nes_apu.htm

SID6581f … コモドール(Commodore CBM-II、Commodore 64、Commodore 128、 Commodore MAX、などの家庭用コンピュータ)に使われていたチップ。
参考:http://en.wikipedia.org/wiki/MOS_Technology_SID

SN76489 … SegaMasterSystem, Acorn BBCなど多くの機器に使われていたTexas Instrumentsのチップ。
参照:http://en.wikipedia.org/wiki/SN76489

続く。

Get Adobe Flash playerPlugin by wpburn.com wordpress themes