日々のSC

HB41

DCオフセット….

http://www.tn8.jp/data/HB410813.m4a

SynthDef(”noiseC”, {arg freq = 100, amp=1, speed = 1, revMix = 0.5, revRoom =1.0,attack=0.1,pan=0,decay=0.5;
Out.ar(0, Pan2.ar(amp *
FreeVerb.ar(
SinOsc.ar([freq*1,freq*0.5], pi , 0.1) +
BPF.ar(WhiteNoise.ar(1) + PinkNoise.ar(0.5), 800) * Saw.ar(0.1) +
LPF.ar(WhiteNoise.ar(1) + PinkNoise.ar(0.25), 100) * SinOsc.ar(0.1)
, revMix , revRoom, 0.8)
* EnvGen.ar(Env.perc(attack,decay,8), doneAction:2) ;
,pan));
}).store;

~decay =4; ~attack =150;

Pbind(
\decay, Pfunc({~decay}),
\dur, Pseq([
Pseq([0.5,0.5,1,1,1,2],2),
0.5,0.5,1,1,1,1,1
],inf),
\amp, Pseq([0.5,0.5,1,1,1,2],inf),
\attack, Pfunc({~attack}),
\degree, Pseq([
4,4,5,4,7,6,
4,4,5,4,8,7,
4,4,11,9,7,6,5,
10,10,9,7,8,7
],inf).stutter(2),
\root,7,
\instrument, “noiseC”,
\tempo,4
).play;

.loadできない。

.loadメソッドを使って、ファイルを自動的に読み込んで実行させたりするのですが、これが、ときおり動かない。ファイルを開いて手動で実行はできるから、コード自体のエラーではない。試しに空のファイルにしてみると、このようなエラー。

//////////////////////////////////////////////////////////////
・ ERROR: Parse error
in file ’selected text’
line 3 char 9:
{¥fonttbl¥f0¥fnil¥fcharset0 Monaco;}
———————————–
・ ERROR: Command line parse failed
nil

つまり、フォントなどを指定するコマンドが、邪魔しているのだ。テキストエディットで新規に標準テキストを作成し、コードをコピペする。うん、これで大丈夫だ。

メロディの演奏

メロディを演奏する事について考えています。Craftwifeでは、普通の楽器を弾く様に演奏する、という気になれない。それがしたいなら、わざわざSuperColliderでプログラムをかいたり、iPhoneで演奏する意味がないのではないかと思う。MagicPiano的で、さらにアルゴリズミックな感じなものをつくろうかなぁ。

簡単なスケッチ。一行実行するとメロディが進む。

SynthDef(\sine_wave2, //SynthDefの名前

{ arg freq = 440, amp = 0.5, pan = 0; // アーギュメント(外からコントロールしたいパラメータ)

var source;

source = SinOsc.ar(freq) * EnvGen.ar(Env.perc(0.001,3), doneAction:2); // 音源
source = Pan2.ar(source, pan);
Out.ar(0, source * amp); // 出力先に音源を割り当て送る

}).store;

// 初期値、最初だけ実行。
i = 0;
~melodyArray = [63,68,73,78,83,88,87] – 12;

// この行だけを実行して行く。
i =( i + 1 )% 7; Synth(\sine_wave2, [\freq, (~melodyArray.at(i)).midicps])

// 途中でメロディをかえることもできる。
~melodyArray = [60,62,64,65,67,69,71] ;

仙台SCワークショップ、受講申し込み開始。

このところ暑くなったり、寒くなったりと、急激な変化についてゆけず、少し体調を崩し気味です…みなさまも、ご自愛くださいね。

さて、2010.6.13(日)の仙台 TRUNKでフリーウェアの音響合成プログラミング言語・SuperColliderのワークショップをすることになりました。初めてSuperColliderをするひとでも、それなりに使いこなしている方にも楽しめるものにしたいなぁと思っています。

ワークショップの内容は、アナログシンセ的な音作りからから始まり、ポップな音楽パターンの記述方法から、それをiPhoneでコントロールするところまで、つまり、Craftwifeが普段ライブでつかっているシステムを、一日で全部やります!

さくじつ、受講申し込み受付を開始しました。
受講定員は少なめなので、お申し込みはお早めに〜。

ちなみに、前日の土曜日には、Craftwife+Kaseo+(クラフトワイフカセオプラフ)としてのライブもあります。みなさんにお会いできるのを楽しみにしていまーす。

///////////////////////////////////////////////////////////////////////////////////
CraftwifeのSuperColliderワークショップ

iPhoneを使って「新しい音楽を演奏する方法」を考えましょう。ユニークな音楽構造が記述可能で、美しいサウンドを生成するフリーウェアの音響合成プログラミング言語「SuperCollider」を用いた音響合成と、プログラムをiPhoneから無線で制御する方法を学びます。

