47 lines
1.5 KiB
C
47 lines
1.5 KiB
C
|
|
#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>豸
|
|||
|
|
};
|