コンテンツにスキップ
JA

command と clip の使い分け

同じ play(id) 呼び出しが、kit manifest の bucket に応じて 2 つの再生モードに 自動で分かれます。呼ぶ側のコードはどちらでも 1 行です。

manifest の bucketモード何が起きるか事前 deploy
eventscommandSDK は PLAY を送り、デバイスが内蔵 clip を再生必要(Studio で kit 書込)
stream_eventsclipSDK が kit の stream-clips/ の WAV を読み UDP ストリーム不要
import hapbeat
hb = hapbeat.connect(app_name="MyApp", kit="kits/my-kit")
hb.play("sample-kit.sine_100hz") # command → デバイスが内蔵 clip を再生
hb.play("rain.loop") # clip → SDK が WAV をストリーム
hb.stop("rain.loop") # clip は再生中のストリームを終了

分岐は EventMap(触覚ファイル)の情報で決まります。EventMap を渡していなければ、 すべて command として送られます。

commandclip
推奨本番運用・短い one-shot試作・長尺・差し替えの多い段階
遅延小・安定やや大きめ・環境依存
事前 deploy要(Studio で書込)不要(WAV を置くだけ)
触覚の差し替えkit 再 deployWAV を置き換えるだけ

迷ったら 試作は clip、固まったら command が基本です。

clip では SDK が PCM を加工せず、gainSTREAM_BEGIN.gain にのみ畳んで送り、 デバイスが一度だけ適用します(command の gain と同じ意味)。gain を省略すると kit manifest の intensity が使われ、明示すれば上書きできます。

hb.play("rain.loop") # intensity(kit の既定値)
hb.play("rain.loop", gain=0.3) # 呼び出し側で上書き
  • clip WAV は 16 kHz モノ PCM16 で用意してください(デバイスは 16 kHz 再生。 SDK は resample しません。非 16 kHz は警告のみ)。
  • 1 度に流せる clip は 1 本(session 単位)。新しい clip を流すと前の clip は 自動的に終了します。
  • 同じ id を eventsstream_events の両方に書いた場合(Studio の BOTH)は clip 側が優先されます。