Files
Client/Engine/SoundLib/EAXBuffer.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

277 lines
6.0 KiB
C++

// CEAXBuffer.cpp: implementation of the CCEAXBuffer class.
//
//////////////////////////////////////////////////////////////////////
#include "DefineSound.h"
#include "EAXBuffer.h"
#include "GMMemory.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CEAXBuffer::CEAXBuffer()
{
m_pPropertySet = 0;
m_Props.lDirect = EAXBUFFER_DEFAULTDIRECT;
m_Props.lDirectHF = EAXBUFFER_DEFAULTDIRECTHF;
m_Props.lRoom = EAXBUFFER_DEFAULTROOM;
m_Props.lRoomHF = EAXBUFFER_DEFAULTROOMHF;
m_Props.flRoomRolloffFactor = EAXBUFFER_DEFAULTROOMROLLOFFFACTOR;
m_Props.lObstruction = EAXBUFFER_DEFAULTOBSTRUCTION;
m_Props.flObstructionLFRatio = EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO;
m_Props.lOcclusion = EAXBUFFER_DEFAULTOCCLUSION;
m_Props.flOcclusionLFRatio = EAXBUFFER_DEFAULTOCCLUSIONLFRATIO;
m_Props.flOcclusionRoomRatio = EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO;
m_Props.lOutsideVolumeHF = EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF;
m_Props.flAirAbsorptionFactor = EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR;
m_Props.dwFlags = EAXBUFFER_DEFAULTFLAGS;
}
CEAXBuffer::~CEAXBuffer()
{
Destroy();
}
bool CEAXBuffer::Create( IUnknown* pUnknown )
{
if(!pUnknown)
return false;
HRESULT hr = pUnknown->QueryInterface(IID_IKsPropertySet, (void**)&m_pPropertySet);
if(FAILED(hr))
return false;
DWORD nSupport = 0;
hr = m_pPropertySet->QuerySupport(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
&nSupport);
if((nSupport != (KSPROPERTY_SUPPORT_GET |
KSPROPERTY_SUPPORT_SET)))
{
SAFE_RELEASE(m_pPropertySet);
return false;
}
hr = m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
0,
0,
(void*)(&m_Props),
sizeof(EAXBUFFERPROPERTIES));
if(FAILED(hr))
{
SAFE_RELEASE(m_pPropertySet);
return false;
}
return true;
}
void CEAXBuffer::Destroy()
{
SAFE_RELEASE(m_pPropertySet);
}
void CEAXBuffer::SetDirect(int iDirect)
{
m_Props.lDirect = iDirect;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_DIRECT,
0,
0,
&iDirect,
sizeof(int));
}
void CEAXBuffer::SetDirectHF(int iDirectHF)
{
m_Props.lDirectHF = iDirectHF;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_DIRECTHF,
0,
0,
&iDirectHF,
sizeof(int));
}
void CEAXBuffer::SetRoom(int iRoom)
{
m_Props.lRoom = iRoom;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ROOM,
0,
0,
&iRoom,
sizeof(int));
}
void CEAXBuffer::SetRoomHF(int iRoomHF)
{
m_Props.lRoomHF = iRoomHF;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ROOMHF,
0,
0,
&iRoomHF,
sizeof(int));
}
void CEAXBuffer::SetRoomRolloffFactor(float fRoomRolloffFactor)
{
m_Props.flRoomRolloffFactor = fRoomRolloffFactor;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR,
0,
0,
&fRoomRolloffFactor,
sizeof(float));
}
void CEAXBuffer::SetObstruction(int iObstruction)
{
m_Props.lObstruction = iObstruction;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_OBSTRUCTION,
0,
0,
&iObstruction,
sizeof(int));
}
void CEAXBuffer::SetObstructionLFRatio(float fObstructionLFRatio)
{
m_Props.flObstructionLFRatio = fObstructionLFRatio;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO,
0,
0,
&fObstructionLFRatio,
sizeof(float));
}
void CEAXBuffer::SetOcclusion(int iOcclusion)
{
m_Props.lOcclusion = iOcclusion;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_OCCLUSION,
0,
0,
&iOcclusion,
sizeof(int));
}
void CEAXBuffer::SetOcclusionLFRatio(float fOcclusionLFRatio)
{
m_Props.flOcclusionLFRatio = fOcclusionLFRatio;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO,
0,
0,
&fOcclusionLFRatio,
sizeof(float));
}
void CEAXBuffer::SetOcclusionRoomRatio(float fOcclusionRoomRatio)
{
m_Props.flOcclusionRoomRatio = fOcclusionRoomRatio;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO,
0,
0,
&fOcclusionRoomRatio,
sizeof(float));
}
void CEAXBuffer::SetOutsideVolumeHF(int iOutsideVolumeHF)
{
m_Props.lOutsideVolumeHF = iOutsideVolumeHF;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF,
0,
0,
&iOutsideVolumeHF,
sizeof(int));
}
void CEAXBuffer::SetAirAbsorptionFactor(float fAirAbsorptionFactor)
{
m_Props.flAirAbsorptionFactor = fAirAbsorptionFactor;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR,
0,
0,
&fAirAbsorptionFactor,
sizeof(float));
}
void CEAXBuffer::SetFlags(DWORD nFlags)
{
m_Props.dwFlags = nFlags;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_FLAGS,
0,
0,
&nFlags,
sizeof(DWORD));
}
void CEAXBuffer::SetProperties(const EAXBUFFERPROPERTIES& props)
{
m_Props = props;
if(!m_pPropertySet) return;
m_pPropertySet->Set(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
0,
0,
(void*)(&props),
sizeof(EAXBUFFERPROPERTIES));
}
void CEAXBuffer::GetProperties(EAXBUFFERPROPERTIES& props)
{
/*
DWORD nSize;
if(m_pPropertySet)
{
m_pPropertySet->Get(
DSPROPSETID_EAX20_BufferProperties,
DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
0,
0,
&m_Props,
sizeof(EAXBUFFERPROPERTIES),
&nSize);
}*/
props = m_Props;
}