<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>SuperCollider In SAITAMA</title>
    <link>http://moxuse.org/scs/</link>
    <description>SuperColliderに関する技術的なメモ</description>
    <language>ja</language>
    <generator>Nucleus CMS v3.3</generator>
    <copyright>&#169;</copyright>
    <category>Weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    <image>
      <url>http://moxuse.org/blog/nucleus/nucleus2.gif</url>
      <title>SuperCollider In SAITAMA</title>
      <link>http://moxuse.org/scs/</link>
    </image>
    <item>
 <title>加速度センサーの値をサンプリング</title>
 <link>http://moxuse.org/scs/?itemid=179</link>
<description><![CDATA[最近絵画を研究しています。しかも今回はスパコで絵画をする予定。<br />
<a href="http://www.moxuse.org/blog/index.php?itemid=176">画家／小数点</a><br />
どういうことかというと鉛筆に加速度センサーをつけてスケッチしてセンサーの値をサンプリングしている。それを元にサーボモータをドライブしている。<br />
<br />
せっかくBoArduinoがあるので加速度センサーからのAD値をスパコで受け取りそれを元にサーボのドライブ部もスパコで行きたいと思う。（ついでに実はムービーの再生もSCMovieView使ってスパコのGUIから再生してる、どうでもいいことだけど、でもサーボと映像の同期にはこの方法がいいかと）<br />
<br />
で、AD値のサンプリングで、へたにFloatArrayとか作らないでオーディオバスに流してバッファしてサウンドファイルにしてしまおうという作戦。くわしいことはめんどくさいので割愛するが、要はAD値を振幅に収まるようにマッピングしてあとはサーバで普通にレコーディング。<br />
<br />
（こういうセンサーの値のマッピングに役立つのは.linlin()とか<br />
あとオーディオレートとカーネルレートの変換にはA2Kとかが便利）<br />
<br />
<br />
<br />
さてデータを元にサーボを動かしたいのだけど、SimpleMessageSystemnライブラリにはデジタルi/oとアナログi/oがあるだけなのでこのままだとめんどー。<br />
幸いAdruinoソフトウエアにはサーボ用ライブラリが用意されていてサンプルもあるのでそこから転用する。<br />
<br />
以下SimpleMessageSystemのwritepin()のswitch文に書き足したコード、ディレイのタイミングとかかなり適当なので、てきせん変えてください。<br />
<span class="supercollider"><br />
int state;<br />
<br />
&nbsp; case <span style="color: #666666;">'s'</span> : <br />
&nbsp; &nbsp; 　state = messageGetInt<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;&nbsp; <span style="color: #cc0000;">// Gets the next word as an integer</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; myservo.<span style="color: #000000;">write</span><span style="color: #000000;">&#40;</span>state<span style="color: #000000;">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; delay<span style="color: #000000;">&#40;</span><span style="color: #000000;">15</span><span style="color: #000000;">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc0000;">// waits 15ms for the servo to reach the position </span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000cc">Servo</span>::refresh<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp;</span><br />
<br />
's'（char）につづけてサーボの位置をintで投げてあげるようにする。<br />
<br />
下の動画はサンプリングじゃなくてリアルタイムにサーボを動かしてみたもの。<br />
<br />
今のところただ動かしてるだけだから、ちゃんと積分とか、サーボの位置とかの部分書かないとだ。<br />
<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/yi3zQek2_WU&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/yi3zQek2_WU&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
こんな感じでスーパーコライダーでも立派にフィジカルコンピューティングできるよー！<br />
特に音関係ではとっても有用さ！<br />
<br />
]]></description>
 <category>BoArduino</category>
<comments>http://moxuse.org/scs/?itemid=179</comments>
 <pubDate>Sat, 22 Nov 2008 23:10:25 +0900</pubDate>
</item><item>
 <title>#8</title>
 <link>http://moxuse.org/scs/?itemid=161</link>
<description><![CDATA[<object type="application/x-shockwave-flash" data="http://moxuse.org/blog/media/xspf_player_slim.swf?playlist_url=http%3A%2F%2Fmoxuse.org%2Fblog%2Fmedia%2F1%2Fplaylist2.xml&amp;player_title=title&amp;autoload=1" width="400" height="15"><param name="movie" value="http://moxuse.org/blog/media/xspf_player_slim.swf?playlist_url=http%3A%2F%2Fmoxuse.org%2Fblog%2Fmedia%2F1%2Fplaylist2.xml&amp;player_title=title&amp;autoload=1" /><param name="autostart" value="true" /></object>]]></description>
 <category>曲</category>
