Tag: Max

Maxとjs

maxの中でのjsの書き方まとめ.これだけわかっていればだいたい書ける.
ちゃんとしたリファレンスが無いのがつらい.

 

入力/出力ポート数の定義

inlets = 1
outlets = 1

 

入力によって呼ばれる関数

function msg_int(){} //入力がintの時
function msg_float(){} //入力がfloatの時
function bang(){} //入力がbangの時
function anything(){} //入力がそれ以外の時

 

入力された値へのアクセス

方法1:引数

function msg_int(in){
  post(in)
}

方法2:arguments (packされたのを受信する時などに使う)

function msg_int(){
  post(auguments[0])
}

備考:インレットが複数ある場合

function msg_int(){
  if (inlet==0){
    //
  }else if (inlet==1){
    //
  }
}

入力時に呼ばれる関数(例えばmsg_intとか)は,入力がどのinletポートから行われたとしても呼ばれるため,こういう書き方になる.効率悪いように見えるがこれしか無いっぽい.

 

出力

outlet ( outlet_number, value )
outlet ( outlet_number, [val1,val2] ) //配列で返す時.勿論unpackして取り出せる

 

send出力

glob = new Global(“hoge”) // グローバルオブジェクトを宣言
glob.tag_name = value // グローバルオブジェクトにデータを入れる
glob.sendnamed ( receive_object_name , tag_name) // それをreceiveオブジェクトに渡す

maxpat内で使うsendと同じようにreceiveオブジェクトに値を送れる.
直接値は送れない仕様らしく,グローバルオブジェクトを使って間接的にreceiveオブジェクトに値を渡す感じで書く.

 

maxobjへのアクセスと値の設定/取得

maxpat内のオブジェクトを取得できる.
下はScripting Nameを使ってmaxobjを取得する例.Scripting Nameはmaxpatのインスペクタ上で設定できる

var something_maxobj = patcher.getnamed(“scripting_name”)

something_maxobj.set ( value )

var hoge = something_maxobj.getvalueof()

とても便利.jsオブジェクトとmaxpat上のuiオブジェクトの値を同期させるのに使える.
http://qiita.com/okupara/items/b70dc76332dd69be0ab5

パッチャーウィンドウ制御

まだ使ったことがない.

 

デバッグ

post()

 

おまけ:jsの自動更新

autowatch = 1

セーブされるとjsオブジェクトがスクリプトを自動で読み込み直す.これを書かないとセーブするたびにopenしなくてはいけなくて不便だった,が,max7からは自動でautowatchする設定になっている気がする.

言語ごとの要点備忘録

つまみ食いが好きなので色々な言語を触ってちょっとだけコードを書く、みたいなことをいつもしているんですが、
たまに使おうとすると結構忘れていて同じ所で引っかかったりします。
復習すると忘れないだろうというのと、忘れた時に見返せる&書き足せるので、ブログにまとめることに。
なお、この記事は書いているうちになかのひとが疲れてしまったので書きかけです。


C++

まずここを引く癖をつけよう。 https://msdn.microsoft.com/ja-jp/library/dtefa218.aspx

static

・静的ローカル変数(関数内で定義) : 関数が呼ばれ終わっても残る。
・静的メンバ変数&関数(クラス内で定義) : クラスの全てのインスタンスで共有する変数,関数。クラス名::でアクセスする。インスタンスがなくても使える。また、静的メンバ関数からは静的メンバ変数にしかアクセス出来ない。
・静的グローバル変数(グローバルスコープで定義) : ファイルの中でしか使えなくなるグローバル変数。

auto

型推論。関数内でしか使えない。

継承

class Female : (アクセス修飾子) Human {};
アクセス修飾子はpublic, protected(自身と派生クラスからアクセス), public

virtual

抽象クラスを作りたいときに。virtualをつけると仮想関数になる。
class Humanを継承したclass Femaleと class Male のインスタンスをHuman型の配列に入れて、それぞれ継承したメソッドgrowup()を順番に呼びたい時とする。
virtualしないとHumanのgrowup()を読んでしまうが、virtualしておけばそれぞれのメソッドを呼びに行ってくれる。

条件コンパイル

ヘッダに書いて宣言が重複するのを防ぐ。

#ifndef HOGEHOGE 
#define HOGEHOGE 
(header source code) 
#endif

オーバーロードとオーバーライド

