MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / play3D

Method play3D

Source/Node/AudioSource.cpp:209–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

207}
208
209bool AudioSource::play3D(double delayTime) {
210 AssertIf(_flags.isOn(Node::Cleanup), "can not operate on an invalid AudioSource");
211 if (_handle != 0 && SharedAudio.isVoicePlaying(_handle)) {
212 return false;
213 }
214 _is3D = true;
215 if (auto audioFile = SharedAudioCache.load(_filename)) {
216 uint32_t busHandle = _bus ? _bus->getHandle() : 0;
217 Vec4 point;
218 Matrix::mulVec4(point, getWorld(), {0.0f, 0.0f, 0.0f, 1.0f});
219 auto soloud = SharedAudio.getSoLoud();
220 if (delayTime < 0) {
221 _handle = soloud->play3d(*audioFile->getSource(), point.x, point.y, point.z, 0.0f, 0.0f, 0.0f, _volume, false, busHandle);
222 } else {
223 _handle = soloud->play3dClocked(delayTime, *audioFile->getSource(), point.x, point.y, point.z, 0.0f, 0.0f, 0.0f, _volume, busHandle);
224 }
225 soloud->setInaudibleBehavior(_handle, true, false);
226 if (_protected) {
227 soloud->setProtectVoice(_handle, true);
228 }
229 if (_playSpeed != 1.0f) {
230 soloud->setRelativePlaySpeed(_handle, _playSpeed);
231 }
232 if (_loopStartTime > 0.0) {
233 soloud->setLoopPoint(_handle, _loopStartTime);
234 }
235 soloud->set3dSourceVelocity(_handle, _velocity.x, _velocity.y, _velocity.z);
236 soloud->set3dSourceMinMaxDistance(_handle, _minDistance, _maxDistance);
237 soloud->set3dSourceAttenuation(_handle, _attenuation, _attenuationFactor);
238 soloud->set3dSourceDopplerFactor(_handle, _dopplerFactor);
239 WRef<AudioSource> self(this);
240 SharedAudio.addRef(_handle, audioFile, [self](uint32_t handle) {
241 if (self && self->_handle == handle) {
242 self->_handle = 0;
243 self->emit("AudioEnd"sv, handle);
244 if (self->_autoRemove) {
245 self->removeFromParent();
246 }
247 }
248 });
249 return true;
250 }
251 return false;
252}
253
254void AudioSource::setLoopPoint(double loopStartTime) {
255 _loopStartTime = loopStartTime;

Callers 4

patchAudioSourcePropsFunction · 0.80
audiosource_play_3dFunction · 0.80

Calls 15

isOnMethod · 0.80
isVoicePlayingMethod · 0.80
getSoLoudMethod · 0.80
setProtectVoiceMethod · 0.80
setRelativePlaySpeedMethod · 0.80
set3dSourceVelocityMethod · 0.80
addRefMethod · 0.80
removeFromParentMethod · 0.80
loadMethod · 0.65

Tested by

no test coverage detected