본문으로 건너뛰기
Version: 1.0

오디오 후킹

PlanetKit은 Planet Cloud가 상대방에게 오디오를 전송하기 전에 오디오 데이터를 가져올 수 있는 오디오 후킹(audio hooking) 기능을 제공합니다. 이 기능은 로컬 사용자의 음성을 변조하거나 오디오 데이터를 음성 인식에 활용하는 용도로 사용할 수 있습니다.

개요

오디오 후킹 기능을 사용하기 위한 메서드는 HookAudioExtension에서 제공합니다.

오디오 후킹 활성화

오디오 후킹을 활성화하려면 PlanetKitCallHookedAudioHandler 구현체를 인자로 enableHookMyAudio()를 호출하세요.

오디오 데이터 수정하기(선택 사항)

가져온 오디오 데이터를 수정하려면 PlanetKitHookedAudiosetData()를 사용하세요.

Note

setData() 메서드는 raw 오디오 데이터(data)만 수정할 수 있습니다. channel, sampleCount, sampleRate, sampleType, seq와 같은 메타데이터는 수정할 수 없습니다.

오디오 데이터 돌려놓기

가져온 오디오 데이터를 다시 돌려놓으려면 PlanetKitHookedAudio 객체를 인자로 putHookedMyAudioBack()을 호출하세요.

Warning

오디오 후킹을 활성화한 후에는 오디오 데이터 수정 여부와 상관없이 반드시 가져온 오디오 데이터를 다시 돌려놓아야 합니다. 돌려놓지 않으면 상대방에게 오디오가 전달되지 않습니다.

오디오 후킹 비활성화

오디오 후킹을 비활성화하려면 disableHookMyAudio()를 호출하세요.

샘플 코드

다음 샘플 코드는 음성을 변조하기 위해 오디오 후킹 기능을 사용하는 방법을 보여줍니다.

func modifyVoice(PlanetKitCall call) async {
final audioClipper = PlanetKitCallHookedAudioHandler(
onHook: (call, audio) async {
if(await audio.setData(clipAudioData(audio.data, 0.01)) {
await call.putHookedMyAudioBack(audio);
}
},
);
final result = await call.enableHookMyAudio(audioClipper);
print("enableHookMyAudio result: $result")
}

Uint8List clipAudioData(Uint8List audioData, double threshold) {
var floatData = audioData.buffer.asFloat32List();
for (int i = 0; i < floatData.length; i++) {
double value = floatData[i];
if (value > threshold) {
floatData[i] = threshold;
} else if (value < -threshold) {
floatData[i] = -threshold;
}
}
return Float32List.fromList(floatData).buffer.asUint8List();
}

관련 API

오디오 후킹 기능과 관련된 API는 다음과 같습니다.