オーバーロード : 同じ名前だが引数の型が違う関数 を 複数定義

オーバーライド : 同じ名前で引数の型も同じ関数 を 上書き定義

ラムダ式

[](){}(); 引数:()は省略可能

http://kaworu.jpn.org/cpp/%E3%83%A9%E3%83%A0%E3%83%80%E5%BC%8F

参照クラス

C++/CXのみで使う。参照クラスはWindows Runtimeによって管理される(GCの対象になる)。参照カウンタを使って自動的にデストラクタが呼ばれるのでべんり

宣言 : ref

インスタンス化 : ref new

ポインタ : ^(キャレット、ハンドル) ポインタと同様に使えるがポインタではない。

リングバッファ

STL::dequeでもいいけど、ビットマスクを使うとスマートにかける。


Ruby

ここを引け http://miyamae.github.io/rubydoc-ja/

ruby、便利だが覚えることが多くて書くたび忘れるのでこれからはpythonを使うようにしたい

i++ みたいなインクリメントはできない

毎回確実にハマる

Math

requireしなくても含まれてる

コメントアウト

#か=begin =end

 


Python

勉強中。

ディレクトリ

import os 
os.listdir

標準入出力

import subprocess 
subprocess.call(cmd,shell=True)

コメントアウト

# 複数行は””” ””” だが文字列として扱っているだけで公式な方法ではない

 


js

prototype

var classname = function(arg1) { 
this.arg1 = arg1 
}

classname.prototype =  { 
method1 : function(){}, 
method2 : function(){} 
}

 


Max on js

I/O port

入力ポートの数 : inlets

出力ポートの数 : outlets

I/O

inlet : にどのポートからの入力か(0~)

augument : 実際に来た値。packされてる場合添字アクセスで取り出せる。

msg_int() とかであれば引数に変数名を指定してその名前で使える。

 


Verilog

まだ忘れていないことが多いのでこの項目はありません。

 


git

.gitignore

ホワイトリスト方式で!を使って書く時の注意。

!で無視を取り消すファイルはgitignoreから見える場所にある必要がある。一度無視してしまったフォルダの中身はgitignoreから見えないので、まず①無視してしまったフォルダをホワイトリストに入れる②フォルダの下を全て無視に加える③無視したくないファイルのみを!で否定する のようにする。

