본문으로 건너뛰기

Streaming Sound Wave

스트리밍 사운드 웨이브는 재생 중에도 오디오 데이터를 동적으로 추가할 수 있는, 가져오기(import)된 사운드 웨이브의 한 유형입니다. 되감기와 같은 가져오기된 사운드 웨이브와 동일한 기능을 제공하며, SoundCue 등에서 사용할 수 있습니다.

음성 활동 감지(Voice Activity Detection, VAD)에 대해서는 이 페이지를 참조하세요.

스트리밍 사운드 웨이브 생성하기

먼저 스트리밍 사운드 웨이브를 생성해야 합니다. 조기 파괴를 방지하기 위해 강한 참조로 취급해야 합니다(예: Blueprints에서 별도의 변수에 할당하거나 C++에서 UPROPERTY() 사용).

Create Streaming Sound Wave node

사운드 웨이브 재생

그런 다음 해당 사운드 웨이브를 재생할 수 있습니다. 그러나 지금 할 필요는 없으며, 나중에 사운드 웨이브 재생을 시작할 수 있습니다.

사운드 웨이브 재생의 다양한 예시

오디오 데이터 사전 할당

선택적으로, 새로운 오디오 데이터가 추가될 때마다 전체 PCM 버퍼를 재할당하는 것을 피하기 위해 오디오 데이터(바이트)를 사전 할당할 수 있습니다.

Pre Allocate Audio Data 노드

오디오 데이터 추가하기

기존 버퍼의 끝에 오디오 데이터를 추가하려면, 오디오 데이터를 동적으로 추가하기 위한 적절한 함수를 사용하세요. 재생은 이러한 추가 작업의 큐 순서를 따릅니다.

Append Audio Data node

가속되거나 왜곡된 오디오 재생 방지

사운드 웨이브가 재생되는 동안 오디오 데이터를 스트리밍할 때, 특정 시나리오에서 오디오 재생이 가속되거나 왜곡되는 현상을 경험할 수 있습니다. 이 문제는 일반적으로 다음과 같은 경우에 발생합니다:

  1. 사운드 웨이브 재생이 현재 버퍼의 끝 근처에 있거나 끝에 도달했을 때
  2. 새로운 오디오 데이터가 스트리밍 사운드 웨이브에 지속적으로 큐에 추가되고 있을 때
  3. 재생이 들어오는 데이터 스트림을 따라잡을 때

언제든지 문제 없이 오디오 데이터 채우기를 중단할 수 있습니다. 그러나 실시간 오디오 스트리밍과 같이 지속적인 스트리밍이 필요한 시나리오의 경우, 오디오 데이터 스트리밍의 신뢰성에 따라 두 가지 접근 방식이 있습니다:

신뢰할 수 있고 일관된 스트리밍의 경우: OnPopulateAudioState 델리게이트를 사용하여 첫 번째 청크가 수신된 직후 재생을 시작하세요.

신뢰할 수 없는 스트리밍(네트워크 문제, 간헐적 데이터)의 경우: OnPopulateAudioState가 트리거된 후에도 재생을 시작하기 전에 더 큰 버퍼를 구축하기 위해 추가 지연 시간을 추가하세요.

OnPopulateAudioState를 사용하여 재생 문제 방지

참고: 오디오 데이터 채우기를 언제든지 중단해도 재생에 문제가 발생하지 않습니다. 정확한 접근 방식은 오디오 데이터 스트리밍의 신뢰성에 따라 달라집니다. 일관된 스트림의 경우 즉시 재생을 사용하고, 신뢰할 수 없는 스트림(예: 네트워크 연결 문제)의 경우 추가 버퍼링 지연을 추가하세요.

사용 예시

최종적으로, 구현은 다음과 같을 수 있습니다:

스트리밍 사운드 웨이브 사용 예시

On Populate Audio State

OnPopulateAudioState 델리게이트는 OnPopulateAudioData와 유사하게 작동하지만, 채워진 오디오 데이터를 브로드캐스트하지 않습니다. 이는 채워진 오디오 데이터의 배열을 전달하지 않고도 오디오 데이터가 채워진 시점을 추적하고자 할 때 유용하며, 성능 향상에 도움이 될 수 있습니다.

On Populate Audio State delegate

PCM 데이터 작업

재생 중 PCM 데이터에 실시간으로 접근하려면 PCM 데이터 처리를 참조하세요.