買いました。前回は2010年08月08日にMacBookを買ったそうです。実に7年ぶりのパソコン購入ですね。 MacBookさんは一応使えないこともないのですが、電源がそろそろヤバそうなので寿命かな、と。 次買うのは2024年ですかねぇ。
型番号など
- MB AIR 13.3/1.8GHZ/8GB/128GB
- 部品番号: MQD32J/A
インストールログって作っても消しちゃうことが多いので、ブログに書いておけば良いかなと思い書いてみるテスト。pandasとかmatplotlibはよく分からんのでとりあえずはnumpyとscipyからスタートしてみます。
axjack:~ $ pip3 install numpy Collecting numpy Downloading numpy-1.14.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.7MB) 100% |████████████████████████████████| 4.7MB 149kB/s Installing collected packages: numpy Successfully installed numpy-1.14.0 axjack:~ $ axjack:~ $ pip3 install scipy Collecting scipy Downloading scipy-1.0.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (16.7MB) 100% |████████████████████████████████| 16.7MB 43kB/s Requirement already satisfied: numpy>=1.8.2 in /usr/local/lib/python3.6/site-packages (from scipy) Installing collected packages: scipy Successfully installed scipy-1.0.0 axjack:~ $
新年恭しく賀し奉り候。年末ぐらいからpythonをインストールし、毎日ちょっとずつpythonに触れています。
pythonに触れるきっかけは、バンドのホームページのバックアップ機能を作るためです。私がバックアップ機能を作るわけではないのだけれど、自分で作れないのに他人に指示を出すのは少々気が引けると思う性格ゆえ。
と言っても、所定のURLにアクセスしてファイル落として、ファイルIOと文字列処理をするだけなので、あまりpythonらしさが発揮できていないような…。
余力があったら機械学習や音楽情報処理やSuperColliderと連携させたりしてみたいですね。
今年も何卒よろしくお願い申し上げます。
去る12/10(日)、Xmas Live@赤坂B♭にて演奏してきました。メンバー含めお客さまや色んな方から「ドラム凄かった」「ドラムのビートやべぇ」などお褒めの言葉を頂き、とても嬉しく存じ上げます。ありがとうございます。 ただ、全身全霊で叩いたせいもあり、そして歳を重ねた事もあり、ライブの翌日から右腕左腕が嬉しい悲鳴という名の筋肉痛に襲われて居る次第です。私は今年で齢三十を迎えました。
扨、演奏中の記憶は全く以って吹き飛んでおりますのでここでは先日右手中指を痛めてからのドラムプレイングの変化などを書き残し今後に生かそうと思います。
最悪の場合もうドラムは叩けないのかなぁ、としょんぼりしてました。幼い頃からピアノを弾いていた事もあり、指の怪我は絶対に避けなければならないと思っていたので、指の痛み以上に精神的なショックが大きかったです。
怪我をして一ヶ月。痛みが完全には取れなかったので病院へ。すると医者曰く「腱鞘炎かもね。」と。腱鞘炎は一番聞きたくない怪我の名前です。。手術か注射か"動かさないようにする"のどれかで回復を待つしかなく、聞くたびにうんざりしてしまう。
とはいえ、1.5ヶ月ぐらいで痛みもかなりデクレッシェンド。また痛くなるのは怖いけどそろそろドラムが恋しくなる時期。しかし右手中指はあまり使いたくない。さてどうするか?
普段はアメリカングリップなので久しぶりにフレンチグリップにしてみました。この握り方は、親指と人差し指がメインで他の指は添える感じなので中指への負担が少ないのが特徴。
しかしフレンチグリップはバウンスを殺してしまいがちな握り方でもある。バウンスは命。でも中指はもっと命。命と命を比較すると中指の方が大事。ということで、フレンチグリップでバウンスの感覚を掴むことに専念する。
怪我をして最初のドラムはかなりヒヤヒヤしたのだけれど、2回目からは少し慣れてしまった。3回目からは、実はフレンチグリップでずっとやってきたのでは?ぐらいの気持ちにまで回復。自信がつく、自信を取り戻すのは自分にとってこれほど重要なことだったのか、と改めて気付く。
メンバーも、「怪我してるとは思えないプレイだった」と言ってくれたりもして、一安心を得る。メンバーに受け入れられるのは心強い。
お酒を飲んだこともあり、怪我のことはだいたい吹っ飛んでしまった。と書いてしまうと元も子もないが、「怪我であると思っている自分」がイイ感じに吹っ飛んでしまったのはありがたい。
あと、いつもの音量・いつも以上の音量をフレンチグリップで叩いた結果、腕を多く使った。アメリカングリップだと手首のスナップで音量が出せるのに対して、フレンチグリップは手首のスナップは使えないからである。というのは知識としてはその時知らなくて、本番叩きながら「腕使うしか選択肢ないなー」と思った。
腱鞘炎はしぶとく残るであろうから、フレンチグリップをメインに叩こうかと思う。そうすると、腕も使うことになるので腕力もつけないといけない?筋トレは苦手なり。
指・手首・腕に負担をかけないように心掛けながら、出したい音を表現出来るよう模索します。
では、OSCコマンド(Server Command)でreleaseさせるにはどうすればよいのだろう?
と前回書いたのだが、もう少しまとめる。というよりもっと前にも書いていた。今回含め3回も書くぐらいだし、releaseは重要なのだ。
releaseするには、大きく分けると、
の3つ方法がある。このうち、set/releaseメソッドはnodeインスタンスの、sendMsgメソッドはserverインスタンスのメソッドである。どれをいつ使うかは状況次第。
//SynthDef ( SynthDef(\h,{ |amp=0.3,gate=1,rT=1,freq=440| var sig,e,eg; sig = SinOsc.ar(freq) + SinOsc.ar(freq + 1); e = Env.adsr(releaseTime:rT); eg = EnvGen.kr(e,gate,doneAction:2); sig = sig * eg; Out.ar(0,Pan2.ar(sig,0,amp)); }).add; ) /* how to release */ //set ~x = Synth(\h,[\amp,0.1,\rT,0]); ~x.set(\rT,5); ~x.set(\gate,0); //set gate: negative value ~x = Synth(\h,[\amp,0.1,\rT,0]); ~x.set(\gate,-5-1); //release ~x = Synth(\h,[\amp,0.1,\rT,0]); ~x.release(5); //sendMsg release -> gate: 0 ~x = Synth(\h,[\amp,0.1,\rT,0]); s.sendMsg('/n_set',~x.nodeID,\rT,5); s.sendMsg('/n_set',~x.nodeID,\gate,0); //sendMsg gate: negative value ~x = Synth(\h,[\amp,0.1,\rT,0]); s.sendMsg('/n_set',~x.nodeID,\gate,-5-1);
/* how to release */
以降は全て5秒でreleaseする方法である。
その名の通りSaw.ar
を使えばできるだろうと思いググると、
まずオシレーターには通常のこぎり波や細いパルス波など倍音成分が多い波形を用います。最初に述べた通りこれらのオシレーター波形はストリングス系の楽器に近い倍音分布を持っています。これをデチューンするかオクターブ違いにするのがストリングス音の基本的なオシレーター設定です。
と書いてある。なので、2つのSaw.ar
を素直にデチューンして作ってみることにした。
ストリングスと言えばreleaseの伸びが印象的。releaseの値を0から0.05ずつ加算して、混ざり合う音がどんな心地になるのかを確かめる。
( SynthDef(\saw_strings,{ |freq=440,amp=0.3,gate=1,detune=2,rate=1,rT=0| var sig,e,eg; sig = Saw.ar(freq) + Saw.ar(freq * rate + detune); e = Env.adsr(0.5,5,0.9,rT,curve:\sin); eg = EnvGen.ar(e,gate,doneAction:2); sig = RLPF.ar(sig,freq*2,0.1); sig = sig * eg; Out.ar(0,Pan2.ar(sig,0,amp*SinOsc.kr(6.5,0,0.1,0.8))); }).add; ) ( ~r = r({ var rt = 0; var f = [1,1/2,3/2,4/3,5/4]; var freq = 440!f.size * f; inf.do({ "releaseTime: %\n".postf(rt); ~x = Synth(\saw_strings,[\freq,freq.choose,\detune,1,\rT,rt]); 1.wait; ~x.release; rt = rt + 0.05; 1.wait; }); }); ) ~r.reset; ~r.play(TempoClock( 144/60 )); ~r.stop; /* http://danielnouri.org/docs/SuperColliderHelp/ServerArchitecture/SynthDef.html // if value is negative, it overrides the release time, to -1 - gate x = Synth(\synthDefTest); x.set(\gate, -5); // 4 second release */ ~x = Synth(\saw_strings,[\freq,440,\detune,1,\rT,0]); s.sendMsg('/n_set',~x.nodeID,\gate,-5);
Synth(~xとする。)にEnvGenを噛ましてgateをaugとして持っている場合、~x.release
を実行すればreleaseされる。また~x.release(3)
と実行すれば3秒後にreleaseされる(release値の上書き)。
では、OSCコマンド(Server Command)でreleaseさせるにはどうすればよいのだろう?*1それは、
s.sendMsg('/n_set',~x.nodeID,\gate,-5);
のように、sendMsgコマンドの引数に\gate, <負の値>
をセットすれば良い。そうすると、-1 - <負の値>
後にreleaseされる。
画面キャプチャではなくiPhoneで撮ったものをiPhoneからYouTubeにアップロードしてみた。こちらより。録音や録画はコードを再実行する手間も省けて便利。
*1:これを書くきっかけ:s.sendMsg('/n_release',node_id)やs.sendMsg('/n_set',node_id,\release)ではreleaseできなかった故。
yoppaさんのなかなか良いサンプルができたのSynthDefがとてもきれいで感動した。RLPFのcutoff frequencyをLFNoiseで動かしているのだけど、右と左でcutoffの周期が違うので立体感が増すように感じる。こんな風に作れたらなぁ。。
SynthDef
Routine
( SynthDef(\h, { arg freq = 48; Out.ar(0,( LFTri.ar([freq,freq-5]) + LFTri.ar([freq * 2 + 1,freq * 2 - 1]) + LFTri.ar([freq * 4.5 + 1,freq * 4.5 + 2]) + LFTri.ar([freq * 6 - 2,freq * 6 + 5]) ) * 0.1 * EnvGen.ar(Env.perc,doneAction:2) ); }).add; ) ( ~r = r({ inf.do({ 3.do({|i| ( 2**(i+1) ).do({ Synth(\h,[\freq,48*(i+1)]); (2**i).reciprocal.wait; }); }); }); }); ) ~r.reset; ~r.play(TempoClock(144/60));
難しいやり方はググった方が早い。ひとまずざっくりとblendと録音をしてみる。
blend (argAnotherEnv, argBlendFrac: 0.5)
でブレンドされたEnvが返る。実際に使うときはEnvGen
のenvelope
に入れる。
~e = Env.perc(2,level:0.5); ~e_delay2 = ~e.delay(2); ~e_blend = blend(~e,~e_delay2,0.9); [~e,~e_delay2,~e_blend].plot(maxval:0.75);
plotで確認すると以下のようになる。上から順に~e
・~e_delay2
・~e_blend
。センスよく混ぜれば素敵なエンベロープが得られる、のではないかと思う。
最低限やるべきなのは以下の3つで良い。
.prepareForRecord
でバッファなどを確保し、.record
で録音開始。そして.stopRecording
で録音終了。.prepareForRecord
をやっておかないと
slight delay before recording starts for real
となるらしい。録音前にしれっと実行しておこう。
録音が終わるとどこに保存されるかというと、Post Windowに表示されるRecording: /...
やRecording Stopped: /...
である。Macだと/Users/<username>/Music/SuperCollider Recordings
に保存されるのだと思われる。
難しいやり方はググった方が早い。ひとまずざっくりの方針なので、これで一応録音ができる。
( SynthDef(\h,{ |amp=0.1,freq=440,gate=1,aT=2| var sig,e,eg,y; y = SinOsc; sig = Mix.ar(y.ar([freq,freq*(4/3),freq*(5/4)])); e = Env.perc(aT,level:0.5); e = blend(e,e.delay(2),0.5); eg = EnvGen.ar(e,gate,doneAction:2); sig = sig * eg; sig = FreeVerb.ar(sig,0.3,0.9,0.7); Out.ar(0,Pan2.ar(sig,0,amp)); }).add; ) //~x = Synth(\h,[\amp,0.5,\freq,400,\aT,5]); ( ~r = r({ var f = [400,400*1.2,400/1.2,400*1.5,400*1.9,400]; //var w = Array.rand(f.size,5,15); var w = [11,5,8,6,15,8]; var wi; f.do({|item,i| wi = w[i].postln; Synth(\h,[\amp,[0.3,0.15,0.4].choose,\freq,item,\aT,wi]); (wi-2).wait; }) }); ) s.prepareForRecord; ~r.reset; ( s.record; ~r.play; ) s.stopRecording;