SoundToys(仮称)

数日前にサンプル音の種類が追加されたのに刺激され、地方巡業の移動の間、RecordingControlsMorphのTweak版を作って遊びました。録音再生機能は簡単にできたのですが、録音したものを保存してタイルにするところが問題で、まだ満足できるものになっていません。
現在のTweakで、発音("make sound")タイルは次のように定義されています。

<message selector="makeSound:" name="make sound:" help="Make the specified sound">
  <argument name="aSound" type="CSoundNameType" default="croak"/>
</message>

メッセージの引数 CSoundNameType型は、サンプル音の「名前」で、SampledSound>>(class)soundLibraryに音を登録する際のキーです。録音した音源をsoundLibraryに登録すれば、自動的に CSoundNameType型のValueタイルでその音を選択できるようになりますし、そこまでは簡単でした。
ここで何が問題かというと、このサンプル音ライブラリは SampledSoundのクラス変数で保持されたシングルトン(またしても!)であり、そこに動的に音を追加したとしても、Tweakで導入された「プロジェクト」に保存することがうまくいかないことです。(動作確認はしてませんが、原理的に無理なはず)
現在はeToysとの操作の互換性を優先しているように感じます。きれいに解決する案として、次のような仕掛けが必要になると思われます。

  • 案1:画像の取り扱いと同様に、make soundタイルの引数は、サンプル音名ではなく、リソース(CSoundResource)とする。CSoundPlayerにちゃんとしたコスチュームを与え、タイルの引数に指定するなどの操作ができるようにする、。
  • 案2:サンプル音ライブラリをシングルトンにせず、個々のIsland(ベース部分+個々のプロジェクト)ごとにもてるようにする。ユーザが追加したものは、目的のIslandのライブラリに登録する。