-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAudioObject.cpp
59 lines (43 loc) · 1.62 KB
/
AudioObject.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "AudioObject.h"
#include "AudioEngine.h"
#include <Audio.h>
#include "Graphics.h"
#include "Camera.h"
AudioObject::AudioObject(AudioEngine& audioEngine, std::wstring sound, float volume)
:
m_sound(L"Sounds/" + sound),
m_volume(volume),
m_soundEffect(std::make_unique<DirectX::SoundEffect>(audioEngine.Get(), m_sound.c_str())),
m_soundEffectInstance(m_soundEffect->CreateInstance(DirectX::SoundEffectInstance_Use3D)),
m_emitter(std::make_unique<DirectX::AudioEmitter>())
{
m_emitter->CurveDistanceScaler = 100.0f;
m_emitter->DopplerScaler = 0.1f; // scaling of out velocity distortion
m_emitter->SetOmnidirectional();
m_emitter->EnableDefaultMultiChannel(m_soundEffect->GetFormat()->nChannels, 10.0f);
m_emitter->pVolumeCurve = const_cast<X3DAUDIO_DISTANCE_CURVE*>(&X3DAudioDefault_LinearCurve);
m_emitter->pLFECurve = const_cast<X3DAUDIO_DISTANCE_CURVE*>(&X3DAudioDefault_LinearCurve);
m_emitter->pVolumeCurve = const_cast<X3DAUDIO_DISTANCE_CURVE*>(&X3DAudioDefault_LinearCurve);
}
AudioObject::~AudioObject()
{
}
void AudioObject::Update(GFX& gfx, float deltatime)
{
DirectX::XMVECTOR positionvec = {0.0f, 0.0f, 0.0f, 0.0f};
DirectX::XMVECTOR upvec = {0.0f, 1.0f, 0.0f, 0.0f};
positionvec = DirectX::XMLoadFloat3(&m_position);
m_emitter->Update(positionvec, upvec, deltatime);
m_soundEffectInstance->Apply3D(*gfx.GetActiveCamera()->GetListener().Get(), *m_emitter);
m_soundEffectInstance->Play(true);
}
void AudioObject::RenderThisObjectOnScene() const noexcept(!IS_DEBUG)
{
}
void AudioObject::LinkSceneObjectToPipeline(RenderGraph& renderGraph)
{
}
const char* AudioObject::GetName() const
{
return "AudioObject";
}