Kデスクトップ環境

12.4. ポーティング - aRts 用の GUI ビルダーを別のもので書く

Arts の設計はとても柔軟性があります。 これはつまり、他のアプリケーションから、シンセサイズサーバとして同時に利用できることを意味します。

ArtsBuilder は今は KDE の下で動いていますが、それが好きでない人も確かにいます。 実際、Arts はこの部分を簡単にポーティングできるように設計されています。 後で GNOME などの GUI を装備するためです。

このガイドはおもに ArtsBuilder と Arts シンセサイザとの対話について説明していますが、 Arts と交信する大小のアプリケーションを作成するのにも役に立つと思います。

では、GUI でしなければならない事は何でしょうか?

シンセサイザのインスタンスを接続:

   1     // You'll need to call orb->bind, mico code for that is:
   2 
   3     CORBA::Object_var obj =
   4         orb->bind ("IDL:Arts/Synthesizer:1.0", "inet:localhost:8888");

シンセサイズストラクチャ記述を作成する

Synthesizer->createStructureDesc() を呼び出してください。ストラクチャ記述がえられます。

モジュールを作成する

Synthesizer->getModuleCount() と Synthesizer->getModuleInfo() で、 ModuleInfo の記録を取得します。これらにはメンバー名が付いています。 モジュール名もその名前の一部になっています。それをユーザに知らせて、他の情報を使わないようにします。 将来のリリースではこれは残っているかどうか分かりません。

モジュール記述を作成したいときは StructureDesc に行き、それにモジュール情報を渡してください。 これはストラクチャの中に置かれます。

それを視覚的に表示することもできます。ストラクチャを保存する前に モジュールを正しい位置に (moveTo(x,y)) で移動してください。

モジュールを表示する

モジュールは次のように表示されます。

このモジュールは入力ポート A B C, 出力ポート a, を持っています。名前は label です。 そして、モジュールの高さはグリッドスキームで1に、 幅は 1+max(inports.size(),outports.size()+1) になります。

モジュールは GUI によって重ならないように配置されます。

ポートの接続、パラメータの設定

ModuleDesc->Ports でモジュールのパラメータを設定することができます。 ModuleDesc->Ports にはモジュールの持つPorts の参照があります。 connectTo, disconnect, などが呼び出せます。

ポートは値を与えられるか、接続されるか、または未接続のままかのどれかです。

モジュールの実行

Synthesizer->createStructure(StructureDesc) でそのストラクチャのインスタンスを作成します。 そして後でそれは統合されます。

id を保持しておいて、後でそれを freeStructure に渡します。

ファイルの保存

自分の StructureDesc は saveToList() で保存します。 その結果できる Arts::StringSeq の内容はテキストファイルに書きこみます。 その拡張子は .arts にします。

ファイルのロード

Arts::StringSeq への .arts ファイルのロード。あなたがすでに持っているStructureDesc に行き、 StructureDesc->loadFromList(theStringSeq) としてください。

当然ながら、Arts はまだ設計途上にあります。 シンセサイザ用の GUI の構築など、基本的なことがまだできていないし、 インターフェイスで指定されていません。

Arts のインターフェイスは将来成長するでしょう。 しかし、少なくとも2つの GUI で相互通信に関する機能を高めておけば、 よい解決法を作るのにきっと役に立つでしょう。

理論的には、arts は他のオペレーティングシステムにも簡単に移植できます。 mico が目標のプラットフォームでコンパイルされていれば、シンセサイザもコンパイルできます。 Synth_PLAY のコードを少し変える必要があるでしょうが、大したことはありません。 そして、その OS または Java にもとからあるツールで新しい GUI を作成することができます。 これで、移植ができます。

先進機能

もちろん aRts は上で説明したようなシンプルなままでいることはありません。 おそらく、最も重要なニュースは、ビジュアルモジュールができたことでしょう。 これは、GUI プロセスに ArtsServer CORBA インターフェイスを用意させることで内部的に実行されています。 メインシンセサイズサーバと同じように、 このインターフェイスによってストラクチャがインスタンス化できます。 ポイントは、GUI も同じモジュールで作成して、シンセサイズの「プレイグラウンド」と同じように ルールに従うことです。

これだと移植が難しくなり、また artsbuilder 全体をそのまま持ってきて、 Qt のコールを GTK-- のコールに置き換える移植が提案されることになります。 ともかく、移植しようとしたら、メインの artsbuilder のバージョンに統合できるようなかたちで成功させ、 双方に互換性ができるようにしてください。

他の方法でやりたいなら(ArtsServer のインターフェイスはそう難しくありませんが)、 あなた自身が GUI インターフェイスを調整して、Qt/KDE-Artsbuilder によって理解されるストラクチャが あなたのものでも理解できるように、またその逆もできるようにしてください。 おそらく、クロス・コンポーネントのモデルを開発することになります。 ArtsBuilder で動作する視覚的コンポーネントをあなたのソフトウェアで再利用できるように、 またその逆もできるようにしましょう。