MAX/MSP+Jitter 指定したフォルダの映像ファイルをランダム再生
ローカルのフォルダに映像ファイルを入れておけば、それをランダムで再生できる仕組みを作ってみました。
相変わらず非効率な処理っぽいけどこれは動けば問題ないかと思う。。
1.黄色のボタンクリック
映像ファイルがあるフォルダを指定します。
●フォルダの指定
フォルダを指定するには「opendialog fold」オブジェクトにbangを送ってあげればダイアログが開きます。
「fold」がついてないとファイル選択になります。
選択後、フォルダのパスを送ります。
送り先は「folder」オブジェクトと真ん中あたりのpack、右上の確認用のメッセージです。
●映像ファイルリストの取得
「folder」オブジェクトを使います。
さっきの「フォルダの指定」で、このfolderオブジェクトにフォルダのパスが送られてきてます。
これにbangを送るとそのフォルダのファイルリストが取得できます。
映像ファイルのみ取得したいので、最初に「types MooV」というメッセージを送っておきます。
(「MooV」はmovファイルだけかな??)
取得したリストはumenuに送ります。
1.赤のボタンクリック
ムービーのランダム再生を始めます。
その前の設定も同時にやってます。処理順的にこれでいいのか分からないけど一応動いてます。
●ファイル数の取得
umenuに「count」メッセージを送るとリスト数が取得できます。
出力は「count 4」みたいになるのでzl slice 1で分けて数値だけ取得します。
この数値をrandomの範囲に設定します。
●ランダム
umenuに設定されているファイル名の中からランダムで1つ選ぶために「random」を使います。
「random」の右のインレットはrange(範囲)で、0からこの範囲内でランダムな数値を出力します。
出力された数値はumenuへ送られます。
umenuは数値が送られてくると、それに対応する番号の項目を出力します。
●パス+ファイル名
umenuの2つめのアウトレットからファイル名が出力されてきます。
これと、最初に選択したフォルダのパスをつなげます。
ここはいいやり方が分からなかったけど、以下のような考え方でなんとかやりました。
・「tosymbol」はリストの中身を連結させて文字列にする。何も指定しなければ単にスペースが消される感じ。
・そのために「パス ファイル名」というリストを作る。
・packを使ってリストを作る。
・「パス ファイル名」とするにはpackの1つめのインレットにパス、2つめにファイル名を入れたい。
・でもパスは基本的に入ってくるのは最初だけで、ファイル名がどんどん変わってく。
・packは1つめのインレットが変更された場合に出力される。
・pakにすれば2つめのインレットに値が入ってきたときも出力されるが、パスが送られてきた時は出力したくない。
・なのでやっぱりpackで、最初は「ファイル名 パス」というリストにする。
・その後に「zl rev」で反転し、「パス ファイル名」というリストにする。
「prepend read」で「read パス+ファイル名」というメッセージを作って送ります。
●映像切り替え
「jit.qt.movie」はさっきのreadメッセージを受け取ることで、映像を再生します。
普通にやると永遠とループ再生されてしまうので、再生が1回終わったら次の映像を再生するようにします。
「jit.qt.movie」のアトリビュートでループ関連のものがあるので設定します。
@loopはループするかどうか、ループする場合の方法を設定できます。
@loopreportはループ通知フラグ。再生がループ ポイントを通過するときに「loopnotify」メッセージが送信されます
@loopreportは「1」にしておけばよさそうです。
@loopは1回再生でいいから0でいいのかなと思うんだけど、0にすると1回目しか「loopnotify」メッセージが送信されませんでした。
ここはデフォルトの「1」でいいみたいです。(なので書く必要はない)
「loopnotify」メッセージは右のアウトレットから出力されます。
「select loopnotify」で、送られてきたメッセージが「loopnotify」の場合にbangを出力させます。
そのbangは左上のrandomのとこに渡り、再度ランダムでファイルを指定することで再生されます。
「●ランダム」のところからここまでを繰り返します。
これをサブパッチ化して使いまわせるようにしよう。
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント