SummerSonic2016

ss2016
LINEで送る
Pocket

ちょくちょくお誘いいただくBENZENE by VMTTさんからお誘いいただいてサマソニのSonic Stageのヘッドホンデコレーションのシステムを制作しました。

さすがにこの規模の会場でやるということで仕込み日に無事動作しているのを確認するまでは心配性の性格が出てきていましたが、動作を確認して一安心。

システムとしては、

  • Unity上で画面に表示する映像を表示、
  • 映像や機能を切り替えるためのUIを追加
  • 4chでオーディオをPAさんに出力
  • 照明さんへDMXで制御信号を送り、コントロール

これら全てをUnityアプリ側から制御しました。
今回は映像はミラーリングでしたがLEDにマッピングするので空いた箇所にボタンなど諸々詰め込むことができたので困ることもなかったです。

IMG_1019

今回は使わなかったですが、インタラクティブに制御するために外部から制御できる仕組みも用意していたのでまたこの先使えるといいなあ。


ここからはサマソニ感想文になるのですが・・・・

ちなみにSonicステージは1日目はヘビーロック系が多くて、2日目はMETAFIVEが出てたり昔たくさん聴いていたThe 1975がトリだったりと個人的にも好きなアーティストがたくさん出ていて楽しかったです。

ちょっと時間ができたときに他のステージやお店で食べたりしたのですが、楽しかったです。

こちらはサイレントディスコのあるフロア。ミラーボールで照らされてきれいでした。
ミラーボール

やはりサイレントディスコは楽しかったです。ヘッドホンが昔からすると光ったりで進化していました。
silent disco

これが一番すきだったいちごけずり!暑くなった体には凍ったイチゴを削ったものがたっぷり入っていて、上にはクリーム、下にはシロップと食べていてずーっと美味しかったです。
いちごけずり

機会ありがとうございました!

hi-farm.net

Mac OS X Leopard環境でscilabのplaysndっぽい関数を作る。

LINEで送る
Pocket

今回は前回のpostに引き続きscilabについて。

scilabには、コマンドラインからサウンドをならす関数である、playsndが最初から定義されていて、変数でサイン波とかを用意してplaysndに突っ込むと音がなる、という仕組みなのですが、Macの場合はなぜだかそのままでは使う事ができません。

本当は、http://science6.2ch.net/test/read.cgi/kikai/1068735555/108n-

に書いているようにすればplaysndを使えるようになるらしいのですが、僕の環境ではできなかったので、代わりに自分でplaysnd関数もどきを定義しよう、と考えました。その手順からテストするまでを記述します。

当然、Macであることを前提とします。

 

1 playsnd.sciを開く。

playsnd.sciはscilab.appを右クリック(Control+クリック)し、「パッケージの内容を表示」を選択、その後、「Contents/Resources/macros/sound/playsnd.sci」と進み、ファイルをテキストエディタか何かで開く。

 

すると、どうやらplaysndは

 

  1. “TMPDIR/_playsnd_.wav”というファイルを生成
  2. PlaySound関数で直ぐに再生
ということを行って音を再生する機能を実現している、とわかります。
次に色々とif文の記述がありますが、どこがMacに関係するのかを調べましょう。

 

しばらく眺めると、12行目あたりからが怪しい、とわかります。(理由は、12行目のelseに対応するif文に、”MSDOS”と書いているから、12行目以降はWindows以外を指しているんだろうな、と検討をつける事ができます。だってMac OS XってBSDベースでしょ。)

ここを見ると、「/dev/audio」と書かれているところがあります。

が、まずこの階層は、デフォルトではないと思いますし、なんか別のアイコンが表示されていて、/devを作るのは難しいと思うので、ここでは、/audiodevというフォルダを作り、そこにオーディオファイルを作成します。

 

次に、なぜか僕の環境ではwavファイルを扱うsavewave, rwaveなどが使えなかったので、前回のポストでも使った、.auファイルを生成してならすことにします。