/* 
/.* 
!/dir/ 
/dir/* 
!/dir/hoge.txt

 


VBA+Excel

なんでVBなんで書かないといけないんだろう。でもExcelのゴミみたいなグラフ描画機能をなんとかするためには

使わないといけないこともある。前回手探りで書いたけど全然わからない。

よくわからないメソッドがたくさんあるのでデバッグモードでオブジェクトを調べながら書くと良い。

条件分岐

If 条件式 Then 
ElseIf 条件式 Then 
Else 
End If

関数

Sub hoge() 
End Sub

変数

Dim 変数名 As 型 型は省略可能

with

一時的なnamespaceを作っているような感じ…? Withの中では主語(対象)を省略して書ける。

With 対象 
.メソッド 
End With

シート中の要素へのアクセス

AciveSheet, ChartObjects, Chart, とか、

Interior とか、

全ての要素にアクセス?

SeriesCollection

複数のパラメータ

まだよくわかっていないのだけど、グラフの色を決定するプロパティが二つあったりしてややこしい。

どちらが優先されるのかもよくわからない。

色の要素を持つ別々のオブジェクトを継承していたりして、Interior.ColorでもLineナンチャラ.Colorみたいなのでも色が設定できたりする。わけがわからない。

コメントアウト



DOSコマンド

バッチファイルなんて書きたくない、シェルスクリプトを書かせろ

ラベルとgoto

:START 
(処理) 
PAUSE 
GOTO START

 

 


実際、いろいろ書いていると頭がこんがらがってくるので書く言語を絞ったほうが良いのかもしれない。

仕事でやってるわけでもないので継続的に一つの言語扱うのは稀だし、ぱーっと書いてぱーっと忘れる……

Max7 備忘録

よく忘れたりごっちゃになったりすることをメモ(書きかけ)

 

  1. プレゼンテーションモードで開始
    Ctrl+Shift+Iでパッチのインスペクタを開く → Open in Presentation にチェック
    exeで書きだす時とか。
  2. Jitterで扱うMatrixの構造
    http://www.s-musiclab.jp/mmj_docs/max5/jitter/jitter_tutorial/j17_jttu_matrix.html
  3. presetが消える
    presetオブジェクトに登録されたデータはパッチを開き直すと消えるので,メッセージを使って.maxpresetの形で保存しておく必要がある.
  4. メッセージの順序
    右から左,下から上

Max7 64bit Windows いろいろ

Max7 64bit Windowsを使っています。困ることが多い。

  • CNMATのライブラリ(OSC-routeとか、netreceive~,netsend~、ビートトラッキング各種)はだいたい64bit非対応
  • かといってもちろん32bitを使うと4Gのメモリ上限にぶち当たる。VJするには非常に致命的。
  • 少し題からそれるけどAviraにMax.exeがトロイの木馬扱いされる。感染ではなく誤検出……

Tips:netreceive~ netsend~ 便利です。TCP/IPかUDPを使ってwifi経由でシグナルデータのストリーミングができる。家の中で使っている分には遅延もノイズもほとんどなし。
http://www.remu.fr/sound-delta/netsend~/?page_id=7 からダウンロードできます

Arduino + Max + Xbee でシリアル通信 その2

遅延をなんとかした

前回、とりあえずシリアル通信できたはいいものの、遅延が大きくて使い物にならないレベルだった。

以下の二点を変更することで、そこそこ使えるようにはなった。

・子機のDestination Address(送信先アドレス)に親機の番号を指定するようにした。
(今まで設定していた0でも親機に飛ばせるのだけど、個別に指定したほうが早いようだ。今回は親1体子2なのでこれでOK。)

・Xbee(とArduino)のボーレートをデフォルトの9400→38400にあげた。
38400はMaxのシリアル通信対応の上限。

 

変える前は体感0.1秒くらいの遅延が出ていたが、あまり気にならない程度までは軽減できた。
もしかしてBluetoothじゃなきゃ不味かったか…と思ったけどとりあえずなんとかなったので一安心。

ただ、軽減されたと言ってもまだ遅延は認識できるレベルだ。
今のところ、Arduino側Xbee→PC側Xbeeはほぼ同時なのだけど、PC上Maxでの表示の時点では遅延を感じる。

 

どのくらい遅延が発生してるのか?

Maxでのシリアル通信では、シリアル通信オブジェクトにbangを送って、COMポートにたまってるデータをポーリングする必要がある。ポーリングレートは1msに一回が最大なので、タイミングによって最大これが上乗せされる。
また、Xbeeの通信速度は今38.4kbpsで、ヘッダが25byte=200bitくらいあるので、5msくらい遅延が発生していることになる。
加えて、Maxのソフトウェア的な遅延がかかって…6ms+αか。このαが意外と大きい気がしている…

αがどのくらいなのかわからないので、XbeeのAPIモードを使ってMaxと通信するMaxbeeuinoというライブラリを試してみようと思う。ただAPIモードはフレームヘッダがさらに大きくなるからもっと遅くなるかも…

ちなみに、bluetoothなら通信速度ももっとあげられて(Xbeeは上げれてもこの10倍くらいが限度)、ヘッダも5byteなので、遅延が重要なものをXbeeで作るの失敗だったかもしれない。

 

とりあえずつづく。

Arduino + Max + Xbeeでシリアル通信 その1

自分はハードはからっきしなので、まずはArduinoからということで手を出してみてます。しらないことがたくさんあったのでメモ

やりたかったことは「ArduinoからZigbeeでPCまでシリアル通信を飛ばして、それをMaxで拾う」ということ。

 

1.知らなくて困ったこと

・抵抗器の抵抗の大きさはラインのカラーで表現されている(!)
・スイッチの状態を得るためには「プルアップ抵抗(プルダウン抵抗)」というものを使う
・LEDは長いほうがプラス極。あと抵抗付けないでそのままぶっさしてはいけない(焼けます。)

 

 

 

2.Xbeeの基本

Arduinoで無線通信する方法はイーサネットやBluetoothもあるけど、今回はZigbeeを扱えるXbeeモジュールを使うことにした。

 

Xbeeはファームウェアによって挙動が変わる

Xbeeはメッシュネットワークを形成することができ、ネットワーク内での役割によって3つのタイプになれる。

①Coordinator(親機)
一つのネットワークに一つ必要。

②Router(中継機)
終端端末としての機能に加えて中継機能をもち、リープしない。

③End Device(終端装置)
データを収集する。スリープする

 

Xbeeはコマンドモードによって対話方式が変わる

ATモードとAPIモードがある。
ATモードは機能が少ないが、シリアル通信だけならこれでOK(というか有線シリアル通信の無線板のようなもの)。コンソールが使える。
APIモードは
センサーの値をずっと垂れ流しにしたい、みたいなケースで使う。APIモードではデータはパケット(フレーム)として送られる。(もしかして音声とかも送れるのかな? いずれ試してみたい)

 

XCTUなどのソフトを使って、Xbeeのモジュール自体に情報を書き込む必要がある。
いじる必要がある場所は、ネットワークID(同一IDのものでネットワークを形成する)、Xbeeのファームウェアタイプとコマンドモード(例えばCoordinator AT)など。

Xbeeの基本については
こことか
http://www.inetclub.gr.jp/Total_collection_volume.htm

こことか
http://todotani.cocolog-nifty.com/blog/2010/12/xbee-f604.html

が詳しい。

 

3.Xbeeまわりで詰まったこと

X-CTUで、Arduino経由でのXbeeを認識しない事が多い

X-CTUで情報を書き込む際、まずCOMポートを選び、「Test/Query」ボタンを押すことでチェックを行うのだが、これがとにかく成功しないことが多い。

Arduino UNO-ワイヤレスプロトシールド-Xbeeみたいな感じでつないでいるのだけど、(おそらくArduinoのシグナルが邪魔をして)認識できないことが多い。(Action Requiredという表示が出る。)

次のようにやるとうまくいく事が多い。

①ワイヤレスプロトシールドのSERIAL SELECTスイッチを、USB側に倒す。ArduinoのリセットとGNDをつないでショートさせる。

②USBでPCにつなぐ。

③X-CTUでTest/Queryを行う。

これで、Action Requiredとか言われた場合は、USBをはずして、もう一度①からやりなおす。

 

Xbee同士のペアリングがひたすらうまく行かなかった

有線では、ここ http://mag.switch-science.com/2012/07/20/startup_xbee_s1/ を参考にして、とりあえずシリアル通信ができるようになった。ただ、無線でどうしてもうまくいかない。

PAN IDもきちんと設定できているのに、なぜつながらないんだろうか悩んでいたけど、どうやらペアリング自体がうまくいっていなかったことがわかった。

X-CTUのコンソールからATモードでネットワーク設定をリセットするATNRコマンドを双方(CoordinatorとRooter両方で)叩いて、とりあえずはうまくいくけど、
せっかくの無線通信なのにいちいち有線で設定をしないといけないのじゃ意味が無い。

そこでArduino側から内部でATコマンドを叩いてネットワーク設定をリセットする方法もやってみたけれど、イマイチうまくいかない。

一応:内部から叩く場合、
”+++(ATコマンドモードに入る)”→"ATNR(ネットワークリセット)"→”ATCN(でATコマンドモードを抜ける)”
というのをやる必要があって、またGuardTimeというのがあってそれぞれの処理の間で決められた時間待たないとコマンドを受け付けない。
(ここに詳しい http://nora66.com/zigbee/

 

ネットに転がっている資料だと、どれも一発でペアリングがうまく行っていたのにひたすら謎で、かなり時間を食われたけれど、
結果的に電源を入れる順番とタイミングの問題だということがわかった。

①PC側XBeeの電源を入れる(PCにUSBでつなぐ)

②10秒くらい待つ ←超重要

③Arduino側Xbeeの電源を入れる

しばらくすると、ペアリングが成功して、シリアル通信を行えるようになる。
Arduino側のリセットだけじゃダメで、PC側も電源を入れなおさなきゃいけないというのが盲点だった。あとは挿し直した後にしばらく待たないといけないというのも。

 

4.遅延

というわけで、無線でシリアル通信はできるようになり、Maxで中身を拾えたはいいが、

致命的な遅延がある。

音を扱おうとしているので、遅延少なくする方法をいろいろ探してみているけど、とりあえずつかれたので今日はここまで。

WindowsでMaxを使う際に注意すべきこと

何回かトラブルにあっているのでまとめ。
ちなみに使用バージョンはMax 6(6.3)、Windows 7です。

 

Max 64bitバージョンでJitterを使ったパッチがうまく動かない

Quick TimeはWindowsの64bit環境をサポートしていないため。映像入出力にQuickTimeの機能を使っているパッチはうまく動かない。今後サポートされることがあるのかはわからないので、32bitを使う。
64bitOSだと起動遅いけど。。

ちなみに、2014年でもなお64bit版アプリケーションには不都合がちらほら。
CubaseでもQuickTimeの機能を使って映像にあわせて曲を作れる機能があるけれど、もちろん64bit版では動かない。
http://japan.steinberg.net/jp/support/support_pages/64bit_version.html

 

jit.qt.grabが動かない

たとえMaxの32bitバージョンを使っていても、Windows環境ではカメラ入力などを行うために使うjit.qt.grabは動かない。
(openメッセージを送った時にエラーが出る。)

Windows環境では、かわりにjit.dx.grabが用意されているので、これを使う。使い方は似ているけれど、細かいメッセージとかが違うので注意。
なお、環境によってDXライブラリとQuickTimeのどちらかを勝手に選択して使ってくれるjit.grabというのもある。場合によってはこちらのほうが良いかも。

Maxでvstプラグインを書く

どうやら、Max6.1で、Genに(Vstプラグインとかを書くときに使える)Cのコードを吐き出す機能が追加されたようです。

僕の記憶では、確かMaxの4(Max/MSPと呼ばれてた時代)のときには、vstを吐き出す機能があったと思うのだけれど、5,6でなくなっていました。それが復活したと。

なお、この記事は既にC++でvstプラグインを書いたことがある人を対象にしています。あんまりイメージがつかめていないひとは、こことかを読むと良いと思います。

 

手順は、Cycling’74のwikiに乗っている通りですが、解説します。僕はwinユーザーなので、VisualStudioを使ってコンパイルする場合で書きます。

http://cycling74.com/wiki/index.php?title=Gen_Code_Export_VST

 

①Maxを6.1にアップグレードする

上にもかきましたが、Max6.1じゃないとこの機能は使えません。あと当たり前ですが、Genも買ってないとだめ。

 

②コンパイル環境を入手する

vstプラグインを書く人なら大丈夫だとは思いますが、XcodeもしくはVisualStudioの2010以降が必要。(僕はVS2012で試しました。)

 

③SteinbergからVST2.4のSDKを落とす

http://www.steinberg.net/en/company/developer.html

から3rd Party Developer登録をして、SDKを入手します。Genのexportcode機能はVST2.4までしか対応してなくて3.x以降は未対応なので注意。

 

④Max上で,gen~の中にvstプラグインに吐き出したい処理を書く

 

⑤作ったgen~オブジェクトにexportcodeメッセージを送る

この辺はMax上でgen~のヘルプを読んでも良いかもですね。

メッセージを送ると、gen_exported.cppとgen_exported.hというファイルが生成されます。

 

⑥wikiからサンプルコードを落とす

http://cycling74.com/wiki/index.php?title=Gen_Code_Export_VST

からMyVSTPlugin.zipをダウンロードします。

 

⑦落としたサンプルコードのプロジェクトを開く

winの場合はVS2010用のプロジェクトが用意されてますが、VS2012で開いて、それ用にコンバートしてしまっても大丈夫みたいです。

開いたらリソースに、先程落としたVST2.4のSDK内のvstsdk2.4\public.sdk\source\vst2.xの中身を加えます。ここは普通にC++で直接vstプラグインを書く時と同じですね。

さらに、さっきgenでexportした2つのファイルを、サンプルコードのフォルダにある同名ファイルに上書きします。

 

⑧コンパイル

コンパイルします。するとdllが吐き出されます。

動きます。ヽ(‘ω’)ノ三ヽ(‘ω’)ノ

普通にVS2012でvstプラグインを書くときは、プロジェクトの設定とかdll吐き出すときの設定をしないといけないですが、今回はサンプルコードを改造する形で作るのでそのへんは必要ないです。すばらしい└( ‘ω’)┘

 

 

まとめ

音声処理を行う部分を、genで吐き出すことができる感じです。いきなりdllが吐き出されるわけではない。
ただそれでも十分有用なので、max6.1+genを持っているvstプラグイン開発者の人は、使ってみると面白いと思います。

とにかく、Maxでvstプラグイン書けるって、すごいことです。
実際にどんな音がでるのか確かめながらパッチを作っていって、完成したらそれがそのままCのコードになるんだからすごい。

手で書くときは、いちいちコードを書き換えて→コンパイルして→聴いて確かめて→ってことを繰り返さないといけないわけですからめっちゃめんどいわけです。

 

まだこの機能はベータ版らしいですが、十分使えます。僕も折角持っているので、使っていこうと思います。

 

だいぶ雑な感じでしたが、おしまい。

 

※余談ですが、Max6.1の日本語化パッチが出てるっぽいです。
https://www.mi7.co.jp/products/cycling74/downloads/
6.0は日本語から英語にもどすのがファイル操作とかしなくちゃいけなくてちょっと面倒でしたが、6.1では楽になってます。

SIGMUS 2013 と Max Conferanceに行ってきました。

先日、SIGMUS(音楽情報科学研究会)とMax Conferanceに行ってきました。
色々と面白い話が聞けたのでレポート。

SIGMUS 2013

logo20-s2

ご存知のかたも多いと思いますが、今回のSIGMUSシンポジウムは開催100回目でした。大分オープンな感じだったので、3日目の午後の招待講演からしか行けなかったんですが、遊びに行ってきました。

正直な所、細かい話は下のサイトのレポートのほうが良いので、そちらを読むと良いと思います。

http://slashdot.jp/~aito

僕が聞いてきたのは、企業の方を外部から招いての講演でした。ちょくちょく紹介。

 

Singer Song Writerの話(株式会社インターネット)

Singer Song Writerって、割と歴史あるソフトなんですね(感想はそれだけか。)
既に出ていた他のDAWソフトと差別化を図るために、自動で伴奏とかを作ってくれるところを重視してやってきました、みたいな話。コードを指定するとそれにあわせて伴奏を作ってくれるっぽいです。でもCubase7で同じの実装されてたよね……これからどう戦っていくんでしょうか。

 

ヤマハが開発してきたシンセの話(ヤマハ)

FMシンセの開発の話だとか。エレクトーンも、昔はシンセとして開発されたものだったとか。
出来たばっかりのシンセをStievie Wonderがさっそく使って曲を作った話だとか。
(かの有名なIsn’t She LovelyはYAMAHAが新しくシンセを作ったとききつけて、それで早速作曲した曲だそうな。)
ミクのデザインはDX7をもとにしているだとか。(このへんは割と有名かしら。)

研究とからめての話では、スタンフォード大学が開発したFM音源の理論をヤマハが買い取ってから、実際の製品化に8年くらいかかったみたいな話もありました。製品化には時間がかかるのね。まぁ、逆に言えば今の最先端の研究が10年後、製品化されるっていうことになるのかもしれませんね。

 

MaxとGenの話(Cycling’74)

Cycling’74のCEOが来日して、直々に講演してました。全部英語でした( ˙꒳˙​)◞⁽˙³˙⁾”
Maxで作ったパッチコードを、Genを使うことでCのコードに書き出す話、Panda board用のコードも吐き出せてそれで実際に動かす話とか。

具体的には、gen~オブジェクトにexportcodeメッセージを送ることで、vstプラグインで使えるコード(cppとヘッダファイル)を書き出せるみたいです。最近、C++でvstプラグインを書いたりしていますが、こっちの方法が楽そうだ…
(ということで、やってみた記事はこちら。)

この機能は、6月にリリースされたMax6.1以降で使える機能で、まだベータ版らしいですが、十分有用です。

 

FF14のサウンド周りの話(スクウェア・エニックス)

最近FF14出ましたね。FF14のサウンドプログラマの人の講演で、ゲームの中での音周りのはなし。
組み込みゲームでは、使えるリソース(CPU時間とか)が限られているので、音にはあんまり処理能力を割けない。やっぱり描画優先なので、音はつらい…一世代前は、音の処理(つまりDSPとか)は専用のチップでやっていたけれど、今はソフトでやっている。CPUの処理能力の、5パーセント以下でやれみたいなことを言われているのでとても大変。とかとか。

使えるメモリも限られていて、BGMとかもストリーミングで再生する。でもそれでもつらいので、再生するデータ自体も高圧縮にして節約する。楽曲は128kbps、声とかは96kbps、効果音は36kbpsとかで圧縮しているらしい……高画質でも、低音質なのね、、

処理時間をあまり食わないでやらないといけないので、エフェクトもあまりかけられない。かけるときは、対象を1つにまとめた後にかける。とか。パン振りまわりのはなしとか。

最近ではBGMの再生とかはグラニュラーで多少インタラクティブになっている、らしい。

 

12音解析の話(SONY)

けっこう面白かった。

音楽の体験の仕方が、ちょっと変わっている。Active(演奏者)とPassive(リスナー)の間にいる人達が、増えているのではないか。新音楽体験領域と呼んでいる。semi-active。たとえば、DJさんとかそういう人たち。そこを狙ってアプリなり何なりを作る。

SONYの12音解析技術の紹介。けっこう精度が高くて驚いた。
テンポ、曲のキー、コードを自動判別。ここからさらに、コードからサビとかA,Bを判別、全体的なムード(明るいか、暗いか、とか色々)を判別、まとめてメタデータとして保持する。既存の曲に対してこうやって全部解析を行って、蓄積された膨大な量のメタデータを使っていろんなソフトウェアを作りました、という話。

処理には結構なマシンパワーが必要だけど、端末側でやるんではなく、クラウドに投げてしまえば大丈夫。

将来的に、自分の曲とかもSONYのサーバーに投げて、メタデータ返してくれるようになったら面白い。

 

ざっとですが、なかなか興味深かったです。二日目も行ければよかったんだけど、まぁ仕方ない;

 

Max Conferance

max_conference

行ってきましたよ。昭和音大でやっていました。新百合ヶ丘なので、ちと遠かったですが。
こちらは講演というよりは、実演メインでした。細かく紹介するのは冗長なので、まとめると、

 

*Maxはプロトタイピングに適している

KORGのカオシレーターとかの商品開発/企画をした人の講演がありました。自分の考えた製品のデモ/プレゼンをするために、Maxでプロトタイプを作ったそうです。言葉での説明は難しいが、作ってみて見せると、あ、いいじゃん となる。
実際に製品の案がでて、どれがよいか比較検討するときにもMaxを使っているらしいです。

Genとかもでて、益々こういう側面は強くなっていきそう。

 

*MaxとJavascriptを組み合わせられる

書きやすい方で書いて組み合わせられるので便利。ランタイムで動かせるので、実務にも使えるよーみたいな話。

 

*MIRAの話

タブレットとMax6を連携させることのできるツール、MIRAの紹介。obj-Cでコード書く必要がないので、楽ちんですね

 

*Maxでもいい音出せるよ

めちゃくちゃこだわると、いい音が出せるよという実演がありました。Katsuhiro Chibaさんの講演。
デモ演奏はとても良い音楽を生成してました。いいねー

 

 

こんなかんじでした。次の記事でMaxを使ってvstを吐くのをやってみたのを書いているので、そちらもどうぞ。

Jack を使ってサウンドのルーティングをする

最近、MaxとProcessingを使ってVJソフトを作っているのだけど(このソフトについては追々)、Maxが見るオーディオソースに、Traktorのオーディオアウトを指定したい、みたいなことが起きた。

Macであれば、サウンドルーティングはかなり簡単で、Soundflowerを使えばいいのだけど、Windowsで同じようなソフトウェアがなかなか見つからない。ステレオミックスが目的であればニコ生配信とかの需要があって色々でてくるんだけど、オーディオアウトをインに繋ぎたいみたいなことまでできるのが少ない…。

まぁ、結論として「JACK (jack audio connection kit)」っていうので同じようなことができるっぽいです。

http://jackaudio.org/

jack_connectionjack_panel

ちなみにいま作っている奴のMax側はこんな感じデス

vekei_sender

Unix系OSでAsio対応のオーディオ・インターフェースを使いたい時にJACKを使うとうまくいく、みたいな話は前に聞いたことがあって、てっきりUnix系OS専用かと思っていたけどどうやらWindowsでも動くようです。Winで動かすときはちょっと弄る必要があるんだけど、僕のWindows7 64bitで普通に動きました。
ショートカットアイコンを作って、パラメータで

-R -S -d portaudio -d “ASIO::ASIO4ALL v2”

とか指定すればおk.

http://jackaudio.org/jack_on_windows

オーディオドライバではなくて、オーディオサーバーデーモン、つまりソフトウェアなので何らかのオーディオドライバを使います。外付けか、それがなければAsio4ALLを使えばいいね。

あと、色々試していたんだけど、foobarとの相性はよろしくないようです。音が出ないでタイムアウトする…、今のところ解決策はないみたい。

おわり

——
新譜はとらのあなで委託予定なのでまったりお待ちください