進捗
最近ずっとやってるプロジェクト、そろそろ終わらせたいんだけど次から次へと問題が起こる。今日はm4lのデバイスが起動後に動作しないという状態になった。なんだこれは…
パッチを一度閉じて再度開いたり、編集モードに切り替えてセーブしたりしたら動くようになった。
たまに出るこのwarningと関係あるだろうか?
live.object: Live API is not initialized, use live.thisdevice to determine when initialization is complete
live.thisdeviceの使い方もよくわからない。getstateメッセージを突っ込んでみたが…
とりあえず細かいことには目を瞑ってゴンゴンやろう、と思って進めてきたが、[live.object]を呼び出すときに以下のエラーが出る件、だんだんと頻発するようになった。どうやら腰を据えて向き合わないといけないようだ。
live.object: Changes cannot be triggered by notifications. You will need to defer your response.
live.object: Setting the Id cannot be triggered by notifications. You will need to defer your response.
フィードバックループしないための仕組みで、notificationきっかけで[live.object]のid設定したりプロパティ設定をしようとするとこのエラーが出るようだ。ただ毎回出るわけではなく、体感では作業の最初の頃は出ないが続けているうちにだんだん出る可能性が高くなってくる。
ちなみに
You will need to defer your response.
は[deferlow]オブジェクトのことらしく、これを適当なところに挟めば解決する「かも」みたいな記事を見つけた。改善はしているのかもしれないがそれでもエラーが出る時は出る。
ほかにもいろいろ知見が集まっていたので訳してみた
編集中のデバイスが含まれている時、この問題が起こる傾向がある。maxとlive間の通信がうまくいっていないようだ
編集状態じゃなければ問題なく動くようだ
deferやdeferlowは信用できない。live.objectのid指定時にdeferlowを挟み込んだり、live.objectの前段に挟み込んだりしたが毎回異なる結果とエラーがでた。
edit modeじゃないときどういう挙動になるか調べるため、右クリックでliveからmaxを開いた。editorかそうじゃないかで、確かにスケジューリングなどの挙動がだいぶ異なるようだ…
「編集状態じゃなければ問題なく動く」というのは本当だろうか。試したが自分の環境ではうまくいかなかった。というか一回閉じると冒頭の「そもそも動作しない」みたいな挙動になったのだった。どうすれば…
次にこちらの長大なスレッド読んでみよう。
Note: changes to a Live Set and its contents are not possible from a notification. The error message in the Max Window is 'Changes cannot be triggered by notifications'. In many cases putting a deferlow between the notification outlet and the actual change helps to resolve the issue.
古いですが Live API Overview Reference
からの引用ですね。自分プロジェクトではnotificationから呼びまくりだし、おそらくそうせざるを得ない。どうするべ…とりあえずこのスレッドをじっくり読んで、以下の記事も目を通しておこう