58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
#pragma once
|
|
#include<Windows.h>
|
|
#include"AudioClip.h"
|
|
#include"WavFileReader.h"
|
|
#include"AudioConfig.h"
|
|
#include"../global/Base.h"
|
|
#include"../audio3d/FFTFilter.h"
|
|
#include"../audio3d/Reberation.h"
|
|
#include"../audio3d/HRTF.h"
|
|
#pragma comment(lib,"winmm.lib")
|
|
|
|
class AudioSource
|
|
{
|
|
public:
|
|
AudioSource();
|
|
~AudioSource();
|
|
void Play();
|
|
void Load(AudioClip* p_clip);
|
|
void Update(double p_deltaTime);
|
|
void StartEnergyDetect();
|
|
void CloseEnergyDetect();
|
|
float GetEnergy();
|
|
short* GetBufferData();
|
|
void PrepareBufferData();
|
|
void SetDirection(int p_elevation, int p_azimuth);
|
|
|
|
bool IsActive() { return m_isActive; }
|
|
private:
|
|
void HRTFInitialize();
|
|
void ApplyFadeWindow(const std::vector<float>& p_block_last, const std::vector<float>& p_block_next, std::vector<float>* p_fade_result);
|
|
private:
|
|
AudioClip* m_audioClip{nullptr};
|
|
WavFileReader* m_wavReader{ nullptr };
|
|
double m_lastingTime = 0;
|
|
bool m_isActive = false;
|
|
bool m_isLoaded = false;
|
|
bool m_isEnergyDetecting = 0;
|
|
long long m_avergeEnergy = 0;
|
|
int m_avergeOldIndex = 0;
|
|
long long m_thisEnergy = 0;
|
|
float m_thisEnergyScale = 0;
|
|
float m_maxEnergyScale = 5.;
|
|
float m_energyRate = 0;
|
|
std::deque<long long> m_historyEnergys{};
|
|
const static int m_bufferSize = AUDIO_BUFFER_SIZE;
|
|
short m_buffer[m_bufferSize] = { 0 };
|
|
int m_sampleIndex = 0;
|
|
|
|
int m_elevation = 0;
|
|
int m_azimuth = 0;
|
|
|
|
FFTFilter m_filter;
|
|
Reberation m_reberation;
|
|
HRTF m_hrtf;
|
|
FFTFilter m_hrtf_filter_L;
|
|
FFTFilter m_hrtf_filter_R;
|
|
std::vector<float> m_fade_window;
|
|
}; |