<comments>http://moxuse.org/scs/?itemid=161</comments>
 <pubDate>Tue, 4 Nov 2008 11:02:43 +0900</pubDate>
</item><item>
 <title>てすと</title>
 <link>http://moxuse.org/scs/?itemid=160</link>
<description><![CDATA[<object type="application/x-shockwave-flash" data="http://moxuse.org/blog/media/xspf_player_slim.swf?playlist_url=http%3A%2F%2Fmoxuse.org%2Fblog%2Fmedia%2F1%2Fplaylist.xml&amp;player_title=title&amp;autoload=1" width="400" height="15"><param name="movie" value="http://moxuse.org/blog/media/xspf_player_slim.swf?playlist_url=http%3A%2F%2Fmoxuse.org%2Fblog%2Fmedia%2F1%2Fplaylist.xml&amp;player_title=title&amp;autoload=1" /><param name="autostart" value="true" /></object>]]></description>
 <category>曲</category>
<comments>http://moxuse.org/scs/?itemid=160</comments>
 <pubDate>Tue, 4 Nov 2008 02:02:56 +0900</pubDate>
</item><item>
 <title>つづき２</title>
 <link>http://moxuse.org/scs/?itemid=155</link>
<description><![CDATA[<a href="http://moxuse.org/blog/media/1/20081031-IMG_4915.jpg"></a><br />
ピクセルつったらオートマトン。<br />
一次元セルオートマトンやってみた。<br />
Stringの.atで返ってくるのがCharってのに気付くのに無駄に時間を取られた。<br />
<br />
オートマトンのルールは例のrewriteStringで実現。<br />
<br />
<span class="supercollider"><br />
string = <span style="color: #666666;">&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa&quot;</span>;<br />
rules=&nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;a&gt;a&gt;a&quot;</span> -&gt; <span style="color: #666666;">&quot;x&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;a&gt;a&gt;x&quot;</span> -&gt; <span style="color: #666666;">&quot;x&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;a&gt;x&gt;a&quot;</span> -&gt; <span style="color: #666666;">&quot;x&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;a&gt;x&gt;x&quot;</span> -&gt; <span style="color: #666666;">&quot;a&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;x&gt;a&gt;a&quot;</span> -&gt; <span style="color: #666666;">&quot;a&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;x&gt;a&gt;x&quot;</span> -&gt; <span style="color: #666666;">&quot;a&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;x&gt;x&gt;a&quot;</span> -&gt; <span style="color: #666666;">&quot;a&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">&quot;x&gt;x&gt;x&quot;</span> -&gt; <span style="color: #666666;">&quot;x&quot;</span>,&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#93;</span><span style="color: #cc0000;">//rule 30</span><br />
string = string.<span style="color: #000000;">rewriteString</span><span style="color: #000000;">&#40;</span>rules<span style="color: #000000;">&#41;</span><br />
&nbsp;</span><br />
<br />
こんかんじで”>”でつなぐと文脈判断も可能rewriteStringベンーリ。]]></description>
 <category>テータロガー</category>
<comments>http://moxuse.org/scs/?itemid=155</comments>
 <pubDate>Fri, 31 Oct 2008 00:09:51 +0900</pubDate>
</item><item>
 <title>スパコ+データロガーのつづき</title>
 <link>http://moxuse.org/scs/?itemid=153</link>
<description><![CDATA[<a href="http://moxuse.org/blog/media/1/20081026-IMG_4912.JPG"></a><br />
ほったらかしといたスパコ+データロガーのつづき。今度、多摩美で<a href="http://www.moxuse.org/blog/index.php?itemid=151">MAKE Meeting</a>、その後11月には<a href="http://leplacard.jp/2008/tokyo2/">Placard</a>とあるのでネタ作り。<br />
<br />
rssでタンブラーの画像ひぱってきて32pxの画像をプロットできるようになった。rssと画像処理はPythonで、データロガーのドライブ部分をスパコで書いてる。てかスパコ使う必要性はいまんとこ特にない。Pythonだけで書いた方がもっと解像度細かくしてプロットできる．．。<br />
<br />
まあゆくゆくオーディオビジュアルな感じにするのでシーケンスをスパコで書いとくのはいいかなと。　rssパーサめんどい。]]></description>
 <category>テータロガー</category>
