본문으로 건너뛰기
Version: 5.5

오디오 후킹

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

지원 통화 유형최소 SDK 버전
1대1 통화5.5

개요

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

오디오 후킹 활성화

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

오디오 후킹이 활성화되면 OnHooked 이벤트를 통해 PlanetKitHookedAudio 객체를 받을 수 있습니다.

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

오디오 데이터를 수정하려면 다음 절차를 따르세요.

  1. PlanetKitHookedAudio::GetAudioData()를 호출하여 오디오 데이터를 획득하세요.
  2. 획득한 오디오 데이터를 필요에 따라 수정하세요.
  3. PlanetKitHookedAudio::SetAudioData()를 호출하여 수정된 오디오 데이터를 설정하세요.
Note

PlanetKitHookedAudio 클래스에서는 미가공(raw) 오디오 데이터만 수정할 수 있고, 채널, 샘플 수, 샘플 레이트, 샘플 유형, 시퀀스 번호와 같은 메타데이터는 변경할 수 없습니다. 미가공 오디오 데이터를 수정할 때는 반드시 메타데이터가 나타내는 형식을 유지해야 합니다.

오디오 데이터 돌려놓기

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

Warning

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

오디오 후킹 비활성화

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

샘플 코드

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

// Implement audio modifier with IPlanetKitAudioHook
class MyAudioHook : public PlanetKit::IPlanetKitAudioHook {
public:
void OnHooked(PlanetKit::PlanetKitHookedAudioPtr pHookedAudio) {
const AudioData audioData = pHookedAudio->GetAudioData();

if(m_pAudioBuffer == nullptr) {
m_pAudioBuffer = new unsigned char[audioData.unBufferSize];
}

// Dump audio data
memcpy(m_pAudioBuffer, audioData.pBuffer, audioData.unBufferSize);

// Process `m_pAudioBuffer` as necessary
...

// Set modified data to pHookedAudio
pHookedAudio->SetAudioData(m_pAudioBuffer, audioData.unBufferSize);

// Put audio data back to PlanetKit
m_pCall->PutHookedMyAudioBack(pHookedAudio);
}

private:
unsigned char* m_pAudioBuffer = nullptr;
unsigned int m_unBufferSize = 0;

// Prepare instance of `PlanetKitCall`
PlanetKit::PlanetKitCallPtr m_pCall;
}

class MyApplication {
public :
// Method to enable audio hook
void EnableAudioHook() {
m_pCall->EnableHookMyAudio(&m_audioHook, this, [](void* pUserData, bool bSuccess){
if(bSuccess == true) {
OutputDebugStringW(L"Audio hook enabled successfully\n");
}
else {
OutputDebugStringW(L"Failed to enable audio hook\n");
}
});
}

// Method to disable the audio hook
void DisableAudioHook() {
m_pCall->DisableHookMyAudio(this, [](void* pUserData, bool bSuccess) {
if(bSuccess == true) {
// Successfully disabled audio hooking
OutputDebugStringW(L"Audio hook disabled successfully\n");
}
else {
OutputDebugStringW(L"Failed to disable audio hook\n");
}
});
}

private :
// Prepare instance of PlanetKitCall
PlanetKit::PlanetKitCallPtr m_pCall;

// Prepare instance of MyAudioHook
MyAudioHook m_audioHook;
};

관련 API

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

클래스/인터페이스

메서드

이벤트