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

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