Files
XCEngine/MVS/Music fluctuations/source/audio/AudioEngine.h

47 lines
1.5 KiB
C
Raw Normal View History

#pragma once
#include <iostream>
#include <Windows.h>
#include <mmsystem.h>
#include <thread>
#include <chrono>
#include"AudioSource.h"
#include"AudioConfig.h"
#pragma comment(lib, "winmm.lib")
class AudioEngine
{
public:
AudioEngine();
~AudioEngine();
void Update(double p_deltaTime);
void InitAudioEngine();
void ExitAudioEngine();
void SubmitSource(AudioSource* p_audioSource);
private:
MMRESULT InitAudioThread();
void InitWavFormat();
MMRESULT InitDevice();
MMRESULT InitWavHeader();
MMRESULT PlayFrontData();
void PrepareBackData();
void SwapBuffer();
void OnAudioCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
static void CALLBACK StaticAudioCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
private:
bool m_isRunning = false; //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
std::thread m_audioThread; //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>߳<EFBFBD>
AudioSource* m_audioSource{ nullptr }; //TODO::ÿ<><C3BF>play<61><79>ʱ<EFBFBD>򶼵<EFBFBD><F2B6BCB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
short m_audioBuffer1[AUDIO_BUFFER_SIZE] = { 0 }; //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
short m_audioBuffer2[AUDIO_BUFFER_SIZE] = { 0 }; //<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
bool m_isBuffer1Front = true; //<2F><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfront
bool m_isFBufferUsing = false; //FBuffer-Front Buffer
bool m_isBBufferPrepared = false; //BBuffer-Back Buffer
HWAVEOUT m_hWaveOut; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD>
WAVEFORMATEX m_waveFormat;
WAVEHDR m_waveHeader1;
WAVEHDR m_waveHeader2;
std::vector<WAVEOUTCAPS> m_waveOutCaps; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>
};