<comments>http://moxuse.org/scs/?itemid=153</comments>
 <pubDate>Sun, 26 Oct 2008 00:15:55 +0900</pubDate>
</item><item>
 <title>モータドライバとか</title>
 <link>http://moxuse.org/scs/?itemid=119</link>
<description><![CDATA[新作を作っててモータの制御用に<a href="http://akizukidenshi.com/catalog/items2.php?q=%22I-02403%22&amp;s=score&amp;p=1&amp;r=1&amp;page=">ＦＳ７０ＳＭＪ−０６</a>を買ってみた。（作品中ではペルチェ素子のスイッチングに使う予定だけど）<br />
感想としては、これはいい。TAMIYAのロボコン用のDCモータをマイコンからなんなく回せる。大容量だから発熱とかもぜんぜん気にならない。パワーMOSFETってスイッチング速度も速いらしいしパルス制御とかもいけそうね。<br />
<br />
でもステッピングモーターとかだとこれ一個ってわけにはいかないしな、なんかいいモータードライバ無いかなー。<br />
やっぱ<a href="http://www.geocities.jp/mimiin/tips/motor-driver.html">自作</a>でHブリッジ回路組めってことかなー。]]></description>
 <category>モータードライバ</category>
<comments>http://moxuse.org/scs/?itemid=119</comments>
 <pubDate>Tue, 8 Jul 2008 22:49:41 +0900</pubDate>
</item><item>
 <title>FFTとか３</title>
 <link>http://moxuse.org/scs/?itemid=117</link>
<description><![CDATA[#この記事は４月頃書かれたものを再投稿したものです。<br />
<br />
前のエントリで正変換と逆変換の間に関数を入れるのにpvcalcと言うのを紹介したが、<br />
他にも2つのchainを処理できるpvcalc2や、関数内でindex（bin数）を利用できるpvcollectがある。pvcollectが便利そう。<br />
<br />
UnpackFFT<br />
<br />
UnpackFFTはFFTの吐いたchainの中身をDemand rateのストリームで吐き出す。<br />
<br />
<span class="supercollider"><span style="color: #0000cc">UnpackFFT</span><span style="color: #000000;">&#40;</span>chain, numFrames, frombin, tobin<span style="color: #000000;">&#41;</span></span><br />
<br />
これもfrombin, tobin引数によって必要なbin数を指定できる。<br />
<br />
出てくる数値はDemand rateのストリームなのでこれにDemand UGenで処理を加えることができる。<br />
<br />
出てくるストリームはリアルパートとイマジナリパートが分かれていないので、そこは適せん自分で分ける式を書く。<br />
<br />
（あとpvcalcやpvcollectも関数内でDemand UGenで処理を加える事ができる。つまりDemand UGenはサンプル毎に処理ができるってこと。？これってなんかスパコの時間概念って実は結構フレキシブルなんじゃないだろかと思ってしまう。もししたらChuckみたいにサンプルレベルの波形処理も別に普通のことなのかもしれない。このへん後で調べたい）<br />
<br />
あとヘルプに注意があるように今の時点でDemand UGenは32のインプットしか処理できないのでbin数はfrombin, tobinでそれ以内に抑えなければいけないようだ。<br />
<br />
<br />
以下ヘルプから<br />
<br />
<span class="supercollider"><br />
<span style="color: #000000;">&#40;</span><br />
s.<span style="color: #000000;">boot</span>.<span style="color: #000000;">doWhenBooted</span><span style="color: #000000;">&#123;</span><br />
~fftsize = <span style="color: #000000;">1024</span>;<br />
b = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">alloc</span><span style="color: #000000;">&#40;</span>s, ~fftsize, <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>;<br />
c = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">read</span><span style="color: #000000;">&#40;</span>s,<span style="color: #666666;">&quot;sounds/a11wlk01.wav&quot;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#41;</span><br />
<br />
<span style="color: #cc0000;">// ポストウィンドにMagnitude、Phaseとストリームをポストする</span><br />
<span style="color: #000000;">&#40;</span><br />
x = <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc;">var</span> sig, chain, unp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; sig = <span style="color: #0000cc">SinOsc</span>.<span style="color: #000000;">ar</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; sig = <span style="color: #0000cc">PlayBuf</span>.<span style="color: #000000;">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span>, c, <span style="color: #0000cc">BufRateScale</span>.<span style="color: #000000;">kr</span><span style="color: #000000;">&#40;</span>c<span style="color: #000000;">&#41;</span>, loop: <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; chain = <span style="color: #0000cc">FFT</span><span style="color: #000000;">&#40;</span>b, sig<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc0000;">// frombin と tobin 引数で必要なbinを制限</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; unp = <span style="color: #0000cc">UnpackFFT</span><span style="color: #000000;">&#40;</span>chain, b.<span style="color: #000000;">numFrames</span>, frombin: <span style="color: #000000;">0</span>, tobin: <span style="color: #000000;">4</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc0000;">// アンパックしてDemand rateに</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc0000;">// 時点でDemand UGenは32のインプットしか処理できない</span><br />
　　　　<span style="color: #cc0000;">//なのでbin数はfrombin, tobinでそれ以内に抑える</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc">Demand</span>.<span style="color: #000000;">kr</span><span style="color: #000000;">&#40;</span>chain&gt;=<span style="color: #000000;">0</span>, <span style="color: #000000;">0</span>, unp<span style="color: #000000;">&#41;</span>.<span style="color: #000000;">collect</span><span style="color: #000000;">&#123;</span>|anunp, index| <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; anunp.<span style="color: #000000;">poll</span><span style="color: #000000;">&#40;</span>chain&gt;=<span style="color: #000000;">0</span>, if<span style="color: #000000;">&#40;</span>index % <span style="color: #000000;">2</span> == <span style="color: #000000;">0</span>,&nbsp; <span style="color: #666666;">&quot;Magnitude&quot;</span>, <span style="color: #666666;">&quot;Phase&quot;</span><span style="color: #000000;">&#41;</span>+<span style="color: #000000;">&#40;</span>index/<span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">floor</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#40;</span>sig*<span style="color: #000000;">0.1</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">dup</span>;<br />
<span style="color: #000000;">&#125;</span>.<span style="color: #000000;">play</span><span style="color: #000000;">&#40;</span>s<span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#41;</span><br />
x.<span style="color: #000000;">free</span>;<br />
&nbsp;</span><br />
<br />
またDemand rateのFFTデータをchainバッファに束ねて戻すPackFFTもある。<br />
<div class="posttagsblock"><a href="http://technorati.com/tag/FFT" rel="tag">FFT</a></div>]]></description>
 <category>FFT</category>