内容:
・講師、受講者の簡単な自己紹介
・コンピュータで音楽を演奏する、ということについて
・SuperColliderの基本操作
・SynthDefの記述
・Patternを用いた音楽構造の記述
・OSCを用いたiPhoneとのネットワーキング

日程:2010年 6月13日(日) 1日間 11:00 – 19:00

会場:TRUNK-Creative Office Sharing-(協同組合仙台卸商センター5F)

アクセス:
仙台市営バスの場合:仙台駅西口バスプール4番乗り場/「東部工場団地」行き乗車(約20分)「卸町会館前」バス亭下車 徒歩1分
仙台駅東口バスプール46番乗り場/
「卸売市場・霞の目」行き乗車(約20分)「卸町会館前」バス亭下車 徒歩1分
お車の場合:サンフェスタ駐車場をご利用ください(無料)
※駐車券を会場受付までご持参ください。

講師:Craftwife(赤松武子)
1979年、横浜生まれの東京育ち。岐阜県立国際情報科学芸術アカデミー
(IAMAS)を卒業 後、名古屋学芸大学助手を経て、フリーランスのサ
ウンドデザイナーとして活動。2008年夏、主婦(夫)によるiPhone片
手にテクノポップを奏でるバンド・Craftwifeを結成。岐阜県を拠点に、
日本各地とドイツにてライブ・パフォーマンスを行う。プログラミング
環境「SuperCollider」と「Max/MSP,Jitter」を用いたリアルタイム音響
生成・映像サンプリングシステムから、電子回路、衣装の制作などを幅
広く手掛け、音楽、映像、デザイン、ファッション、言語といった既存
の領域を超え、「作る」という行為を尊重した制作活動をしている。
www.craftwife.com

定員:10名(最小実施人数5名)

参加費:7,500円

申し込み方法:
氏名、住所、電話番号、e-mailアドレス、参加動機を明記の上、ws2010@craftwife.comへお申込ください。
参加費の入金方法と簡単な受講アンケートをお送りします。

参加費の入金をもって申込完了とさせていただきます。

対象:コンピュータでの音作りや、iPhoneを用いて音楽を演奏する事に興味があり、コンピュータの基本的な操作のできる方であれば、どなたでもご参加いただけます。

持参していただくもの:
・iPhoneまたはiPod touch
(持参が難しい場合は、参加申し込み時にお知らせ下さい。)
・コンピュータ(MacOS X)
・SuperCollider(ソフトウェア、無料)
(※SCのインストール方法については、解説をするウェブサイトを作ります)
・ヘッドフォン

主催:Craftwife

協力:TRUNK -Creative Office Sharing-(協同組合仙台卸商センター)

※前日6/12日は、パンゲアでCraftwifeのLive、【Craftwife + Kaseo +】もあります。
http://www.pangaea-sendai.com//
http://homepage.mac.com/kaseo/circuit_bending/

お問い合わせ:

ワークショップについて

Craftwife 赤松武子
craftwife [a-t] craftwife.com
([a-t]を、@へ置き換えてください。)

会場について
TRUNK | CREATIVE OFFICE SHARING
t&f: 022.237.7232
info@trunk-cos.com
www.trunk-cos.com

SuperColliderのインストール方法(MacOS X版)

フリーウェアの音響合成プログラミング言語・SuperCollider(スーパーコライーダー)には、MacOS X版、Windows版、Linux版があり、いずれも開発支援ウェブサイトのsourceforgeからダウンロードする事ができます。

SuperColliderのsourceforgeのウェブサイト:
http://supercollider.sourceforge.net//

ここでは、Mac版のインストールの方法を紹介します。ウェブサイトのDOWNLOAD項目から、Macの欄の最新版をクリックすると、自動的にダウンロードが開始されます。今現在の最新版は、SuperCollider3.3.1です。尚、-with-extrasには、サードパーティが開発したライブラリなどが入ったOptionalInstalls付属していますので、こちら側をダウンロードすると良いでしょう。

ダウンロードしたdmgファイルを開き、SuperColliderフォルダを、Applicationsフォルダのエイリアスに、ドラッグ&ドロップします。これで、あなたのコンピュータのアプリケーションフォルダにSuperColldierがインストールされました。Optional Installフォルダも、ハードディスクのSuperColliderフォルダ内にいれておくとよいでしょう。

以上で、SuperColliderのインストールは完了です。とても簡単!

CW、MTM05への参加決定!

Craftwifeが、MakeTokyoMeetingに帰ってきます!

今回は、ブース出展での参加&公開制作をします。7/9に東京で行われるライブの準備(音響合成プログラミング言語・SuperColliderを用いたオーディオ・プログラミング)の様子をヘッドフォンでこっそり聴くことができます。ライブで使用している衣装や、LEDネクタイ、 映像サンプリングシステムなども展示予定。 (iPadも登場するとか!) また、新メンバーである3人目のワイフ・NZ3が初登場します!

