#ifndef FAUDIOFILTERDEMO_AUDIO_H #define FAUDIOFILTERDEMO_AUDIO_H #include #include #include "../wavcommon/wavs.h" #ifdef _MSC_VER #define HAVE_XAUDIO2 #endif const uint32_t SAMPLERATE = 44100; // types struct AudioContext; enum AudioEngine { AudioEngine_XAudio2, AudioEngine_FAudio }; enum AudioVoiceType { AudioVoiceType_Source = 0, AudioVoiceType_Submix, AudioVoiceType_Master }; #pragma pack(push, 1) struct ReverbI3DL2Parameters { float WetDryMix; int Room; int RoomHF; float RoomRolloffFactor; float DecayTime; float DecayHFRatio; int Reflections; float ReflectionsDelay; int Reverb; float ReverbDelay; float Diffusion; float Density; float HFReference; }; struct ReverbParameters { float WetDryMix; uint32_t ReflectionsDelay; uint8_t ReverbDelay; uint8_t RearDelay; uint8_t PositionLeft; uint8_t PositionRight; uint8_t PositionMatrixLeft; uint8_t PositionMatrixRight; uint8_t EarlyDiffusion; uint8_t LateDiffusion; uint8_t LowEQGain; uint8_t LowEQCutoff; uint8_t HighEQGain; uint8_t HighEQCutoff; float RoomFilterFreq; float RoomFilterMain; float RoomFilterHF; float ReflectionsGain; float ReverbGain; float DecayTime; float Density; float RoomSize; }; #pragma pack(pop) extern const char *audio_voice_type_names[3]; extern const char *audio_reverb_preset_names[]; extern const ReverbI3DL2Parameters audio_reverb_presets_i3dl2[]; extern const ReverbParameters *audio_reverb_presets; extern const size_t audio_reverb_preset_count; typedef void (*PFN_AUDIO_DESTROY_CONTEXT)(AudioContext *p_context); typedef void (*PFN_AUDIO_CREATE_VOICE)(AudioContext *p_context, float *p_buffer, size_t p_buffer_size, int p_sample_rate, int p_num_channels); typedef void (*PFN_AUDIO_WAVE_LOAD)(AudioContext *p_context, AudioSampleWave sample, bool stereo); typedef void (*PFN_AUDIO_WAVE_PLAY)(AudioContext *p_context); typedef void (*PFN_AUDIO_WAVE_STOP)(AudioContext *p_context); typedef void(*PFN_AUDIO_EFFECT_CHANGE)(AudioContext *p_context, bool p_enabled, ReverbParameters *p_params); // API AudioContext *audio_create_context(AudioEngine p_engine, bool output_5p1, AudioVoiceType effect_on_voice); extern PFN_AUDIO_DESTROY_CONTEXT audio_destroy_context; extern PFN_AUDIO_CREATE_VOICE audio_create_voice; extern PFN_AUDIO_WAVE_LOAD audio_wave_load; extern PFN_AUDIO_WAVE_PLAY audio_wave_play; extern PFN_AUDIO_WAVE_STOP audio_wave_stop; extern PFN_AUDIO_EFFECT_CHANGE audio_effect_change; #endif // FAUDIOFILTERDEMO_AUDIO_H