<comments>http://moxuse.org/scs/?itemid=117</comments>
 <pubDate>Thu, 3 Jul 2008 18:51:13 +0900</pubDate>
</item><item>
 <title>FFTとか２</title>
 <link>http://moxuse.org/scs/?itemid=116</link>
<description><![CDATA[#この記事は４月頃書かれたものを再投稿したものです。<br />
<br />
正変換後なんらかの操作を加えて逆変換してオーディオシグナルを再現したい時、<br />
間の処理を支援してくれるPV UGens(Phase Vocoder UGens)が用意されている。<br />
<br />
[例]　PV_BrickWall<br />
PV_BrickWallは指定したn次高調波(bins)でカットオフ（といってもbin数を指定できない）<br />
（２つ目の引数には周波数ではなく-1,1のbipolar）<br />
<span class="supercollider"><br />
b = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">alloc</span><span style="color: #000000;">&#40;</span>s,<span style="color: #000000;">2048</span>,<span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>;<br />
<br />
<span style="color: #000000;">&#40;</span><br />
<span style="color: #0000cc">SynthDef</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;help-brick&quot;</span>, <span style="color: #000000;">&#123;</span> <span style="color: #0000cc;">arg</span> out=<span style="color: #000000;">0</span>, bufnum=<span style="color: #000000;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc;">var</span> in, chain;<br />
&nbsp; &nbsp; &nbsp; &nbsp; in = <span style="color: #0000cc">WhiteNoise</span>.<span style="color: #000000;">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.2</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; chain = <span style="color: #0000cc">FFT</span><span style="color: #000000;">&#40;</span>bufnum, in<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; chain = <span style="color: #0000cc">PV</span>_BrickWall<span style="color: #000000;">&#40;</span>chain, <span style="color: #0000cc">SinOsc</span>.<span style="color: #000000;">kr</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc">Out</span>.<span style="color: #000000;">ar</span><span style="color: #000000;">&#40;</span>out, <span style="color: #0000cc">IFFT</span><span style="color: #000000;">&#40;</span>chain<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">play</span><span style="color: #000000;">&#40;</span>s,<span style="color: #000000;">&#91;</span>out, <span style="color: #000000;">0</span>, bufnum, b<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#41;</span><br />
&nbsp;</span><br />
<br />
<br />
ここでFFTででてきた成分を（chainと表現しいてる）としてPV UGen->逆変換と順番に代入して最終的にオーディオ波形に出力している。<br />
<br />
バッファを二つ用意しなければいけないPV UGenもあるので注意。<br />
<br />
<br />
pvcalc pvcalc2 pvcollect<br />
<br />
<br />
PV_はプラグイン化されC++で実装されているが、SCLangでも自分で関数を設けて成分を操作できる。<br />
<br />
pvcalcはFFTででてきたchainに対して配列操作のようにプロセスを加えられる。<br />
<br />
シンンタクスは<br />
chain.pvcalc(numFrames, function, frombin, tobin, zeroothers)<br />
<br />
numFrames：<br />
バッファのフレーム数<br />
<br />
function：<br />
加える処理。<br />
リアルパートとイマジナリーパートが出てくるのでそれぞれ振幅（mags）、位相（phases）成分として関数内で利用できる。<br />
<br />
frombin：<br />
tobin:<br />
from - to で操作するのが第n次高調波(bins)なのか指定できる<br />
<br />
zeroothers:<br />
1だと指定していないレンジのbinを無視する<br />
<br />
<br />
[例]　振幅成分、位相成分のそれぞれ0~250のbinをすべてシャッフルしてから逆変換<br />
<span class="supercollider"><br />
<span style="color: #000000;">&#40;</span><br />
s.<span style="color: #000000;">boot</span>.<span style="color: #000000;">doWhenBooted</span><span style="color: #000000;">&#123;</span><br />
b = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">alloc</span><span style="color: #000000;">&#40;</span>s, <span style="color: #000000;">1024</span>, <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>;<br />
c = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">read</span><span style="color: #000000;">&#40;</span>s,<span style="color: #666666;">&quot;sounds/a11wlk01.wav&quot;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#41;</span><br />
<br />
<span style="color: #000000;">&#40;</span><br />
x = <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc;">var</span> in, chain, v;<br />
&nbsp; &nbsp; &nbsp; &nbsp; in = <span style="color: #0000cc">PlayBuf</span>.<span style="color: #000000;">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span>, c, <span style="color: #0000cc">BufRateScale</span>.<span style="color: #000000;">kr</span><span style="color: #000000;">&#40;</span>c<span style="color: #000000;">&#41;</span>, loop: <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; chain = <span style="color: #0000cc">FFT</span><span style="color: #000000;">&#40;</span>b, in<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; chain = chain.<span style="color: #000000;">pvcalc</span><span style="color: #000000;">&#40;</span>b.<span style="color: #000000;">numFrames</span>, <span style="color: #000000;">&#123;</span>|mags, phases|<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>mags.<span style="color: #000000;">scramble</span>, phases.<span style="color: #000000;">scramble</span><span style="color: #000000;">&#93;</span>; <span style="color: #cc0000;">//振幅成分、位相成分のbinそれぞれをすべてシャッフル</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span>, frombin: <span style="color: #000000;">0</span>, tobin: <span style="color: #000000;">250</span>, zeroothers: <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc">Out</span>.<span style="color: #000000;">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">0.5</span> * <span style="color: #0000cc">IFFT</span><span style="color: #000000;">&#40;</span>chain<span style="color: #000000;">&#41;</span>.<span style="color: #000000;">dup</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span>.<span style="color: #000000;">play</span><span style="color: #000000;">&#40;</span>s<span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#41;</span><br />
x.<span style="color: #000000;">free</span>;<br />
&nbsp;</span><br />
<br />
<br />
追記：<br />
FFTで用意するバッファは例えば1024でもバッファにはリアルパート、イマジナリパートと書き込まれるので窓のサンプル数は512になる。<br />
なので分解能の倍のバッファを用意しなくてはいけない。]]></description>
 <category>FFT</category>
