EssのTips少し

setup()が複数回呼ばれる

setup()の中でsize()を呼ぶと、再度setup()が実行されます。他にも同様の現象があるかも知れません。初期化処理が2回呼ばれると気づきにくいバグが発生することがあるので、setup()の最初には目立つログを出力しておきましょう。
とりあえずsize()はsetup()の冒頭に記述します。

audioStreamWrite()が複数のAudioStreamに対して呼ばれる

複数のAudioStreamを作成してstart()すると、それらに対して個別にaudioStreamWrite()が呼ばれます。println(stream.toString()); みたいな感じでAudioStreamのインスタンスが分かるログを出しておくと気づきやすいです。
複数のAudioStreamを使うつもりがなくても、上記のsetup()2重呼び出しが原因で起こるかもしれません。音がプチプチするのでバッファリングの問題か?と悩み、かなりハマりました。

-verbose:gc

ストリーム再生で音の停止は大敵です(あきらめも必要だが)。JavaはFullGCが発生すると全体の実行が止まるので、アプレットの実行に-verbose:gcを付けて、FullGCが発生していないかチェックしましょう。マイナーGCでも頻発させるとCPUを食うので省エネを心がけます。

draw()がCPUを食う

ストリーム再生で音の停止は大敵です(再掲)。-verbose:gcを付けたがFullGCは起こっていない・・・。タスクマネージャを見るとCPUが振り切っている・・・。ソースを色々コメントアウトしていったら、何も中身を実装していないdraw()が原因でした。
デフォルトでは激しい勢いでdraw()が呼ばれ、ウインドウのサイズに応じてバンバンCPUを消費します。setup()内でnoLoop()を呼んで必要な時にredraw()するか、frameRate()でコントロールしましょう。