本文にスキップする
Version: 6.0

オーディオフック

PlanetKitは、オーディオフック(audio hooking)という機能を提供します。これは、Planet Cloudが相手にオーディオを転送する前にオーディオデータを取得(フック)する機能です。ローカルユーザーの音声を変えたり、オーディオデータを音声認識に活用したりする用途で使用できます。

対応する通話タイプSDKの最低バージョン
1対1通話5.5

概要

オーディオフック機能を使用するためのメソッドは、PlanetKitCallクラスで提供しています。

オーディオフックの有効化

オーディオフックを有効にするには、PlanetKitHookMyAudioListenerの実装を引数としてenableHookMyAudio()を呼び出します。

オーディオフックが有効になると、onHookedイベントを通じてPlanetKitHookedAudioオブジェクトを受け取ることができます。

オーディオデータの修正(オプション)

オーディオデータを修正するには、次の手順に従ってください。

  1. PlanetKitHookedAudiogetRawData()を呼び出してオーディオデータを取得してください。
  2. 取得したオーディオデータを必要に応じて修正してください。
  3. PlanetKitHookedAudiosetRawData()を呼び出して修正されたオーディオデータを設定してください。
Note

PlanetKitHookedAudioクラスでは、未加工(raw)オーディオデータ(data)のみ修正できます。channelsampleCountsampleRatesampleTypeseqのようなメタデータは修正できません。dataを修正する際は、必ずメタデータが示す形式を維持する必要があります。

オーディオデータの復元

フックしたオーディオデータを元に戻すには、PlanetKitHookedAudioオブジェクトを引数としてputHookedMyAudioBack()を呼び出します。

Warning

オーディオフックを有効にした後は、オーディオデータの修正有無にかかわらず、フックしたオーディオデータを必ず元に戻す必要があります。そうしないと、相手にオーディオが転送されません。

オーディオフックの無効化

オーディオフックを無効にするには、disableHookMyAudio()を呼び出します。

サンプルコード

以下のサンプルコードは、音声を変えるためにオーディオフック機能を使用する方法を示しています。

// Get instance of PlanetKitCall
private var call: PlanetKitCall?

// Single-threaded executor to handle audio processing asynchronously
private val executor = Executors.newSingleThreadExecutor()

// PlanetKitHookMyAudioListener object
private val listener = PlanetKitHookMyAudioListener { audioData ->
processingAudio(audioData) // Pass intercepted audio data to be processed
}

// Method to process and modify the audio data
private fun processingAudio(audioData: PlanetKitHookedAudio) {
// Submit the audio processing task to the executor
executor.submit {
// Get the raw audio data
val processedAudio: ByteArray = audioData.getRawData()

// Modify the audio data as needed
...

// Set the modified audio back
audioData.setRawData(processedAudio)

// Send the processed audio data back to the server
call?.putHookedMyAudioBack(audioData)
}
}

// Method to enable audio hook
fun enableAudioHook() {
call?.enableHookMyAudio(listener, PlanetKitRequestCallback {
if (it.isSuccessful) {
Log.d(TAG, "Audio hook enabled successfully")
} else {
Log.e(TAG, "Failed to enable audio hook")
}
})
}

// Method to disable the audio hook
fun disableAudioHook() {
call?.disableHookMyAudio(PlanetKitRequestCallback {
if (it.isSuccessful) {
Log.d(TAG, "Audio hook disabled successfully")
} else {
Log.e(TAG, "Failed to disable audio hook")
}
})
}

関連API

オーディオフックに関連するAPIは、以下のとおりです。

クラス/インターフェース

メソッド

イベント