<comments>http://moxuse.org/scs/?itemid=116</comments>
 <pubDate>Thu, 3 Jul 2008 18:44:41 +0900</pubDate>
</item><item>
 <title>FFTとか</title>
 <link>http://moxuse.org/scs/?itemid=114</link>
<description><![CDATA[#この記事は４月頃書かれたものを再投稿したものです。<br />
<br />
FFT出来無いとか馬鹿にされた（マジむかつく）のでFFTの事をちょっと。<br />
<br />
スパコにもフーリエ変換、正変換FFT逆変換IFFTのクラスが用意されている。<br />
<br />
FFT<br />
<br />
FFTクラスはデカルト座標で配列をずらっと吐いてくるのでその配列を操作する事でスペクトル解析、フィルタリングなど各操作をする。<br />
出てくる配列はこんな感じ。order: DC, nyquist, real 1f, imag 1f, real 2f, imag 2f, ... real (N-1)f, imag (N-1)f<br />
<br />
また窓の種類が選べてrectangular、Welch、Hannの三つ。デフォルトではWelch。（レクトアングルとハニングはわかるけど、ウェルチとはどんな窓なんですか？）<br />
またIFFTに突っ込む前にデータ変換するためのPV UGensというクラス郡も用意されていて、各種比較、演算オンセット・ディテクトなどいろいろある。<br />
詳しくは FFT Overview.html<br />
<br />
<br />
では一つヘルプから例を、<br />
<br />
<br />
周波数成分をプロットしてグラフを見る。スペクトルアナライズ。<br />
<span class="supercollider"><br />
&nbsp; &nbsp; &nbsp; &nbsp; b = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">alloc</span><span style="color: #000000;">&#40;</span>s,<span style="color: #000000;">1024</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; a = <span style="color: #000000;">&#123;</span> <span style="color: #0000cc">FFT</span><span style="color: #000000;">&#40;</span>b, <span style="color: #0000cc">LFSaw</span>.<span style="color: #000000;">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">400</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>; <span style="color: #000000;">0.0</span> <span style="color: #000000;">&#125;</span>.<span style="color: #000000;">play</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; b.<span style="color: #000000;">getn</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span>, <span style="color: #000000;">1024</span>, <span style="color: #000000;">&#123;</span> <span style="color: #0000cc;">arg</span> buf;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc;">var</span> z, x;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z = buf.<span style="color: #000000;">clump</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">flop</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z = <span style="color: #000000;">&#91;</span><span style="color: #0000cc">Signal</span>.<span style="color: #000000;">newFrom</span><span style="color: #000000;">&#40;</span>z<span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>, <span style="color: #0000cc">Signal</span>.<span style="color: #000000;">newFrom</span><span style="color: #000000;">&#40;</span>z<span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = <span style="color: #0000cc">Complex</span><span style="color: #000000;">&#40;</span>z<span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#93;</span>, z<span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span>x.<span style="color: #000000;">magnitude</span>.<span style="color: #000000;">plot</span><span style="color: #000000;">&#125;</span>.<span style="color: #000000;">defer</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; a.<span style="color: #000000;">free</span>; b.<span style="color: #000000;">free</span>;<br />
&nbsp;</span>	<br />
<br />
[説明]<br />
<span class="supercollider"><br />
　　　　　　　b = <span style="color: #0000cc">Buffer</span>.<span style="color: #000000;">alloc</span><span style="color: #000000;">&#40;</span>s,<span style="color: #000000;">1024</span><span style="color: #000000;">&#41;</span>;<br />
<br />
<span style="color: #cc0000;">//FFTデータを書き込むバッファが必要。</span><br />
&nbsp;</span>	<br />
<span class="supercollider"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z = buf.<span style="color: #000000;">clump</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">flop</span>;<br />
<br />
<span style="color: #cc0000;">//clumpしてflopすると奇数、偶数つまり振幅成分と位相成分のデータ配列に分ける(clump(2)はサイズが2のセルを配列の先頭から順番に作っていく、結果2DArrayになる。flopは2DArrayの行と列をひっくり返す)</span><br />
&nbsp;</span><br />
<span class="supercollider"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z = <span style="color: #000000;">&#91;</span><span style="color: #0000cc">Signal</span>.<span style="color: #000000;">newFrom</span><span style="color: #000000;">&#40;</span>z<span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>, <span style="color: #0000cc">Signal</span>.<span style="color: #000000;">newFrom</span><span style="color: #000000;">&#40;</span>z<span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>;<br />
<br />
<span style="color: #cc0000;">//newFromは別の配列から新たに配列を作る（でもこれzの要素をまたzの要素に入れ子にして意味あるんかなこれ）</span><br />
&nbsp;</span>	<br />
<span class="supercollider"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = <span style="color: #0000cc">Complex</span><span style="color: #000000;">&#40;</span>z<span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#93;</span>, z<span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
<span style="color: #cc0000;">//パワースペクトルを対数表示するのでComplexを使って</span><br />
&nbsp;</span><br />
<span class="supercollider"><br />
　　　　　　　x.<span style="color: #000000;">magnitude</span>.<span style="color: #000000;">plot</span><br />
<br />
<span style="color: #cc0000;">//実部と虚部から距離を取って最後にプロット</span><br />
&nbsp;</span><br />
こんな感じのグラフが出た。<br />
<a href="http://moxuse.org/blog/media/1/20080408-fft00.jpg"></a><br />
<br />
追記：<br />
ウェルチ窓についてSignal.htmlヘルプにグラフ見るコードが。<br />
<span class="supercollider"><br />
<span style="color: #0000cc">Signal</span>.<span style="color: #000000;">welchWindow</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1024</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">plot</span>;<br />
&nbsp;</span>	<br />
<a href="http://moxuse.org/blog/media/1/20080408-hanni.jpg"></a><br />
<a href="http://moxuse.org/blog/media/1/20080408-welch.jpg"></a><br />
上がハニングで下がウェルチ。なるほどね。<br />
<br />
<br />
追記２：<br />
<br />
スパコのFFTでは窓かけやオーバーラップを自動でやってくれていて、<br />
オーバーラップの深度はFFTの引数"hop"で0~ 1のunipolarでこれは0~100のパーセンテージ。<br />
wintypeが窓の種類で -1 rectangular, 0 Welch, 1 Hannとなっている。<br />
<br />
FFT.new(buffer, input, hop, wintype, active)<br />
<div class="posttagsblock"><a href="http://technorati.com/tag/FFT" rel="tag">FFT</a></div>]]></description>
 <category>FFT</category>
