Move kissfft to engine/third_party and add AudioMixer class
This commit is contained in:
56
engine/include/XCEngine/Audio/AudioMixer.h
Normal file
56
engine/include/XCEngine/Audio/AudioMixer.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Audio/AudioTypes.h>
|
||||
#include <XCEngine/Math/Vector3.h>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Audio {
|
||||
|
||||
class IAudioEffect;
|
||||
|
||||
class AudioMixer {
|
||||
public:
|
||||
AudioMixer();
|
||||
~AudioMixer();
|
||||
|
||||
void SetVolume(float volume);
|
||||
float GetVolume() const { return m_volume; }
|
||||
|
||||
void SetMute(bool mute);
|
||||
bool IsMute() const { return m_mute; }
|
||||
|
||||
void AddEffect(IAudioEffect* effect);
|
||||
void RemoveEffect(IAudioEffect* effect);
|
||||
void ClearEffects();
|
||||
|
||||
void ProcessAudio(float* buffer, uint32 sampleCount, uint32 channels);
|
||||
|
||||
void SetOutputMixer(AudioMixer* mixer);
|
||||
AudioMixer* GetOutputMixer() const { return m_outputMixer; }
|
||||
|
||||
void Set3DParams(const Audio3DParams& params);
|
||||
const Audio3DParams& Get3DParams() const { return m_3DParams; }
|
||||
|
||||
struct ChannelVolume {
|
||||
float volume = 1.0f;
|
||||
bool mute = false;
|
||||
};
|
||||
void SetChannelVolume(AudioChannel channel, float volume);
|
||||
float GetChannelVolume(AudioChannel channel) const;
|
||||
|
||||
private:
|
||||
float m_volume = 1.0f;
|
||||
bool m_mute = false;
|
||||
|
||||
Audio3DParams m_3DParams;
|
||||
AudioMixer* m_outputMixer = nullptr;
|
||||
|
||||
std::vector<IAudioEffect*> m_effects;
|
||||
std::map<AudioChannel, ChannelVolume> m_channelVolumes;
|
||||
};
|
||||
|
||||
} // namespace Audio
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user