본문으로 건너뛰기

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 데이터 처리를 참조하세요.