<comments>http://moxuse.org/scs/?itemid=114</comments>
 <pubDate>Thu, 3 Jul 2008 18:38:24 +0900</pubDate>
</item><item>
 <title>Boarduino</title>
 <link>http://moxuse.org/scs/?itemid=112</link>
<description><![CDATA[#この記事は５月頃に書かれたものを再度投稿した物です。<br />
<br />
<a href="http://moxuse.org/blog/media/1/20080604-boarduino.jpg"></a><br />
<br />
韓国でのワークショップで<a href="http://ladyada.net/make/boarduino/">Boarduino</a>をつかったのでそれに関するメモ。<br />
<br />
BoArduinoはArduinoのクローンでATmega168チップを使っているのでArduino Dicimilaボードと同じ用に動作する。Arduinoより少し安い。<br />
<br />
スパコではquarksに<a href="http://quarks.svn.sourceforge.net/viewvc/quarks/arduino/">arduinoライブラリ</a>があるのでこれを使うと便利。<br />
<a href="http://www.arduino.cc/playground/Code/SimpleMessageSystem">SimpleMessageSystem</a>って言うArdino側のファームウエアのためにかかれているので、今回これを使用した。<br />
最初<a href="http://www.arduino.cc/playground/Interfacing/Firmata">Firmata</a>というわりとスタンダードらしいファームを焼いたが、挙動がおかしいのであきらめる。<br />
<br />
簡単なデジタルreadがやりたかったんだけど、手持ちに抵抗が無かったのでちゃんとしたスイッチ回路が組めない事に気付く。<br />
チップ側でどうにかならないかなーと思っていたら．．あった。<br />
<br />
本来ならちゃんとアクティブハイ、ローの回路を組まなきゃ行けないんだけど、そこを省くためにチップ側でI/Oピンを常にハイかローを書き込んであげるという技。なんて言うんだか忘れたけど（チャタリング防止？ちがうか）、そいうのがあるらしい。<br />
<br />
で、ファーム側で44行目からのreadpins()を少し修正<br />
<span class="supercollider"><br />
void readpins<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span> <span style="color: #cc0000;">// Read pins (analog or digital)</span><br />
<br />
&nbsp; switch <span style="color: #000000;">&#40;</span>messageGetChar<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> <span style="color: #cc0000;">// Gets the next word as a character</span><br />
<br />
&nbsp; &nbsp; case <span style="color: #666666;">'d'</span>: <span style="color: #cc0000;">// READ digital pins</span><br />
<br />
&nbsp; &nbsp; messageSendChar<span style="color: #000000;">&#40;</span><span style="color: #666666;">'d'</span><span style="color: #000000;">&#41;</span>;&nbsp; <span style="color: #cc0000;">// Echo what is being read</span><br />
&nbsp; &nbsp; for <span style="color: #000000;">&#40;</span>char i=<span style="color: #000000;">2</span>;i&lt;<span style="color: #000000;">14</span>;i++<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; pinMode<span style="color: #000000;">&#40;</span>i, <span style="color: #0000cc">INPUT</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">//ここ</span><br />
&nbsp; &nbsp; &nbsp; analogWrite<span style="color: #000000;">&#40;</span>i, <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">//毎ループI/Oピンにlowを書き込む</span><br />
&nbsp; &nbsp; &nbsp; messageSendInt<span style="color: #000000;">&#40;</span>digitalRead<span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">// Read pins 2 to 13</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; messageEnd<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">// Terminate the message being sent</span><br />
&nbsp; &nbsp; break; <span style="color: #cc0000;">// Break from the switch</span><br />
<br />
&nbsp; case <span style="color: #666666;">'a'</span>: <span style="color: #cc0000;">// READ analog pins</span><br />
<br />
&nbsp; &nbsp; messageSendChar<span style="color: #000000;">&#40;</span><span style="color: #666666;">'a'</span><span style="color: #000000;">&#41;</span>;&nbsp; <span style="color: #cc0000;">// Echo what is being read</span><br />
&nbsp; &nbsp; for <span style="color: #000000;">&#40;</span>char i=<span style="color: #000000;">0</span>;i&lt;<span style="color: #000000;">6</span>;i++<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; messageSendInt<span style="color: #000000;">&#40;</span>analogRead<span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">// Read pins 0 to 5</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; messageEnd<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">// Terminate the message being sent</span><br />
<br />
&nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #000000;">&#125;</span><br />
&nbsp;</span><br />
<br />
これでok<br />
<br />
スパコ側はArdino.scdのヘルプを参考に<br />
<span class="supercollider"><br />
p = <span style="color: #0000cc">ArduinoSMS</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;/dev/tty.usbserial-A6004uzj&quot;</span>, <span style="color: #000000;">9600</span><span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">// was 9600 (changed by thor)</span><br />
<span style="color: #000000;">&#40;</span><br />
p.<span style="color: #000000;">action</span> = <span style="color: #000000;">&#123;</span> |... <span style="color: #000000;">msg</span>|<br />
&nbsp; &nbsp; &nbsp; &nbsp; msg.<span style="color: #000000;">postln</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span>;<br />
<span style="color: #000000;">&#41;</span>&nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #cc0000;">// read digital pins</span><br />
<span style="color: #000000;">&#40;</span><br />
t=<span style="color: #0000cc">Task</span><span style="color: #000000;">&#40;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000cc;">inf</span>.<span style="color: #000000;">do</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p.<span style="color: #000000;">send</span><span style="color: #000000;">&#40;</span>$r, $d<span style="color: #000000;">&#41;</span>; <span style="color: #cc0000;">//here is comunication with BoArduino </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">0.025</span>.<span style="color: #000000;">wait</span>;<span style="color: #cc0000;">//適せんsleepをさせて</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">play</span>;<br />
<span style="color: #000000;">&#41;</span><br />
t.<span style="color: #000000;">stop</span>;<br />
&nbsp;</span> <br />
あれ、でもこれよくかんがえたらなぜかanalogWriteしてる。<br />
でも動作はokなんだよな、なんでだろ？わけわからん。<br />
<div class="posttagsblock"><a href="http://technorati.com/tag/Boarduino" rel="tag">Boarduino</a></div>]]></description>
 <category>BoArduino</category>
<comments>http://moxuse.org/scs/?itemid=112</comments>
 <pubDate>Thu, 3 Jul 2008 18:15:58 +0900</pubDate>
</item>
  </channel>
</rss>