Offline Rendering
The Wwise Sound Engine offers offline rendering that allows for non-real-time, compute-intensive audio generation and the synchronization of audio processing with compute-intensive video generation.
An audio capture callback can be registered using AK::SoundEngine::RegisterCaptureCallback
, which provides a mechanism for accessing the rendered audio buffers.
The following is an example that illustrates one possible implementation of offline rendering:
namespace VideoCaptureServices
{
void Initialize();
void Finalize();
void CaptureSingleFrame();
}
namespace AudioCaptureServices
{
void Initialize(unsigned in_uSampleRate, unsigned in_uChannels);
void Finalize();
void CaptureInterleavedSamples(float* in_pfSamples, unsigned in_uSampleCount);
}
class GameInterface
{
public:
virtual void UpdateCallback(float deltaTime
) = 0;
};
class Game : public GameInterface
{
private:
bool m_bIsOfflineRendering{ false };
{
const unsigned uSampleCount =
static_cast<unsigned>(in_CaptureBuffer.
uValidFrames) * in_CaptureBuffer.
NumChannels();
if (!uSampleCount)
return;
AudioCaptureServices::CaptureInterleavedSamples(in_CaptureBuffer.
GetInterleavedData(), uSampleCount);
}
public:
)
{
const bool bWasOfflineRendering{ m_bIsOfflineRendering };
m_bIsOfflineRendering = bIsOfflineRendering;
if (m_bIsOfflineRendering == bWasOfflineRendering)
return;
if (m_bIsOfflineRendering)
{
VideoCaptureServices::Initialize();
AudioCaptureServices::Initialize(uSampleRate, surroundConfig.
uNumChannels);
}
else
{
AudioCaptureServices::Finalize();
VideoCaptureServices::Finalize();
}
}
void UpdateCallback(float deltaTime) override
{
if (m_bIsOfflineRendering)
if (m_bIsOfflineRendering)
VideoCaptureServices::CaptureSingleFrame();
}
};