オーディオフック
PlanetKitは、オーディオフック(audio hooking)という機能を提供します。これは、Planet Cloudが相手にオーディオを転送する前にオーディオデータを取得(フック)する機能です。ローカルユーザーの音声を変えたり、オーディオデータを音声認識に活用したりする用途で使用できます。
対応する通話タイプ | SDKの最低バージョン |
---|---|
1対1通話 | 5.5 |
概要
オーディオフック機能を使用するためのメソッドは、PlanetKitCall
クラスで提供しています。
オーディオフックの有効化
オーディオフックを有効にするには、PlanetKitHookMyAudioListener
の実装を引数としてenableHookMyAudio()
を呼び出します。
オーディオフックが有効になると、onHooked
イベントを通じてPlanetKitHookedAudio
オブジェクトを受け取ることができます。
オーディオデータの修正(オプション)
オーディオデータを修正するには、次の手順に従ってください。
PlanetKitHookedAudio
のgetRawData()
を呼び出してオーディオデータを取得してください。- 取得したオーディオデータを必要に応じて修正してください。
PlanetKitHookedAudio
のsetRawData()
を呼び出して修正されたオーディオデータを設定してください。
PlanetKitHookedAudio
クラスでは、未加工(raw)オーディオデータ(data
)のみ修正できます。channel
、sampleCount
、sampleRate
、sampleType
、seq
のようなメタデータは修正できません。data
を修正する際は、必ずメタデータが示す形式を維持する必要があります。
オーディオデータの復元
フックしたオーディオデータを元に戻すには、PlanetKitHookedAudio
オブジェクトを引数としてputHookedMyAudioBack()
を呼び出します。
オーディオフックを有効にした後は、オーディオデータの修正有無にかかわらず、フックしたオーディオデータを必ず元に戻す必要があります。そうしないと、相手にオーディオが転送されません。
オーディオフックの無効化
オーディオフックを無効にするには、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は、以下のとおりです。