OpenBarnyard
 
Loading...
Searching...
No Matches
AWaveBankFMODFSBStream.cpp
Go to the documentation of this file.
1#include "pch.h"
3#include "ASoundManager.h"
4#include "ALoadScreen.h"
5
7
8#include <fmod/fmod.h>
9
10//-----------------------------------------------------------------------------
11// Enables memory debugging.
12// Note: Should be the last include!
13//-----------------------------------------------------------------------------
14#include "Core/TMemoryDebugOn.h"
15
17
19 : AWaveBank( a_strBank, a_strPath, TTRUE )
20{
21}
22
24{
25 return FSOUND_Stream_GetOpenState( (FSOUND_STREAM*)m_FileHandle ) == 0;
26}
27
29{
30 if ( m_iNumLoads > 0 || m_FileHandle != TNULL )
31 {
33 return LOADRESULT_OK;
34 }
35
36 TString8 strFileName;
38 strFileName += "FSB/";
39
40 strFileName += m_strPath.GetString8();
41 strFileName += ".";
42 strFileName += "fsb";
43
45
46 TNativeFileInfo oFileInfo;
47 TBOOL bGotFileInfo = pFileManager->GetFileInfo( strFileName, oFileInfo );
48
49 TASSERT( TTRUE == bGotFileInfo );
50
51 TINT iBufferSize = ( a_iBufferSize <= 0 ) ? 2000 : a_iBufferSize;
52 FSOUND_Stream_SetBufferSize( TINT( iBufferSize ) );
53
54 // Open the FSB stream
55 TUINT uiStreamOpenMode =
56 ( FSOUND_NONBLOCKING | FSOUND_SIGNED | FSOUND_MONO | FSOUND_16BITS ) |
57 ( ( m_pWaves->iFlags & 2 ) ? FSOUND_HW3D : FSOUND_HW2D );
58
59 FSOUND_STREAM* pStream = FSOUND_Stream_Open( oFileInfo.InternalPath, uiStreamOpenMode, oFileInfo.Offset, oFileInfo.Length );
60 TVALIDPTR( pStream );
61
62 if ( pStream != TNULL )
63 {
64 // Update ALoadScreen if neccessary
66 {
67 TINT iOpenState = FSOUND_Stream_GetOpenState( pStream );
68 while ( iOpenState == -2 )
69 {
70 g_oLoadScreen.Update();
71#ifndef BARNYARD_COMMUNITY_PATCH
72 ThreadSleep( 5 );
73#endif // BARNYARD_COMMUNITY_PATCH
74 iOpenState = FSOUND_Stream_GetOpenState( pStream );
75 }
76 }
77
78 // Store info about the samples
79
80 m_iNumLoads += 1;
81 m_FileHandle = pStream;
82
83 for ( TINT i = 0; i < m_iNumWaves; i++ )
84 {
85 AWave* pWave = &m_pWaves[ i ];
86 pWave->iIndex = i;
87 pWave->pSampleHandle = pStream;
88 pWave->iFlags |= ( 4 | 8 );
89 }
90
91 return LOADRESULT_OK;
92 }
93
94 return LOADRESULT_ERR;
95}
96
98{
99 if ( m_iNumLoads != 0 && --m_iNumLoads < 1 && m_FileHandle )
100 {
101 m_iNumLoads = 0;
102
103 FSOUND_STREAM* pStream = (FSOUND_STREAM*)m_FileHandle;
104
105 TINT iOpenState = FSOUND_Stream_GetOpenState( pStream );
106 while ( iOpenState == -2 )
107 {
108#ifndef BARNYARD_COMMUNITY_PATCH
109 ThreadSleep( 5 );
110#endif // BARNYARD_COMMUNITY_PATCH
111 iOpenState = FSOUND_Stream_GetOpenState( pStream );
112 }
113
114 FSOUND_Stream_Close( pStream );
115
116 // Reset the waves
117 for ( TINT i = 0; i < m_iNumWaves; i++ )
118 {
119 AWave* pWave = &m_pWaves[ i ];
120 pWave->pSampleHandle = TNULL;
121 pWave->iIndex = -1;
122 pWave->iFlags &= ~( 4 | 8 );
123 }
124
126 }
127
128 return UNLOADRESULT_OK;
129}
#define TASSERT(X,...)
Definition Defines.h:138
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TVALIDPTR(PTR)
Definition Defines.h:139
unsigned int TUINT
Definition Typedefs.h:8
#define TNULL
Definition Typedefs.h:23
int TINT
Definition Typedefs.h:7
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
ALoadScreen g_oLoadScreen
void ThreadSleep(TUINT dwMilliseconds)
TString8 InternalPath
Definition TFile.h:54
TUINT32 Length
Definition TFile.h:56
TUINT32 Offset
Definition TFile.h:55
TBOOL GetFileInfo(const TString8 &a_strPath, TNativeFileInfo &a_rNativeInfo)
static TFORCEINLINE TFileManager * GetSingleton()
Definition TSingleton.h:49
static constexpr const TCHAR * SOUNDS_BASE_DIRECTORY
static TBOOL ms_bShouldUpdateLoadingScreen
Definition AWave.h:6
AWaveSampleHandle pSampleHandle
Definition AWave.h:18
TINT iIndex
Definition AWave.h:19
TINT iFlags
Definition AWave.h:15
AWave * m_pWaves
Definition AWaveBank.h:60
@ UNLOADRESULT_OK
Definition AWaveBank.h:28
TUINT32 LOADFLAGS
Definition AWaveBank.h:13
AWaveBankFileHandle m_FileHandle
Definition AWaveBank.h:61
TINT m_iNumWaves
Definition AWaveBank.h:54
Toshi::TPString8 m_strPath
Definition AWaveBank.h:57
@ LOADRESULT_OK
Definition AWaveBank.h:23
@ LOADRESULT_ERR
Definition AWaveBank.h:22
AWaveBank(const Toshi::TPString8 &a_strBank, const Toshi::TPString8 &a_strPath, TBOOL a_bSetFrequency)
Definition AWaveBank.cpp:17
TINT m_iNumLoads
Definition AWaveBank.h:55
virtual LOADRESULT Load(LOADFLAGS a_uiFlags, TINT a_iBufferSize) OVERRIDE
virtual TBOOL IsReady() const OVERRIDE
AWaveBankFMODFSBStream(const Toshi::TPString8 &a_strBank, const Toshi::TPString8 &a_strPath)
virtual UNLOADRESULT Unload() OVERRIDE