Max/MSPでCSVから値取得してリスト化・モーフィングする
なにかのデータ分析で出てきたCSVデータを読み込んでそれをモーフィングなどしたい
これで音作るみたいなこと
データ自体の解像度は低くても[line~]などで間補完することで擬似的に波形生成やクロスシンセシシス的なことをしたい、というときにデータを引っ張ってきてそれをスケーリングするやり方
取得値を波形にする
[coll]オブジェクトは難しいことはできないけどとりあえずCSVファイルを読み込ませる(メッセージ "read"を押す)ことができる。[coll] はbangを受けるとindexの0から順番に値を下に出してくれる。メッセージ"goto 0"を押すと、次にbangが押されたときにindexの0から始めてくれる。
よって[uzi n]でCSVのindexの数だけbangを出すことで、indexの順番に値を下に出力する。
出力した数値を[zmap n m -1. 1.]とすることで出力した値を-1.~1.の間にスケーリング(なぜか図では0から1300の値を-1.~1.のfloatに変換)
[zl.group n]で、[uzi n]でまとめて出力したn個のbangによって出た数値をリストにしてくれる。
その下の波形のビジュアライズは[multislider]オブジェクト。
[multislider]は手書きができるので手書き波形も作れる(下は301ポイントの[multislider])
[multislider]の出力を[vexpr]で混ぜる。右側の[slider]に連動して値が掛け算できるようになっている。[slider]の傾きでどちらの値を参考にするかが変えられるのでここを自動化したら簡易モーフィングとかもできる。
図の場合はウェーブテーブル波形みたいに使っているので[peak~]オブジェクトでリスト化した値を[buffer~ table]に代入
波形
おまけ:がんばってCSVファイルを作る
CSV(comma separated values)ファイルはExcelやNumbersなどの表計算ソフトで使われる、各要素がカンマで区切られているデータ・フォーマット
作り方が全くわからないので信じられないけどNumbersで作った。
セルに「0,1,2...」と3つくらい作ってそのセルを複数選択すると、選択してるところの一番下中央に黄色い点が出て、そこをドラッグすると入力規則に従って自動で数字を羅列してくれるので2048サンプルとか記入するときは便利
数値の方は行末にセミコロン(;)が必要なので、データ入力規則で「カスタムフォーマット」を作ると自動でセミコロンをつけてくれる。
エクスポートで「カンマ区切り(.CSV)」選ぶといける