.auファイルの書き出しに関しては、まさに前回のauwriteを使うのですが、では再生はどうすれば良いでしょうか。

 

幸いにもシェルぽく使えるunix関数があるので、コマンドラインで音を鳴らせるプログラムと.auファイルを指定する、という方針にします。

 

コマンドラインからオーディオファイルを鳴らすプログラムを探す

ここではコマンドラインからオーディオファイルを鳴らすプログラムとしては、afplayをつかう事にします。

afplayに関しては、ここが詳しいです。(こちらはOctaveでの例ですね。)

で、afplayにパスを通します。(.bash_profileとかをいじって下さいね。)

 

これでコマンドラインからオーディオファイルを鳴らす事ができるようになりましたので、あとは独自に定義したplaysoundという関数を作成します。

 

playsndライクな関数、playsoundを作成する

 

それでは、playsound関数を作成しましょう。

といっても、playsnd関数をちょこっといじるだけです。

 

 

  1. Macintosh HD直下に、scilabというフォルダを作成します。
  2. 1.で作成したフォルダに、”playsound.sci”というファイルを作成します。
  3. 2.で作成したファイルに下記のように記述し、保存します。
function []=playsound(y,rate,bits,aplay)
// play signal y at sample rate rate 
// bits is unused 
  [lhs,rhs]=argn(0);
  if rhs <= 3 aplay=’aplay'; end 
  if rhs <= 2 bits=16; end 
  if rhs <= 1 rate=22050; end 
  if MSDOS  then
    savewave(TMPDIR+’/_playsnd_.wav’,y,rate);
    PlaySound(TMPDIR+’/_playsnd_.wav’);      
    return 
  else
    if aplay<>’/audiodev‘ then 
      // should send aplay to PlaySound 
      auwrite(y, rate, ‘/audiodev/_playsnd_.au’);
      unix(‘afplay /audiodev/_playsnd_.au’);
    else
      [fp,www] = mopen(‘/devaudio‘,’wb’,0);
      if www<0 then 
fp = -1;
      end
      if fp==(-1) then
disp(‘Audio capabilities not available’);
return
      end
      mput(lin2mu(y),’uc’,fp);
      mclose(fp);
    end
  end
endfunction
これで/audiodevというところに_playsnd_.auというファイルを作成し、それを再生するという関数playsoundを作成できました。

実際にplaysound関数を使ってみる

それでは実際に使ってみましょう。
1. まず、なんでもいいのでscilabからファイルを開く。
2. 下記の内容を記述する。
 //————————– test playsound function
 getf(‘/scilab/playsound.sci’); // 1
 sfrq = 22050;
 while(1)
    state = input(‘play sound?’);
    if state == [] then break end;
    frq = 440;
    T = 1/sfrq;
    tmax = 3;
    tnum = tmax*sfrq;
    
    k = 0: 1: tnum;
    ys = cos(2 * %pi * frq * k * T);
    ymax = max(abs(ys));
    ys = ys/ymax;
    playsound(ys); // 2
   end
3. Executeから実行する。
すると
play Sound?–>
となるので、何かしら1でも何でもいいので入力し、enterを押します。
すると、440Hzで3秒間音がなると思います。
実際に使う時のポイントとしては、
getf関数で先ほど作ったファイルの参照を入れる事くらいでしょうか。
やっとこれからサンプルを触りながら波形の勉強ができる!!やった!

唐突にMac版のScilabでのオーディオ書き出し。

LINEで送る
Pocket

scilabでのオーディオファイルの書き出しについて。

Windows環境では、wavが標準なので、swaveとか、rwaveなんてコマンドがあり、このコマンドに値を渡すとファイルの書き出しやら読み込みを行えています。

書き込みを例にとると:

swave(‘ファイル名’, [書き出す対象となる変数], [書き出す周波数]);

ですが、Macの場合に標準でついている関数は、.auファイルを読み書きするので、

auwrite([書き出す対象となる変数], [書き出す周波数], ‘ファイル名’);  // 拡張子は当然、”.au”

となります。

引数の順番が違うのね。