Audio: Add support for AL_SOFT_source_latency

This commit is contained in:
SirLynix
2022-05-08 13:20:55 +02:00
parent b8b0057ca3
commit 4794073b73
7 changed files with 68 additions and 14 deletions

View File

@@ -20,6 +20,7 @@ namespace OpenALDetail
{
#include <AL/al.h>
#include <AL/alc.h>
#include <AL/alext.h>
}
// If someone has a better idea ...
@@ -37,6 +38,10 @@ using OpenALDetail::ALuint;
using OpenALDetail::ALushort;
using OpenALDetail::ALvoid;
// SOFT_source_latency
using OpenALDetail::ALint64SOFT;
using OpenALDetail::ALuint64SOFT;
using OpenALDetail::ALCboolean;
using OpenALDetail::ALCbyte;
using OpenALDetail::ALCchar;
@@ -53,7 +58,7 @@ using OpenALDetail::ALCuint;
using OpenALDetail::ALCushort;
using OpenALDetail::ALCvoid;
#define NAZARA_AUDIO_FOREACH_AL_FUNC(cb) \
#define NAZARA_AUDIO_FOREACH_AL_FUNC(cb, extCb) \
cb(alBuffer3f, OpenALDetail::LPALBUFFER3F) \
cb(alBuffer3i, OpenALDetail::LPALBUFFER3I) \
cb(alBufferData, OpenALDetail::LPALBUFFERDATA) \
@@ -126,9 +131,22 @@ using OpenALDetail::ALCvoid;
cb(alSourceStop, OpenALDetail::LPALSOURCESTOP) \
cb(alSourceStopv, OpenALDetail::LPALSOURCESTOPV) \
cb(alSourceUnqueueBuffers, OpenALDetail::LPALSOURCEUNQUEUEBUFFERS) \
cb(alSpeedOfSound, OpenALDetail::LPALSPEEDOFSOUND)
cb(alSpeedOfSound, OpenALDetail::LPALSPEEDOFSOUND) \
/* AL_SOFT_source_latency */ \
extCb(alGetSource3dSOFT, OpenALDetail::LPALGETSOURCE3DSOFT) \
extCb(alGetSource3i64SOFT, OpenALDetail::LPALGETSOURCE3I64SOFT) \
extCb(alGetSourcedSOFT, OpenALDetail::LPALGETSOURCEDSOFT) \
extCb(alGetSourcedvSOFT, OpenALDetail::LPALGETSOURCEDVSOFT) \
extCb(alGetSourcei64SOFT, OpenALDetail::LPALGETSOURCEI64SOFT) \
extCb(alGetSourcei64vSOFT, OpenALDetail::LPALGETSOURCEI64VSOFT) \
extCb(alSource3dSOFT, OpenALDetail::LPALSOURCE3DSOFT) \
extCb(alSource3i64SOFT, OpenALDetail::LPALSOURCE3I64SOFT) \
extCb(alSourcedSOFT, OpenALDetail::LPALSOURCEDSOFT) \
extCb(alSourcedvSOFT, OpenALDetail::LPALSOURCEDVSOFT) \
extCb(alSourcei64SOFT, OpenALDetail::LPALSOURCEI64SOFT) \
extCb(alSourcei64vSOFT, OpenALDetail::LPALSOURCEI64VSOFT) \
#define NAZARA_AUDIO_FOREACH_ALC_FUNC(cb) \
#define NAZARA_AUDIO_FOREACH_ALC_FUNC(cb, extCb) \
cb(alcCaptureCloseDevice, OpenALDetail::LPALCCAPTURECLOSEDEVICE) \
cb(alcCaptureOpenDevice, OpenALDetail::LPALCCAPTUREOPENDEVICE) \
cb(alcCaptureSamples, OpenALDetail::LPALCCAPTURESAMPLES) \

View File

@@ -14,6 +14,7 @@
#include <Nazara/Audio/Config.hpp>
#include <Nazara/Audio/Enums.hpp>
#include <Nazara/Audio/OpenAL.hpp>
#include <Nazara/Core/Algorithm.hpp>
#include <Nazara/Core/MovablePtr.hpp>
#include <array>
#include <string>
@@ -22,6 +23,15 @@ namespace Nz
{
class OpenALLibrary;
enum class OpenALExtension
{
SourceLatency,
Max = SourceLatency
};
constexpr std::size_t OpenALExtensionCount = static_cast<std::size_t>(OpenALExtension::Max) + 1;
class NAZARA_AUDIO_API OpenALDevice : public AudioDevice
{
friend OpenALLibrary;
@@ -44,6 +54,7 @@ namespace Nz
float GetSpeedOfSound() const override;
const void* GetSubSystemIdentifier() const override;
inline bool IsExtensionSupported(OpenALExtension extension) const;
bool IsFormatSupported(AudioFormat format) const override;
void MakeContextCurrent() const;
@@ -62,6 +73,7 @@ namespace Nz
private:
std::array<ALenum, AudioFormatCount> m_audioFormatValues;
std::array<bool, OpenALExtensionCount> m_extensionStatus;
std::string m_renderer;
std::string m_vendor;
OpenALLibrary& m_library;

View File

@@ -8,6 +8,11 @@
namespace Nz
{
inline bool OpenALDevice::IsExtensionSupported(OpenALExtension extension) const
{
return m_extensionStatus[UnderlyingCast(extension)];
}
inline ALenum OpenALDevice::TranslateAudioFormat(AudioFormat format) const
{
return m_audioFormatValues[UnderlyingCast(format)];

View File

@@ -43,8 +43,8 @@ namespace Nz
OpenALLibrary& operator=(OpenALLibrary&&) = delete;
#define NAZARA_AUDIO_FUNC(name, sig) sig name;
NAZARA_AUDIO_FOREACH_AL_FUNC(NAZARA_AUDIO_FUNC)
NAZARA_AUDIO_FOREACH_ALC_FUNC(NAZARA_AUDIO_FUNC)
NAZARA_AUDIO_FOREACH_AL_FUNC(NAZARA_AUDIO_FUNC, NAZARA_AUDIO_FUNC)
NAZARA_AUDIO_FOREACH_ALC_FUNC(NAZARA_AUDIO_FUNC, NAZARA_AUDIO_FUNC)
#undef NAZARA_AUDIO_FUNC
private: