スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« かなり不安定なので | トップページ | @homepageは終了させる »

安定化出来た感じなので

今はAmuseGraphicsの開発フェーズで、レジストユーザー向けのプレミアムソフトを開発中なのだが、オーディオミキサーについては、昨日、不安定なので方式を変更してミキシングは外部で行う格好に変更する、と、書いたのだが、状況は変わって、安定化は出来た感じだ。

昨日、ブログ記事を書いた後、それを読み返していて、ふと、思いついたのだが、現行のAG-デスクトップレコーダーでも、CoreAudioを使ったオーディオ入力を行っていて、これについても、一応は、DirectShow経由になっている。

で、上記の現行版の動作は安定しているので、昨日の記事では、「DirectShow内部でCoreAudioのAPIを使用すると、OS動作が異常になる可能性がある」、と、書いたのだが、必ずしも、そうなる訳でもない、という事が気になった訳だ。

このため、現行版で使用している前述の処理、具体的には、AmuseGraphicsHelperのコードになるのだが、と、現在開発中のオーディオミキサーのDirectShowフィルターのコードを見比べてみた所、CoreAudioの初期化と終了場所が異なっていた。

なので、オーディオミキサー用のDirectShowフィルターの初期化/終了処理を変更してみた所、安定した感じになった訳だ。

具体的には、オーディオミキサーの初期化処理は、元々は、ストリームクラスが生成されるコンストラクタ内で行い、終了処理はデスクラクタ内で行っていたのだが、それらをそれぞれ、Active()/BreakConnect()処理内に移動すると、一応、安定化した。

一応、と、書いているのは、その他にも、スタック変数のサイズが大きいとクラッシュする様な傾向が見られたので、スタック変数は極力小さくしたりもしたので、安定化の為に行った対策は、前述の処理位置変更が全てという訳ではないからだ。

更に、前述の対策によって、設定ファイルに従ったミキシング動作は可能になったのだが、今の所、動作中に設定変更を行うと、クラッシュする状況になっている。

クラッシュする原因は、単純な論理バグという訳では無さそうで、処理時間だとか、実行中のコンテキストにも関係しそうなので、現時点では、先行きは見えない状況なのだが、設定変更処理をより単純化して軽くすれば、問題は無くなりそうな気もしている。

と、いう事で、オーディオミキサーについては、昨日は、設定ダイアログの同時動作が必要と書いたのだが、その必要を無くせる可能性は大きくなった。

もっとも、開発を始める前にも書いていた様に、もっとも安定化しそうなアーキテクチャとしては、ミキシング動作なんかは別のWindowsサービスを作成して行い、DirectShowフィルターには、プロセス間通信でデータの受け取りだけを行わせる格好にする事かもしれない。

こういう格好にしておけば、設定ダイアログの同時使用も不要に出来るし、DirectShowフィルターが不安定になる事も無い筈だ。

つまり、DirectShowというのは不安定なAPIになるので、マイクロソフト的にも、現在は自社製品では使用しなくなっている訳なのだが、新しいAPIなら安定するのか、というと、一般人的には、新しいAPI用ドキュメントは皆無なので、そんなAPIを使用すると、より不安定になりそうな気もする。

と、いう事で、DirectShowにはドキュメント化されていない様々な制限事項がありそうなのだが、とりあえず、歴史は古いので、普通に動作するプログラムを参考に出来る分、まだ、使いやすい、という利点はあるかもしれない。

= この記事に関連する公開中ソフト =

AGM Audio Mixer (AmuseGraphics)

AGMAMixer

(2016/10/25追加)

« かなり不安定なので | トップページ | @homepageは終了させる »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/64269097

この記事へのトラックバック一覧です: 安定化出来た感じなので:

« かなり不安定なので | トップページ | @homepageは終了させる »

2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google