AudioRender/AudioRender/Windows/WavAudioRender.h
2024-10-14 22:54:55 +08:00

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 };
};