Files
UnrealEngine/Engine/Source/Runtime/Windows/AudioMixerWasapi/Private/WasapiDefaultRenderStream.h
2025-05-18 13:04:45 +08:00

56 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "AudioMixerWasapiRenderStream.h"
DECLARE_DELEGATE(FAudioMixerReadNextBufferDelegate);
namespace Audio
{
/**
* FWasapiDefaultRenderStream
* The default channel output stream. This is the first eight channels
* which are reserved for the main outputs of the editor/game.
*/
class FWasapiDefaultRenderStream : public FAudioMixerWasapiRenderStream
{
public:
virtual ~FWasapiDefaultRenderStream() = default;
//~ Begin FAudioMixerWasapiRenderStream
virtual bool InitializeHardware(const FWasapiRenderStreamParams& InParams) override;
virtual bool TeardownHardware() override;
virtual void SubmitBuffer(const uint8* Buffer, const SIZE_T InNumFrames) override;
//~ End FAudioMixerWasapiRenderStream
//~ Begin IDeviceRenderCallback
virtual void DeviceRenderCallback() override;
//~ End IDeviceRenderCallback
FAudioMixerReadNextBufferDelegate& OnReadNextBuffer() { return ReadNextBufferDelegate; }
private:
/** Number of frames to write every Wasapi period (must be at least the minimum required for current driver) */
int32 WriteNumFrames = 0;
/** Total number of bytes per audio buffer copied to Wasapi each buffer period. */
SIZE_T AudioBufferTotalBytes = 0;
/** Number of bytes per partial buffer where a partial buffer is used when the engine buffer size
* is less than the Wasapi drivers buffer size. */
SIZE_T PartialBufferNumBytes = 0;
/** Number of partial buffers needed to create a full Wasapi buffer. Used for buffer sizes smaller than the minimum for the current driver. */
int32 NumPartialBuffersToWrite = 0;
/** Delegate called each buffer callback to signal the mixer to process the next buffer. */
FAudioMixerReadNextBufferDelegate ReadNextBufferDelegate;
/** Pointer to WASAPI render audio buffer filled in each callback by the mixer in SubmitBuffer(). */
TArrayView<uint8> RenderBufferView;
};
}