33 lines
788 B
C++
33 lines
788 B
C++
#pragma once
|
|
|
|
#include "AudioRenderStd.h"
|
|
|
|
#include "Windows/SectionLock.h"
|
|
|
|
class WavAudioRender : public AudioRenderStd {
|
|
public:
|
|
explicit WavAudioRender(LogCallback callback) noexcept;
|
|
~WavAudioRender() override;
|
|
|
|
bool Write(const AudioFrame& audioFrame) override;
|
|
|
|
private:
|
|
static void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance,
|
|
DWORD_PTR dwParam1, DWORD_PTR dwParam2);
|
|
void FreeBlock();
|
|
|
|
private:
|
|
int64_t audioPts_{ 0 };
|
|
|
|
static constexpr int BlockSize_{ 3200 };
|
|
static constexpr int BlockCount_{ 10 };
|
|
|
|
SectionLock lock_;
|
|
uint32 freeBlockCounter_{ BlockCount_ };
|
|
uint32 waveCurrentBlock_{ 0 };
|
|
|
|
WAVEHDR* waveBlocks_{ nullptr };
|
|
HWAVEOUT hWavout_{ nullptr };
|
|
bool initialized_{ false };
|
|
};
|