애플리케이션 AEC 레퍼런스
애플리케이션 AEC(acoustic echo canceller, 에코 제거 필터) 레퍼런스 기능을 사용하면 에코 제거에 사용할 커스텀 레퍼런스 데이터를 제공할 수 있습니다.
오디오를 스피커로 출력하기 전에 음향 효과를 믹스하는 등 편집이 필요한 경우가 있습니다. AEC에서 기본적으로 사용하는 레퍼런스 데이터는 원본 오디오를 기반으로 만들어지므로, 믹스한 음향 효과로 인해 에코가 발생할 가능성이 있습니다. 이처럼 오디오를 변조한 경우에는 애플리케이션 AEC 레퍼런스 기능을 사용하여 정확한 레퍼런스 데이터를 제공함으로써 에코를 더 완전히 제거할 수 있습니다.
AEC 작동 방식에 대한 자세한 내용은 에코 제거 필터를 참고하세요.
| 지원 통화 유형 | 최소 SDK 버전 |
|---|---|
| 1대1 통화, 그룹 통화(컨퍼런스) | PlanetKit 3.8 |
활용 사례
아래와 같은 애플리케이션 요구사항이 있을 때 애플리케이션 AEC 레퍼런스 기능을 활용할 수 있습니다.
-
실제 마이크 장치로 입력된 오디오를 커스텀 오디오 싱크에서 변조(음향 효과 믹스 등)하여 출력하는 경우
Note자세한 내용은 애플리케이션 AEC 레퍼런스 설정이 필요한 경우를 참고하세요.
구현 절차
애플리케이션 AEC 레퍼런스 기능을 구현하는 절차는 다음과 같습니다.
애플리케이션 AEC 레퍼런스 사용 시작하기
애플리케이션 AEC 레퍼런스 사용을 시작하려면 startUserAcousticEchoCancellerReference()를 호출하세요.
// 1-to-1 call
let call: PlanetKitCall
... // Obtain the PlanetKitCall instance from the result of makeCall() or verifyCall()
call.startUserAcousticEchoCancellerReference { success in
if success {
print("Application AEC reference started successfully")
}
}
// Group call
let conference: PlanetKitConference
... // Obtain the PlanetKitConference instance from the result of joinConference()
conference.startUserAcousticEchoCancellerReference { success in
if success {
print("Application AEC reference started successfully")
}
}
애플리케이션 AEC 레퍼런스 제공하기
애플리케이션 AEC 레퍼런스를 제공하려면 레퍼런스 오디오 데이터를 인자로 putUserAcousticEchoCancellerReference()를 호출하세요.
자세한 구현 코드 예제는 커스텀 오디오 싱크 클래스 구현하기를 참고하세요.
// Create a audio buffer for audio modification
let audioBuffer = PlanetKitAudioBuffer(...)
... // Modify the audio data
// 1-to-1 call
call?.putUserAcousticEchoCancellerReference(frameCnt: frameCnt,
channels: channels,
sampleRate: sampleRate,
sampleType: .signedFloat32,
outData: audioBuffer.buffer,
outDataLen: audioBuffer.bufferSize)
// Group call
conference?.putUserAcousticEchoCancellerReference(frameCnt: frameCnt,
channels: channels,
sampleRate: sampleRate,
sampleType: .signedFloat32,
outData: audioBuffer.buffer,
outDataLen: audioBuffer.bufferSize)
애플리케이션 AEC 레퍼런스 사용 중지하기
애플리케이션 AEC 레퍼런스 사용을 중지하려면 stopUserAcousticEchoCancellerReference()를 호출하세요.
// 1-to-1 call
call.stopUserAcousticEchoCancellerReference { success in
if success {
print("Application AEC reference stopped successfully")
}
}
// Group call
conference.stopUserAcousticEchoCancellerReference { success in
if success {
print("Application AEC reference stopped successfully")
}
}
인터페이스 변경
다음 표는 애플리케이션 AEC 레퍼런스와 관련된 API의 변경 사항을 보여줍니다.
| PlanetKit 버전 | 지원 메서드 | 비고 |
|---|---|---|
| 5.2 이상 | startUserAcousticEchoCancellerReference()putUserAcousticEchoCancellerReference()stopUserAcousticEchoCancellerReference() | API 네이밍이 변경되었습니다. |
| 3.8부터 5.1까지 | startAECReferenceData()putAECReferenceData()stopAECReferenceData() | useAECReference가 제거되었습니다. |
| 3.7 | putAECReferenceData() | 애플리케이션 AEC 레퍼런스를 사용하려면 1대1 통화 파라미터 또는 그룹 통화 파라미터에서 useAECReference를 true로 설정하세요. |
관련 API
애플리케이션 AEC 레퍼런스와 관련된 API는 다음과 같습니다.
1대1 통화
-
PlanetKitCall의startUserAcousticEchoCancellerReference() -
PlanetKitCall의putUserAcousticEchoCancellerReference() -
PlanetKitCall의stopUserAcousticEchoCancellerReference()