SoundJSクラスの静的メソッドSoundJS.play()を呼出すと、引数に定めたサウンドを扱うSoundInstanceオブジェクトがつくられ、サウンドが再生されます。ところが、再生が終わってもSoundInstanceオブジェクトはメモリから消えないようです。
SoundJS.play()メソッドは、再生するSoundInstanceオブジェクトを返します。SoundInstanceオブジェクトにはSoundInstance.uniqueIdというプロパティが備わり、それぞれのインスタンスを識別できます。また、静的メソッドSoundJS.getInstanceById()にそのプロパティ値を渡すと、その値で識別されるSoundInstanceオブジェクトの参照が得られます。
なお、SoundInstance.uniqueIdプロパティは、SoundJS.play()メソッドなどの引数として定めるサウンドデータのidとは異なることにご注意ください。同じサウンドデータのidを引数に渡しても、SoundJS.play()メソッドを改めて呼出せば、新たなSoundInstanceオブジェクトがつくられるのです。
SoundJS.play()メソッドでつくられるSoundInstanceオブジェクトには、デフォルトでSoundInstance.uniqueIdプロパティに0から始まる連番整数が与えられます。
var instance = SoundJS.play(id); alert(instance.uniqueId); // 0
そして、SoundInstanceオブジェクトの参照はもたなくても、そのSoundInstance.uniqueIdプロパティ値がわかれば、SoundJS.getInstanceById()メソッドでいつでも参照を取出せます。そこで、戻り値はとらずにSoundJS.play()メソッドでいくつものサウンドを再生し、そのたびにSoundJS.getInstanceById()メソッドに0を渡して戻り値がどうなるか確かめてみます。
SoundJS.play(eventObject.id); alert(SoundJS.getInstanceById(0)); // [HTMLAudioPlugin SoundInstance]
すると、いくつサウンドを再生し終えても、SoundInstance.uniqueIdプロパティが0のSoundInstanceオブジェクトはメモリから消える気配がありません。もちろん、連番1以降のインスタンスについても同じでしょう。
CreateJS Supportに問合せたところ、この問題は確認されていて、対応を検討しているとのことです(「How to play the finished sound again?」参照)。再生を終えたインスタンスはガベージコレクトするか、あるいは削除のメソッドを提供してほしいところです。