UI 上で +
ボタンとして表示されている Join
ノードを廃止します。
現在の音声信号のルーティングは osc.0
-> join
-> filter.0
となっていますが、これを osc.0
-> filter.0
のような直接接続に変更します。
このリファクタリングにより、ノードグラフの構造と、その背後にある音声処理の連鎖を簡潔化します。
JoinNode
を内部実装として維持:JoinNode
クラスはsrc/Node.h
に残しますが、ユーザーが直接グラフに追加できるノードとしては扱わないようにします。これは、他のノードが複数の入力を受け付けるための内部的なミキサーとして利用します。
Parameters.h
の更新:MAX_JOINS
定数を削除します。NODE_KIND
enum からJoin
を削除します。NODE_KIND_NAMES
配列から"join"
を削除します。isValidIndex
からcase Params::NODE_KIND::Join
を削除します。
Voice.h
とVoice.cpp
の更新:PeachVoice
からjoins
ベクターを削除します。PeachVoice
コンストラクタでのJoinNode
インスタンスの生成処理を削除します。updateGraph
からcase Params::NODE_KIND::Join
を削除します。
JoinNode
やMAX_JOINS
などを参照している他の C++ ファイルの更新:- 残りの参照箇所を見つけるために、徹底的な検索を行う必要があります。
nodeInfo
からjoin
を削除:frontend/src/App.tsx
のnodeInfo
オブジェクトからjoin
のエントリを削除します。
- コンテキストメニューから "Insert Join" を削除:
frontend/src/component/graph/Path.tsx
のContextMenu
から "Insert Join" の項目を削除します。
join
アイコンの削除:frontend/src/Icon.tsx
のjoin
アイコン定義を削除します。
- 「入力の追加」機能の汎用化:
- これまで
Join
ノードが担っていた「新しい入力の追加」機能を、複数の入力を受け付けられるようになるすべてのノード(Filter
,Pan
,Destination
など)で利用できるようにします。 frontend/src/App.tsx
のnodeInfo
を更新し、対象ノードのnumberOfInputs
を1
より大きい値(例:5
)に設定します。これにより、frontend/src/component/graph/Node.tsx
のコンテキストメニューに「入力の追加」が表示されるようになります。
- これまで
- "join" を参照している他のフロントエンドファイルを更新:
- すべての参照が削除されたことを確認するために、検索を行う必要があります。
このリファクタリングの核心は、これまで単一の入力しか受け付けなかったノード(FilterNode
、PanNode
、DestinationNode
など)が、複数の入力を受け付けられるようにすることです。これは、各ノードの内部にJoinNode
インスタンスを保持し、入力信号のミキシングを委任することで実現します。
- 内部
JoinNode
の利用:FilterNode
などの対象ノードは、std::shared_ptr<JoinNode>
をメンバー変数として保持します。 addInput
メソッドの移譲: 対象ノードのaddInput
メソッドは、渡された入力を内部のJoinNode
のaddInput
に渡します。これにより、単一入力の制約がなくなります。step
メソッドの連携: 対象ノードのstep
メソッドは、まず内部のJoinNode
のstep
を呼び出して入力信号をミックスし、そのJoinNode
の出力 (out
メンバー) を自身の処理(フィルタリング、パンニング等)の入力として使用します。- 依存関係の管理:
_getDeps
メソッドは、内部のJoinNode
を依存関係として返すようにします。
この変更は以下のノードに適用されます:
FilterNode
PanNode
DestinationNode
AdsrNode
DelayNode
GainNode
このアプローチにより、各ノードは自身の主要な責務に集中でき、コードの再利用性を高めつつ、オーディオグラフを簡素化できます。