🔊

TouchDesignerでワンショットサウンドを再生する

2025/03/11に公開

TouchDesignerでSEやセリフなどのワンショットサウンドを再生する方法です。

Audio Play CHOPを使う方法

https://derivative.ca/UserGuide/Audio_Play_CHOP

Audio Play CHOPのModeパラメータをPlay While OnまたはTriggerにして、Triggerパラメータを押す、または一つ目のインプットから1を入力するとSound Fileパラメータで指定した音声ファイルを一度だけ再生できます。
Triggerパラメータから再生した場合はModeパラメータがPlay While OnでもTriggerでも挙動に違いはありません。一つ目のインプットから再生した場合、Play While Onでは入力が1の間だけ再生され、Triggerの場合は入力が一度1になったら最後まで再生されます。

Audio Play CHOPはオーディオサンプルを取得することができないので、他のCHOPで加工したりAudio Device Out CHOPから音を出すことができません。そのような場合には後述するAudio File In CHOPを使う必要があります。

Audio File In CHOPを使う方法

https://derivative.ca/UserGuide/Audio_File_In_CHOP

Audio File In CHOPのRepeatパラメータをOffにすると繰り返し再生がされなくなります。その状態でPlayパラメータをOnのままCuePulseパラメータを押すとワンショットサウンドを再生できます。

これで音声ファイルの再生はできますが、PlayパラメータがOnのままだと、プロジェクトを開き直したときなどにサウンドが一回だけ再生されてしまいます。これを避けるにはワンショットサウンドを再生するタイミングだけPlayパラメータをOnにして、再生が終わったらOffに戻す必要があります。

Movie File In CHOPにInfo CHOPを使うとサウンドの再生割合をfractionチャンネルから0~1の値で取得することができます。この値が1になったときに再生終了とすればいいのでMath CHOPで小数点を切り捨て、CHOP Execute DATのOff to OnでスクリプトによりPlayパラメータをOffにします。

chopexec1
def onOffToOn(channel, sampleIndex, val, prev):
	op('audiofilein1').par.play = False

再生するときにはPlayパラメータをOnに戻してCuePulseパラメータを押します。この操作をボタンに連携させてCHOP Execute DATから実行すると以下のようになります。

chopexec2
def onOffToOn(channel, sampleIndex, val, prev):
	op('audiofilein1').par.play = True
	op('audiofilein1').par.cuepulse.pulse()

Discussion