![]() |
Lumino
|
#include <AudioNode.hpp>
Inherits ln::Object.
Inherited by ln::AudioDestinationNode, ln::AudioGainNode, ln::AudioPannerNode, ln::AudioProcessorNode, and ln::AudioSourceNode.
Public Member Functions | |
void | disconnect () |
このノードをの全ての接続を解除します。 | |
AudioNode::commit() は Audio thread から呼び出される。 そのため AudioNode のフィールドを設定する、ユーザープログラムから呼ばれる setVolume() などの setter は、mutex を Write-lock する必要がある。 一方 AudioNode::commit() では Read-lock する。
× インスタンスの削除は常に Audio-thread 上から行われる。インスタンス作成と同時に AudioContext の管理下に入り強参照される。 → Binding で公開するクラスなので、別スレッドからの削除は非常に危険。 もともと Audio モジュールは Engine::update() 無しでも使いたいコンセプトだったけど、AudioGraph はかなり難しい。 「従来通り Sound クラスだけ使ってるなら Engine::update() は不要だけど、AudioGraph 使うなら必須だよ」 くらいの仕様にしたほうがよさそう。
create() した後、AudioContext に追加するのはユーザープログラムの役目とする。 ちょうど、ノードエディタのキャンバス上に Node を置くイメージ。 なので、Context から Node を外すのもユーザープログラムの役目。 内部的に参照カウントを監視して自動開放したりはしない。 → 以前はそのような想定だったが、マルチスレッドの難易度が跳ね上がるのと、AudioNode を積極的にユーザープログラムで書くことは少ない (それよりも Sound クラスを使ってね) なスタイルなので、ちょっと凝ったことする人は気を付けてね、な方向にしてみる。 ↑ よく考えたらこれだけじゃだめ。Binding の件で、Object の派生は必ずメインスレッドで開放しなければならない。