4

PitchShift Audio Unit プラグインを独自のウィンドウで正しくホストするにはどうすればよいですか?

Apple のシステム提供の Audio Unit プラグインをホストする Mac アプリを開発しています。新しい OSX 10.7 Lion では、一部のプラグインのビューが更新されました。PitchShift は、これらの 1 つです。

PitchShift と他のいくつかには、パラメーターを変更するための新しいノブがあります。マウスでノブを回すと、ノブのパラメーター値を示す水平バーがノブの下に表示されます。

このバーは、ノブを離した後も、ウィンドウを閉じた後も画面に表示されたままになります。ノブの 1 つをクリックして不正な値のバーを作成し、PitchShift ビューがあるウィンドウを移動すると、バーはウィンドウがあった場所にとどまります。この時点でノブをもう一度クリックすると、新しいバーが表示されますが、両方のバーは、変化するノブのパラメータ値情報でアクティブに更新されます。これは、このプロセスを繰り返すたびに発生し、画面に表示されるバーが増えます。

これが数回発生した後、私のアプリは main.m ファイルの NSApplicaionMain() 呼び出しで不正なアクセスで終了します。

Logic 9 をチェックインしましたが、これは発生しません。バーはノブに直接つながっているように見えるため、マウスでノブを放すとすぐに消えます。

PitchSHIft ビューを専用の NSWindow の contentView に設定しました。

ロジックはこれをどのように防いでいますか、またはどうすればよいですか?

パラメータ値が PitchShift ビューのサブビューを示すかどうかを確認しようとしましたが、そうではないようです。

どんな助けでも大歓迎です。

編集: 値バーが最初に表示されると、プログラムからコンソールに次の出力が表示されます: 円と線が交差しません

そのため、コアアニメーションのCALayersを使用していることがわかりました。問題は、値バーのレイヤーが PitchShiftView のレイヤー階層の一部ではないことです。つまり、pitchShiftView を構築する他のすべてのレイヤーを見つけることができますが、値バーのレイヤーは見つけることができません。そもそもそれが全体の問題かもしれないようです。

4

1 に答える 1

1

私はついにそれを理解しました。パラメータ値バーは、オーディオ ユニット ビューを所有するウィンドウの子ウィンドウです。

この問題を解決するために、NSApplication のサブクラスでウィンドウのマウス アップ イベントをキャッチし、子ウィンドウ (バリュー バー) を閉じて、ウィンドウが画面に表示されないようにします。

これは出口の悪いアクセスを止めませんでした。これは、これらの長引く子ウィンドウにのみ関連しているように見える別の問題だと思います。

于 2011-08-12T23:12:31.510 に答える