diff options
author | Nikolay Korolev <nickvnuk@gmail.com> | 2021-02-14 18:09:16 +0100 |
---|---|---|
committer | Nikolay Korolev <nickvnuk@gmail.com> | 2021-02-14 18:09:16 +0100 |
commit | 3d90a146d8d6d4d9a1354fac5e5368af252ccbaf (patch) | |
tree | 957967841f4b72f7ae35bfc66223c9e335935b72 | |
parent | fail (diff) | |
parent | (Test) Try to fix streams stop after a while (diff) | |
download | re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.tar re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.tar.gz re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.tar.bz2 re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.tar.lz re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.tar.xz re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.tar.zst re3-3d90a146d8d6d4d9a1354fac5e5368af252ccbaf.zip |
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | src/audio/oal/stream.cpp | 11 | ||||
-rw-r--r-- | src/audio/oal/stream.h | 2 |
3 files changed, 10 insertions, 5 deletions
@@ -1,7 +1,7 @@ <img src="https://github.com/GTAmodding/re3/blob/miami/logo.png?raw=true" alt="reVC logo" width="200"> [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmiami&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=miami) -<a href="https://discord.gg/7yyJtQZ93N"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a> +<a href="https://discord.gg/ERYg58ttcE"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a> ## Intro diff --git a/src/audio/oal/stream.cpp b/src/audio/oal/stream.cpp index 4817d6d5..8f074fb4 100644 --- a/src/audio/oal/stream.cpp +++ b/src/audio/oal/stream.cpp @@ -1152,6 +1152,7 @@ void CStream::SetPan(uint8 nPan) m_nPan = nPan; } +// Should only be called if source is stopped void CStream::SetPosMS(uint32 nPos) { if ( !IsOpened() ) return; @@ -1234,12 +1235,16 @@ void CStream::ClearBuffers() alSourceUnqueueBuffers(m_pAlSources[1], 1, &value); } -bool CStream::Setup() +bool CStream::Setup(bool imSureQueueIsEmpty) { if ( IsOpened() ) { alSourcei(m_pAlSources[0], AL_LOOPING, AL_FALSE); alSourcei(m_pAlSources[1], AL_LOOPING, AL_FALSE); + if (!imSureQueueIsEmpty) { + SetPlay(false); + ClearBuffers(); + } m_pSoundFile->Seek(0); //SetPosition(0.0f, 0.0f, 0.0f); SetPitch(1.0f); @@ -1343,7 +1348,7 @@ void CStream::Update() // We should wait queue to be cleared to loop track, because position calculation relies on queue. if (m_nLoopCount != 1 && m_bActive && totalBuffers[0] == 0) { - Setup(); + Setup(true); buffersRefilled = FillBuffers() != 0; if (m_nLoopCount != 0) m_nLoopCount--; @@ -1376,7 +1381,7 @@ void CStream::ProviderInit() { if ( m_bReset ) { - if ( Setup() ) + if ( Setup(true) ) { SetPan(m_nPan); SetVolume(m_nVolume); diff --git a/src/audio/oal/stream.h b/src/audio/oal/stream.h index b3e96809..9a2a2fbe 100644 --- a/src/audio/oal/stream.h +++ b/src/audio/oal/stream.h @@ -100,7 +100,7 @@ public: uint32 GetPosMS(); uint32 GetLengthMS(); - bool Setup(); + bool Setup(bool imSureQueueIsEmpty = false); void Start(); void Stop(); void Update(void); |