vvvvとPureDataの連携[OSC]

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

//この記事についてはvvvvサイドの筆者が記載していますので、PureDataや音声処理についてはあまり詳しくありません。その点をご留意して見ていただければと思います。

vvvvと音の処理

vvvvは音を作る事が苦手です。
mp3ファイルなどの音声データならパッチ上で再生する方法があります。
しかし、いわゆるジェネレイティングサウンドのように、リアルタイムに書き出す音を作ることが得意ではないのです。

それについては公式にもこんなコメントがあります。

Frankly speaking, vvvv is not focused on audio processing. For maximum flexibility in handling sound you'd probably want to get dirty with Pure Data.

  https://vvvv.org/documentation/audio
 
つまるとこ、vvvvでは音の処理について焦点を当ててないから、柔軟に音を扱うならPureDataを使ってね。ということみたいです。

とは言え、vvvvフォルダのgirlpowerの中にはAudioの項目があり、
「12_Generating_Sound_Basics.v4p」などを見てもらえると、さしあたっての音は鳴らせることがわかると思います。

が!
Beepを鳴らすとRendererの処理が止まり、つまり映像が止まったりします。

すべてのノードが1フレームに1回処理されるという、フレームベースドというパラダイムが、音の処理に向いていないという事が原因として挙げられます。

サウンドプログラミング PureData

PureDataはサウンドプログラミングに特化したビジュアルプログラミングで、音を作る、音声処理をすることに特化したソフトです。

基本的には無料で使用することができます。
https://puredata.info/

ちなみに、『vvvvook』と同じくBNNから『Pd Recipe Book-PureDataで始めるサウンドプログラミング』という本が出ています。

vvvv PureData のOSCを使った連携

ではVJとDJが別々に存在するように、映像はvvvv、音はPureDataで分担して作れば、それぞれの長所を生かし作品を作ることができます。

PureDataの導入や音を鳴らすところについては、他のHPや書籍にお任せし、OSCを使ってPureDataと通信をするところを見てみたいと思います。

vvvv → PureData

vvvvPd.gif

vvvvからOSCで値をPureDataへ送ります。
上のgif画像では2秒ごとにランダムな5つの要素を持つSpreadを送っています。2秒ごとに値を更新しています。
値にはそれぞれアドレスというラベルのようなものがつけられ送信されます。vvvv側の「/test1,/test2,/test1/1,/test1/2,/test1/3」といというラベルが右のそれぞれの値に対応します。

そして、今回はポート9000を介してデーターを送っています。

PureData側ではそれぞれのラベルから対応するデーターを呼び出しています。
この時「/test1/1,/test1/2,/test1/3」についてはまず「/test3」という括りから、さらに「/1,/2,/3」のそれぞれをさらに分割することで呼び出しています。

PureData → vvvv

今度は逆にPureData側からvvvvへ値を送ります。

PDvvvv.gif
「connect localhost 9000」を「sendOSC」へ繋いであげることで送信先を決定します。大文字小文字注意です。

そして、「Send~」から始まる文章に、それぞれ値を送る記述をしてゆきます。
「send /ex1 100」
sendが命令で、/ex1がアドレス(ラベル)、100が送る値になります。

上から3つめの「send /ex3 $1」はその上のノードのRandomから発生される値を送るようになっています。

さて、PureDataは繋ぐだけでは送信処理を行ってくれません。ここがvvvvの概念と大きく違うところです。
vvvvは繋ぐだけで処理が常に実行されます。しかしPureDataは繋いてからその情報を流すにはBangデータを流さないといけません。

なので、metroから2秒ごとにBangデーターを流す事で、2秒ごとにそれぞれの値を送信しています。
それをTriggerで順番にBangデータを流して、それぞれの値をOSCで送信します。
(※追記:この場合Triggerは必須ではありませんでした。)

受信側では、Spreadとしてデータを受け取って、それをアドレス(ラベル)ごとに分けて表示しています。

余談ですが、PureDataをやっていると、オシレーター[oscillator]としてのOSCというノードが出てきますが、これは通信プロトコルのOSCとは意味が違うので、vvvv側からPureDataを始める人は注意です。

おわりに

vvvvをやってから、初めてPureDataを触ると、同じビジュアルプログラミングなのに勝手がまったく違うことに驚きました。
まず、vvvvでは1つのインレットに複数のデータが流されることがありませんので、戸惑います。
そして、今回も出てきましたが、繋ぐだけではデータは流れずBangデータを流すことで初めてデーターが流れてゆきます。
vvvvだとBangは0 or 1の値ですが、PureDataだとその概念とが違っています。

私もPureDataの本をめくるときは驚きの連続でしたが、同じビジュアルプログラミングでもこれだけ違うのかと、とても勉強になりました。

PureDataの方がvvvvを、そしてvvvvの方がPureDataをやる一助となれればいいなと思っています。

参考:
Pure Data Lesson
http://puredatalesson.blogspot.jp/2014/06/11open-sound-control.html