入場無料ですので、ぜひ遊びにいらしくてください。

MakeTokyoMeeting05:
http://www.oreilly.co.jp/mtm/05/

開催日:2010年5月22日(土)、23日(日)
会場:東京工業大学 大岡山キャンパス(東京都目黒区大岡山2-12-1)
交通:東急大井町線・目黒線「大岡山駅」徒歩1分
http://www.esp.titech.ac.jp/access-and-campusmap/j/o-okayama-campus-j.html
入場:無料
主催:株式会社オライリー・ジャパン
共催:東京工業大学、多摩美術大学 情報デザイン学科

スケール、チューニング。

ScaleやTuningクラスには豊富なメソッドが用意されていて、簡単にスケールやチューニングを変えられるのは、SCの大きな特徴のひとつだと思っていたけれど、あまり有名な話しではないのかな…

s.boot;

(
// シンプルなサイン波の音色を定義
SynthDef(”simpleSine”,
 {arg freq=400, out=0, releaseT=0.3, amp=0.8;
 var source;
 source = SinOsc.ar(freq) * EnvGen.ar(Env.perc(0.0001, releaseT, 1, -6), doneAction:2) * amp;
 Out.ar(out, source);
}).store;
)
////////////////////////////////////////////
// スケールは、Scaleクラス
////////////////////////////////////////////

(// 通常の12平均律、長音階
Pbind(
\instrument,\simpleSine,
\degree, Pseq([0,1,2,3,4,5,6,7],inf),
\scale, Scale.major,
\dur, 0.5,
\octave, 6,
\root, 0
).play;
)

(
// 通常の12平均律、普通の自然的短音階
Pbind(
\instrument,\simpleSine,
\degree, Pseq([0,1,2,3,4,5,6,7],inf),
\scale, Scale.minor,
\dur, 0.5,
\octave, 6,
\root, 0
).play;
)

////////////////////////////////////////////
// チューニングは、Tunignクラス
////////////////////////////////////////////

// Tuningの違いが聞き取りづらいので、
// 2つのパターンを同時に動作させている。

(
// 同じパターン
Pbind(
\instrument,\simpleSine,
\degree, Pseq([0,1,2,3,4,5,6,7],inf),
\scale, Scale.major,
\dur, 0.5,
\octave, 6,
\root, 0
).play;

Pbind(
\instrument,\simpleSine,
\degree, Pseq([0,1,2,3,4,5,6,7],inf),
\scale, Scale.major,
\dur, 0.5,
\octave, 6,
\root, 0
).play;
)

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

(
// ひとつのパターンをヴェルクマイスターチューニングにする。
// ずれが聴こえる。
t = Tuning.werckmeister;
~scale = Scale.major(t);

Pbind(
\instrument,\simpleSine,
\degree, Pseq([0,1,2,3,4,5,6,7],inf),
\scale, ~scale, 
\dur, 0.5,
\octave, 6,
\root, 0
).play;

Pbind(
\instrument,\simpleSine,
\degree, Pseq([0,1,2,3,4,5,6,7],inf),
\scale, Scale.major,
\dur, 0.5,
\octave, 6,
\root, 0
).play;
)

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

沢山のスケールやチューニング用のメソッドが用意されているので、
下記を参照する。

// cmd-J to see scale and tuning dictionaries in full
ScaleInfo
TuningInfo

iOSCからのOSCメッセージ

3/6のCraftwife + KURONOZ用のプログラムを作っています。複数のiPhoneからのOSCコマンドをSuperColliderで受信します。SCでは、OSCResponderを使っているのですが、どういう風に記述したら、効率的なのだろう、とずっと考えていました。

iOSC上に3つのボタンがあるとして、それぞれのボタンに別のコマンドネームを割り当てるか(iOSCのデフォルトではそうなっている)、同じコマンドネームを割り当てボタンごとに出力する値を書き換えるか。コードは後者の方が短いし、効率的かな。iOSCは、こういう自由度が素晴らしいですなぁ。

////////////////////////////////////////////////////////////////////////////
// iOSCのデフォルトコマンド名にあった記述法
~oA1 = OSCresponder(nil, “/osc/button1A”, { |t,r,msg|
case

 {msg[1] == 1} {”Abutton01_on2″.postln;}

 {msg[1] == 0} {”Abutton01_off2″.postln;}
}).add;

~oA2 = OSCresponderNode(nil, “/osc/button2A”, { |t,r,msg|
case

 {msg[1] == 1} {”Abutton02_on”.postln; }
 {msg[1] == 0} {”Abutton02_off”.postln; }
}).add;

~oA3 = OSCresponderNode(nil, “/osc/button3A”, { |t,r,msg|
case

 {msg[1] == 1} {”Abutton03_on”.postln; }

 {msg[1] == 0} {”Abutton03_off”.postln; }
}).add;

////////////////////////////////////////////////////////////////////////////
// 私の場合は、下記の様に書いた方が効率よいかな?

~oa = OSCresponderNode(nil, “/osc/deviceA”, { |t,r,msg|
case

 {msg[1] == 0} {”Abutton01_on”.postln;}

 {msg[1] == 1} {”Abutton01_off”.postln;}
 {msg[1] == 2} {”Abutton02_on”.postln; }

 {msg[1] == 3} {”Abutton02_off”.postln; }
 {msg[1] == 4} {”Abutton03_on”.postln; }

 {msg[1] == 5} {”Abutton03_off”.postln; }
}).add;

Pbind/Patternの内容を変える

春がくるのかしら、と思うような天気から、冷たい雨の白い冬の空。
この雨は、暖かい日をよんでいるのだろうか。今日は祭日。

午前中にiPressさんの原稿をチェックしました。写真のわたし、プクプクですが、なかなか楽しい記事になっています。2月中に全国のソフトバンクショップなどで無料でいただけるフリーペーパーです。また、配布が始まったらお知らせします。。

さて、Pbind/Patternの内容を、コードを走らせて音を鳴らしながら、要素をダイナミックに変える方法は以前書いたかも。

Pattern系のクラス自体を書き換えるような場合(PseqとPrandを切り替えて使う、など)は、PatternProxyを使った1の方法、そうではなく、リストの要素のみを書き換えたい場合は、2番目の方法がよいかな。

// SCデフォルトのinstrumentはいつになったら、
// テストしやすいものに変わるのだろう、苦笑。
SynthDef("simpleSine", {arg freq=440, amp=0.5;
Out.ar([0,1],
SinOsc.ar(freq) * EnvGen.ar(Env.perc, doneAction:2) * amp)
}).store;

//方法1///////////////////////////////////
~playerA_deg = PatternProxy(Pseq([0,1,2,3,4],inf));

p = Pbind(
\instrument, \simpleSine,
\degree, ~playerA_deg,
\dur ,0.25,
\octave, 7
).play

// Patternを変える
~playerA_deg.source = (Pseq([2,3,4,5],inf));
~playerA_deg.source = (Pseq([0,1,2,3,4,5],inf));
~playerA_deg.source = (Prand([0,1,2,3,4,5],inf));

//方法2 ///////////////////////////////////
~playerA_deg= List[2,2,2,2];

p = Pbind(
\instrument, \simpleSine,
\degree, Pseq(~playerA_deg, inf),
\dur, 0.25,
\octave, 7
).play;

// Listの内容を変える
~playerA_deg[1] = 5
~playerA_deg[3] = 7

センド式エフェクタ。

こんな記事を書いてくださっている方がおります、ズバリ

「スパコ基礎文法最速マスター」
http://d.hatena.ne.jp/sc3onlinux/20100206/1265449076

大学受験の参考書のようなタイトルが素敵。多謝。がんばれー。

さて、むかし多分日本語フォーラムで教えてもらった方法。
エフェクタノードにsend量を決めて、エフェクタのかかり具合を変えるような感じかな。
うーん。どうだろう?SynthDefにOutを複数持つ事ができるのを教えてもらい感激。
とりあえず、メモとして残す。


// エフェクト側、20chを受け取る
SynthDef("patternefx_Ex", { arg out, in, delaytime = 0.4;
var audio, efx;
audio = In.ar([20,21],2);
efx=CombN.ar(audio, 0.5, delaytime, 2, 1);
Out.ar([0,1], efx);
//Out.ar([0,1], audio+efx);
}).load(s);

// 音源側、エフェクタに送る量を決定
SynthDef(\fx_test, {arg gate=1, fx=0.5, fxout=20, amp=0.1,freq=200, pan=0, out=0;
var env, output,source;
env = EnvGen.kr(Env.perc(0.001, 0.2), gate, doneAction:2);

source = SinOsc.ar(freq, 0, amp);

output = source * env;
output = output*(1-fx);
source= source * fx;
Out.ar(fxout, source);
Out.ar(out,Pan2.ar(output, pan))
}

).store;

//変数宣言
~textFxAmt = 0.0;
// シーケンス
Pbind(\instrument,\fx_test, \fxout, 20, \dur,2, \freq, 800, \amp, 0.5, \fx, Pfunc({~textFxAmt})).play

//エフェクタノード
~fx = Synth("patternefx_Ex");
~fx.set(\delaytime, 0.25)
~fx.set(\delaytime, 0.5)
~fx.free

// エフェクタへのsend量を決定
~textFxAmt =0.0;
~textFxAmt =0.1;
~textFxAmt =0.9;
~textFxAmt =1.0;

Get Adobe Flash playerPlugin by wpburn.com wordpress themes