commit
57d5782588
12
.gitmodules
vendored
12
.gitmodules
vendored
@ -1,3 +1,15 @@
|
|||||||
[submodule "librw"]
|
[submodule "librw"]
|
||||||
path = librw
|
path = librw
|
||||||
url = https://github.com/aap/librw
|
url = https://github.com/aap/librw
|
||||||
|
[submodule "opus"]
|
||||||
|
path = opus
|
||||||
|
url = https://github.com/xiph/opus.git
|
||||||
|
branch = master
|
||||||
|
[submodule "opusfile"]
|
||||||
|
path = opusfile
|
||||||
|
url = https://github.com/xiph/opusfile.git
|
||||||
|
branch = master
|
||||||
|
[submodule "ogg"]
|
||||||
|
path = ogg
|
||||||
|
url = https://github.com/xiph/ogg.git
|
||||||
|
branch = master
|
||||||
|
1
ogg
Submodule
1
ogg
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 1e8d7cce266df61afc9d35db0283bbacc0237aba
|
1
opus
Submodule
1
opus
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 8aa7767207b1e3633004c26aecbb67d1c5118485
|
1
opusfile
Submodule
1
opusfile
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit eb252537f374e30f7b68b84223c5a2303c05eca2
|
32
premake5.lua
32
premake5.lua
@ -24,6 +24,11 @@ newoption {
|
|||||||
description = "Build and use librw from this solution"
|
description = "Build and use librw from this solution"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newoption {
|
||||||
|
trigger = "with-opus",
|
||||||
|
description = "Build with opus"
|
||||||
|
}
|
||||||
|
|
||||||
if(_OPTIONS["with-librw"]) then
|
if(_OPTIONS["with-librw"]) then
|
||||||
Librw = "librw"
|
Librw = "librw"
|
||||||
else
|
else
|
||||||
@ -200,10 +205,24 @@ project "re3"
|
|||||||
includedirs { "src/extras" }
|
includedirs { "src/extras" }
|
||||||
includedirs { "eax" }
|
includedirs { "eax" }
|
||||||
|
|
||||||
filter "platforms:*mss"
|
if _OPTIONS["with-opus"] then
|
||||||
defines { "AUDIO_MSS" }
|
includedirs { "ogg/include" }
|
||||||
includedirs { "milessdk/include" }
|
includedirs { "opus/include" }
|
||||||
|
includedirs { "opusfile/include" }
|
||||||
|
end
|
||||||
|
|
||||||
libdirs { "milessdk/lib" }
|
libdirs { "milessdk/lib" }
|
||||||
|
libdirs { "openal-soft/libs/Win32" }
|
||||||
|
libdirs { "mpg123/lib" }
|
||||||
|
libdirs { "libsndfile/lib" }
|
||||||
|
if _OPTIONS["with-opus"] then
|
||||||
|
filter "platforms:win*"
|
||||||
|
libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||||
|
libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" }
|
||||||
|
libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" }
|
||||||
|
filter {}
|
||||||
|
defines { "AUDIO_OPUS" }
|
||||||
|
end
|
||||||
|
|
||||||
filter "platforms:*oal"
|
filter "platforms:*oal"
|
||||||
defines { "AUDIO_OAL" }
|
defines { "AUDIO_OAL" }
|
||||||
@ -239,6 +258,13 @@ project "re3"
|
|||||||
filter "platforms:linux*oal"
|
filter "platforms:linux*oal"
|
||||||
links { "openal", "mpg123", "sndfile", "pthread" }
|
links { "openal", "mpg123", "sndfile", "pthread" }
|
||||||
|
|
||||||
|
if _OPTIONS["with-opus"] then
|
||||||
|
filter {}
|
||||||
|
links { "libogg" }
|
||||||
|
links { "opus" }
|
||||||
|
links { "opusfile" }
|
||||||
|
end
|
||||||
|
|
||||||
filter "platforms:*RW33*"
|
filter "platforms:*RW33*"
|
||||||
staticruntime "on"
|
staticruntime "on"
|
||||||
includedirs { "rwsdk/include/d3d8" }
|
includedirs { "rwsdk/include/d3d8" }
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include "sampman.h"
|
#include "sampman.h"
|
||||||
|
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
#include <opusfile.h>
|
||||||
|
#else
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
// TODO: This is due to version difference of 32-bit libmpg123 and 64-bit libmpg123, fix it
|
// TODO: This is due to version difference of 32-bit libmpg123 and 64-bit libmpg123, fix it
|
||||||
@ -17,7 +20,9 @@ typedef long ssize_t;
|
|||||||
#endif
|
#endif
|
||||||
#include <sndfile.h>
|
#include <sndfile.h>
|
||||||
#include <mpg123.h>
|
#include <mpg123.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AUDIO_OPUS
|
||||||
class CSndFile : public IDecoder
|
class CSndFile : public IDecoder
|
||||||
{
|
{
|
||||||
SNDFILE *m_pfSound;
|
SNDFILE *m_pfSound;
|
||||||
@ -177,15 +182,111 @@ public:
|
|||||||
return (uint32)size;
|
return (uint32)size;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
class COpusFile : public IDecoder
|
||||||
|
{
|
||||||
|
OggOpusFile *m_FileH;
|
||||||
|
bool m_bOpened;
|
||||||
|
uint32 m_nRate;
|
||||||
|
uint32 m_nChannels;
|
||||||
|
public:
|
||||||
|
COpusFile(const char *path) : m_FileH(nil),
|
||||||
|
m_bOpened(false),
|
||||||
|
m_nRate(0),
|
||||||
|
m_nChannels(0)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
m_FileH = op_open_file(path, &ret);
|
||||||
|
|
||||||
|
if (m_FileH) {
|
||||||
|
m_nChannels = op_head(m_FileH, 0)->channel_count;
|
||||||
|
m_nRate = op_head(m_FileH, 0)->input_sample_rate;
|
||||||
|
const OpusTags *tags = op_tags(m_FileH, 0);
|
||||||
|
for (int i = 0; i < tags->comments; i++) {
|
||||||
|
if (strncmp(tags->user_comments[i], "SAMPLERATE", sizeof("SAMPLERATE")-1) == 0)
|
||||||
|
{
|
||||||
|
sscanf(tags->user_comments[i], "SAMPLERATE=%i", &m_nRate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_bOpened = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~COpusFile()
|
||||||
|
{
|
||||||
|
if (m_FileH)
|
||||||
|
{
|
||||||
|
op_free(m_FileH);
|
||||||
|
m_FileH = nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsOpened()
|
||||||
|
{
|
||||||
|
return m_bOpened;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 GetSampleSize()
|
||||||
|
{
|
||||||
|
return sizeof(uint16);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 GetSampleCount()
|
||||||
|
{
|
||||||
|
if ( !IsOpened() ) return 0;
|
||||||
|
return op_pcm_total(m_FileH, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 GetSampleRate()
|
||||||
|
{
|
||||||
|
return m_nRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 GetChannels()
|
||||||
|
{
|
||||||
|
return m_nChannels;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Seek(uint32 milliseconds)
|
||||||
|
{
|
||||||
|
if ( !IsOpened() ) return;
|
||||||
|
op_pcm_seek(m_FileH, ms2samples(milliseconds) * GetSampleSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 Tell()
|
||||||
|
{
|
||||||
|
if ( !IsOpened() ) return 0;
|
||||||
|
return samples2ms(op_pcm_tell(m_FileH)/GetSampleSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 Decode(void *buffer)
|
||||||
|
{
|
||||||
|
if ( !IsOpened() ) return 0;
|
||||||
|
|
||||||
|
int size = op_read(m_FileH, (opus_int16 *)buffer, GetBufferSamples(), NULL);
|
||||||
|
|
||||||
|
if (size < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return size * m_nChannels * GetSampleSize();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
void CStream::Initialise()
|
void CStream::Initialise()
|
||||||
{
|
{
|
||||||
|
#ifndef AUDIO_OPUS
|
||||||
mpg123_init();
|
mpg123_init();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStream::Terminate()
|
void CStream::Terminate()
|
||||||
{
|
{
|
||||||
|
#ifndef AUDIO_OPUS
|
||||||
mpg123_exit();
|
mpg123_exit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CStream::CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUFFERS]) :
|
CStream::CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUFFERS]) :
|
||||||
@ -216,10 +317,15 @@ CStream::CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUF
|
|||||||
|
|
||||||
DEV("Stream %s\n", m_aFilename);
|
DEV("Stream %s\n", m_aFilename);
|
||||||
|
|
||||||
|
#ifndef AUDIO_OPUS
|
||||||
if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".mp3")], ".mp3"))
|
if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".mp3")], ".mp3"))
|
||||||
m_pSoundFile = new CMP3File(m_aFilename);
|
m_pSoundFile = new CMP3File(m_aFilename);
|
||||||
else if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".wav")], ".wav"))
|
else if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".wav")], ".wav"))
|
||||||
m_pSoundFile = new CSndFile(m_aFilename);
|
m_pSoundFile = new CSndFile(m_aFilename);
|
||||||
|
#else
|
||||||
|
if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".opus")], ".opus"))
|
||||||
|
m_pSoundFile = new COpusFile(m_aFilename);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
m_pSoundFile = nil;
|
m_pSoundFile = nil;
|
||||||
ASSERT(m_pSoundFile != nil);
|
ASSERT(m_pSoundFile != nil);
|
||||||
|
@ -218,6 +218,42 @@ public:
|
|||||||
extern cSampleManager SampleManager;
|
extern cSampleManager SampleManager;
|
||||||
extern uint32 BankStartOffset[MAX_SAMPLEBANKS];
|
extern uint32 BankStartOffset[MAX_SAMPLEBANKS];
|
||||||
|
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
static char StreamedNameTable[][25] = {
|
||||||
|
"AUDIO\\HEAD.OPUS", "AUDIO\\CLASS.OPUS", "AUDIO\\KJAH.OPUS", "AUDIO\\RISE.OPUS", "AUDIO\\LIPS.OPUS", "AUDIO\\GAME.OPUS",
|
||||||
|
"AUDIO\\MSX.OPUS", "AUDIO\\FLASH.OPUS", "AUDIO\\CHAT.OPUS", "AUDIO\\HEAD.OPUS", "AUDIO\\POLICE.OPUS", "AUDIO\\CITY.OPUS",
|
||||||
|
"AUDIO\\WATER.OPUS", "AUDIO\\COMOPEN.OPUS", "AUDIO\\SUBOPEN.OPUS", "AUDIO\\JB.OPUS", "AUDIO\\BET.OPUS", "AUDIO\\L1_LG.OPUS",
|
||||||
|
"AUDIO\\L2_DSB.OPUS", "AUDIO\\L3_DM.OPUS", "AUDIO\\L4_PAP.OPUS", "AUDIO\\L5_TFB.OPUS", "AUDIO\\J0_DM2.OPUS", "AUDIO\\J1_LFL.OPUS",
|
||||||
|
"AUDIO\\J2_KCL.OPUS", "AUDIO\\J3_VH.OPUS", "AUDIO\\J4_ETH.OPUS", "AUDIO\\J5_DST.OPUS", "AUDIO\\J6_TBJ.OPUS", "AUDIO\\T1_TOL.OPUS",
|
||||||
|
"AUDIO\\T2_TPU.OPUS", "AUDIO\\T3_MAS.OPUS", "AUDIO\\T4_TAT.OPUS", "AUDIO\\T5_BF.OPUS", "AUDIO\\S0_MAS.OPUS", "AUDIO\\S1_PF.OPUS",
|
||||||
|
"AUDIO\\S2_CTG.OPUS", "AUDIO\\S3_RTC.OPUS", "AUDIO\\S5_LRQ.OPUS", "AUDIO\\S4_BDBA.OPUS", "AUDIO\\S4_BDBB.OPUS", "AUDIO\\S2_CTG2.OPUS",
|
||||||
|
"AUDIO\\S4_BDBD.OPUS", "AUDIO\\S5_LRQB.OPUS", "AUDIO\\S5_LRQC.OPUS", "AUDIO\\A1_SSO.OPUS", "AUDIO\\A2_PP.OPUS", "AUDIO\\A3_SS.OPUS",
|
||||||
|
"AUDIO\\A4_PDR.OPUS", "AUDIO\\A5_K2FT.OPUS", "AUDIO\\K1_KBO.OPUS", "AUDIO\\K2_GIS.OPUS", "AUDIO\\K3_DS.OPUS", "AUDIO\\K4_SHI.OPUS",
|
||||||
|
"AUDIO\\K5_SD.OPUS", "AUDIO\\R0_PDR2.OPUS", "AUDIO\\R1_SW.OPUS", "AUDIO\\R2_AP.OPUS", "AUDIO\\R3_ED.OPUS", "AUDIO\\R4_GF.OPUS",
|
||||||
|
"AUDIO\\R5_PB.OPUS", "AUDIO\\R6_MM.OPUS", "AUDIO\\D1_STOG.OPUS", "AUDIO\\D2_KK.OPUS", "AUDIO\\D3_ADO.OPUS", "AUDIO\\D5_ES.OPUS",
|
||||||
|
"AUDIO\\D7_MLD.OPUS", "AUDIO\\D4_GTA.OPUS", "AUDIO\\D4_GTA2.OPUS", "AUDIO\\D6_STS.OPUS", "AUDIO\\A6_BAIT.OPUS", "AUDIO\\A7_ETG.OPUS",
|
||||||
|
"AUDIO\\A8_PS.OPUS", "AUDIO\\A9_ASD.OPUS", "AUDIO\\K4_SHI2.OPUS", "AUDIO\\C1_TEX.OPUS", "AUDIO\\EL_PH1.OPUS", "AUDIO\\EL_PH2.OPUS",
|
||||||
|
"AUDIO\\EL_PH3.OPUS", "AUDIO\\EL_PH4.OPUS", "AUDIO\\YD_PH1.OPUS", "AUDIO\\YD_PH2.OPUS", "AUDIO\\YD_PH3.OPUS", "AUDIO\\YD_PH4.OPUS",
|
||||||
|
"AUDIO\\HD_PH1.OPUS", "AUDIO\\HD_PH2.OPUS", "AUDIO\\HD_PH3.OPUS", "AUDIO\\HD_PH4.OPUS", "AUDIO\\HD_PH5.OPUS", "AUDIO\\MT_PH1.OPUS",
|
||||||
|
"AUDIO\\MT_PH2.OPUS", "AUDIO\\MT_PH3.OPUS", "AUDIO\\MT_PH4.OPUS", "AUDIO\\MISCOM.OPUS", "AUDIO\\END.OPUS", "AUDIO\\lib_a1.OPUS",
|
||||||
|
"AUDIO\\lib_a2.OPUS", "AUDIO\\lib_a.OPUS", "AUDIO\\lib_b.OPUS", "AUDIO\\lib_c.OPUS", "AUDIO\\lib_d.OPUS", "AUDIO\\l2_a.OPUS",
|
||||||
|
"AUDIO\\j4t_1.OPUS", "AUDIO\\j4t_2.OPUS", "AUDIO\\j4t_3.OPUS", "AUDIO\\j4t_4.OPUS", "AUDIO\\j4_a.OPUS", "AUDIO\\j4_b.OPUS",
|
||||||
|
"AUDIO\\j4_c.OPUS", "AUDIO\\j4_d.OPUS", "AUDIO\\j4_e.OPUS", "AUDIO\\j4_f.OPUS", "AUDIO\\j6_1.OPUS", "AUDIO\\j6_a.OPUS",
|
||||||
|
"AUDIO\\j6_b.OPUS", "AUDIO\\j6_c.OPUS", "AUDIO\\j6_d.OPUS", "AUDIO\\t4_a.OPUS", "AUDIO\\s1_a.OPUS", "AUDIO\\s1_a1.OPUS",
|
||||||
|
"AUDIO\\s1_b.OPUS", "AUDIO\\s1_c.OPUS", "AUDIO\\s1_c1.OPUS", "AUDIO\\s1_d.OPUS", "AUDIO\\s1_e.OPUS", "AUDIO\\s1_f.OPUS",
|
||||||
|
"AUDIO\\s1_g.OPUS", "AUDIO\\s1_h.OPUS", "AUDIO\\s1_i.OPUS", "AUDIO\\s1_j.OPUS", "AUDIO\\s1_k.OPUS", "AUDIO\\s1_l.OPUS",
|
||||||
|
"AUDIO\\s3_a.OPUS", "AUDIO\\s3_b.OPUS", "AUDIO\\el3_a.OPUS", "AUDIO\\mf1_a.OPUS", "AUDIO\\mf2_a.OPUS", "AUDIO\\mf3_a.OPUS",
|
||||||
|
"AUDIO\\mf3_b.OPUS", "AUDIO\\mf3_b1.OPUS", "AUDIO\\mf3_c.OPUS", "AUDIO\\mf4_a.OPUS", "AUDIO\\mf4_b.OPUS", "AUDIO\\mf4_c.OPUS",
|
||||||
|
"AUDIO\\a1_a.OPUS", "AUDIO\\a3_a.OPUS", "AUDIO\\a5_a.OPUS", "AUDIO\\a4_a.OPUS", "AUDIO\\a4_b.OPUS", "AUDIO\\a4_c.OPUS",
|
||||||
|
"AUDIO\\a4_d.OPUS", "AUDIO\\k1_a.OPUS", "AUDIO\\k3_a.OPUS", "AUDIO\\r1_a.OPUS", "AUDIO\\r2_a.OPUS", "AUDIO\\r2_b.OPUS",
|
||||||
|
"AUDIO\\r2_c.OPUS", "AUDIO\\r2_d.OPUS", "AUDIO\\r2_e.OPUS", "AUDIO\\r2_f.OPUS", "AUDIO\\r2_g.OPUS", "AUDIO\\r2_h.OPUS",
|
||||||
|
"AUDIO\\r5_a.OPUS", "AUDIO\\r6_a.OPUS", "AUDIO\\r6_a1.OPUS", "AUDIO\\r6_b.OPUS", "AUDIO\\lo2_a.OPUS", "AUDIO\\lo6_a.OPUS",
|
||||||
|
"AUDIO\\yd2_a.OPUS", "AUDIO\\yd2_b.OPUS", "AUDIO\\yd2_c.OPUS", "AUDIO\\yd2_c1.OPUS", "AUDIO\\yd2_d.OPUS", "AUDIO\\yd2_e.OPUS",
|
||||||
|
"AUDIO\\yd2_f.OPUS", "AUDIO\\yd2_g.OPUS", "AUDIO\\yd2_h.OPUS", "AUDIO\\yd2_ass.OPUS", "AUDIO\\yd2_ok.OPUS", "AUDIO\\h5_a.OPUS",
|
||||||
|
"AUDIO\\h5_b.OPUS", "AUDIO\\h5_c.OPUS", "AUDIO\\ammu_a.OPUS", "AUDIO\\ammu_b.OPUS", "AUDIO\\ammu_c.OPUS", "AUDIO\\door_1.OPUS",
|
||||||
|
"AUDIO\\door_2.OPUS", "AUDIO\\door_3.OPUS", "AUDIO\\door_4.OPUS", "AUDIO\\door_5.OPUS", "AUDIO\\door_6.OPUS", "AUDIO\\t3_a.OPUS",
|
||||||
|
"AUDIO\\t3_b.OPUS", "AUDIO\\t3_c.OPUS", "AUDIO\\k1_b.OPUS", "AUDIO\\cat1.OPUS"};
|
||||||
|
#else
|
||||||
static char StreamedNameTable[][25]=
|
static char StreamedNameTable[][25]=
|
||||||
{
|
{
|
||||||
#ifdef PS2_AUDIO
|
#ifdef PS2_AUDIO
|
||||||
@ -515,3 +551,4 @@ static char StreamedNameTable[][25]=
|
|||||||
"AUDIO\\k1_b.WAV",
|
"AUDIO\\k1_b.WAV",
|
||||||
"AUDIO\\cat1.WAV"
|
"AUDIO\\cat1.WAV"
|
||||||
};
|
};
|
||||||
|
#endif
|
@ -27,6 +27,9 @@
|
|||||||
#include "MusicManager.h"
|
#include "MusicManager.h"
|
||||||
#include "Frontend.h"
|
#include "Frontend.h"
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
#include <opusfile.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
//TODO: fix eax3 reverb
|
//TODO: fix eax3 reverb
|
||||||
//TODO: max channals
|
//TODO: max channals
|
||||||
@ -69,7 +72,11 @@ char SampleBankDescFilename[] = "audio/sfx.SDT";
|
|||||||
char SampleBankDataFilename[] = "audio/sfx.RAW";
|
char SampleBankDataFilename[] = "audio/sfx.RAW";
|
||||||
|
|
||||||
FILE *fpSampleDescHandle;
|
FILE *fpSampleDescHandle;
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
OggOpusFile *fpSampleDataHandle;
|
||||||
|
#else
|
||||||
FILE *fpSampleDataHandle;
|
FILE *fpSampleDataHandle;
|
||||||
|
#endif
|
||||||
bool bSampleBankLoaded [MAX_SAMPLEBANKS];
|
bool bSampleBankLoaded [MAX_SAMPLEBANKS];
|
||||||
int32 nSampleBankDiscStartOffset [MAX_SAMPLEBANKS];
|
int32 nSampleBankDiscStartOffset [MAX_SAMPLEBANKS];
|
||||||
int32 nSampleBankSize [MAX_SAMPLEBANKS];
|
int32 nSampleBankSize [MAX_SAMPLEBANKS];
|
||||||
@ -444,6 +451,8 @@ int8 cSampleManager::GetCurrent3DProviderIndex(void)
|
|||||||
int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider)
|
int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider)
|
||||||
{
|
{
|
||||||
ASSERT( nProvider < m_nNumberOfProviders );
|
ASSERT( nProvider < m_nNumberOfProviders );
|
||||||
|
if (nProvider >= m_nNumberOfProviders)
|
||||||
|
nProvider = 0;
|
||||||
int savedprovider = curprovider;
|
int savedprovider = curprovider;
|
||||||
|
|
||||||
if ( nProvider < m_nNumberOfProviders )
|
if ( nProvider < m_nNumberOfProviders )
|
||||||
@ -754,12 +763,27 @@ cSampleManager::LoadSampleBank(uint8 nBank)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
int samplesRead = 0;
|
||||||
|
int samplesSize = nSampleBankSize[nBank] / 2;
|
||||||
|
op_pcm_seek(fpSampleDataHandle, 0);
|
||||||
|
while (samplesSize > 0) {
|
||||||
|
int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[nBank] + samplesRead), samplesSize, NULL);
|
||||||
|
if (size <= 0) {
|
||||||
|
// huh?
|
||||||
|
//assert(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
samplesRead += size*2;
|
||||||
|
samplesSize -= size;
|
||||||
|
}
|
||||||
|
#else
|
||||||
if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 )
|
if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( fread((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fpSampleDataHandle) != nSampleBankSize[nBank] )
|
if ( fread((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fpSampleDataHandle) != nSampleBankSize[nBank] )
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
bSampleBankLoaded[nBank] = true;
|
bSampleBankLoaded[nBank] = true;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -852,12 +876,27 @@ cSampleManager::LoadPedComment(uint32 nComment)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
int samplesRead = 0;
|
||||||
|
int samplesSize = m_aSamples[nComment].nSize / 2;
|
||||||
|
op_pcm_seek(fpSampleDataHandle, m_aSamples[nComment].nOffset / 2);
|
||||||
|
while (samplesSize > 0) {
|
||||||
|
int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead),
|
||||||
|
samplesSize, NULL);
|
||||||
|
if (size <= 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
samplesRead += size * 2;
|
||||||
|
samplesSize -= size;
|
||||||
|
}
|
||||||
|
#else
|
||||||
if ( fseek(fpSampleDataHandle, m_aSamples[nComment].nOffset, SEEK_SET) != 0 )
|
if ( fseek(fpSampleDataHandle, m_aSamples[nComment].nOffset, SEEK_SET) != 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( fread((void *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE*nCurrentPedSlot), 1, m_aSamples[nComment].nSize, fpSampleDataHandle) != m_aSamples[nComment].nSize )
|
if ( fread((void *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE*nCurrentPedSlot), 1, m_aSamples[nComment].nSize, fpSampleDataHandle) != m_aSamples[nComment].nSize )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
#endif
|
||||||
nPedSlotSfx[nCurrentPedSlot] = nComment;
|
nPedSlotSfx[nCurrentPedSlot] = nComment;
|
||||||
|
|
||||||
alBufferData(pedBuffers[nCurrentPedSlot],
|
alBufferData(pedBuffers[nCurrentPedSlot],
|
||||||
@ -1387,7 +1426,7 @@ cSampleManager::InitialiseSampleBanks(void)
|
|||||||
fpSampleDescHandle = fopen(SampleBankDescFilename, "rb");
|
fpSampleDescHandle = fopen(SampleBankDescFilename, "rb");
|
||||||
if ( fpSampleDescHandle == NULL )
|
if ( fpSampleDescHandle == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
#ifndef AUDIO_OPUS
|
||||||
fpSampleDataHandle = fopen(SampleBankDataFilename, "rb");
|
fpSampleDataHandle = fopen(SampleBankDataFilename, "rb");
|
||||||
if ( fpSampleDataHandle == NULL )
|
if ( fpSampleDataHandle == NULL )
|
||||||
{
|
{
|
||||||
@ -1400,9 +1439,14 @@ cSampleManager::InitialiseSampleBanks(void)
|
|||||||
fseek(fpSampleDataHandle, 0, SEEK_END);
|
fseek(fpSampleDataHandle, 0, SEEK_END);
|
||||||
int32 _nSampleDataEndOffset = ftell(fpSampleDataHandle);
|
int32 _nSampleDataEndOffset = ftell(fpSampleDataHandle);
|
||||||
rewind(fpSampleDataHandle);
|
rewind(fpSampleDataHandle);
|
||||||
|
#else
|
||||||
|
int e;
|
||||||
|
fpSampleDataHandle = op_open_file(SampleBankDataFilename, &e);
|
||||||
|
#endif
|
||||||
fread(m_aSamples, sizeof(tSample), TOTAL_AUDIO_SAMPLES, fpSampleDescHandle);
|
fread(m_aSamples, sizeof(tSample), TOTAL_AUDIO_SAMPLES, fpSampleDescHandle);
|
||||||
|
#ifdef AUDIO_OPUS
|
||||||
|
int32 _nSampleDataEndOffset = m_aSamples[TOTAL_AUDIO_SAMPLES - 1].nOffset + m_aSamples[TOTAL_AUDIO_SAMPLES - 1].nSize;
|
||||||
|
#endif
|
||||||
fclose(fpSampleDescHandle);
|
fclose(fpSampleDescHandle);
|
||||||
fpSampleDescHandle = NULL;
|
fpSampleDescHandle = NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user