diff --git a/premake5.lua b/premake5.lua index c7321dcb..036dad09 100644 --- a/premake5.lua +++ b/premake5.lua @@ -209,6 +209,7 @@ project "re3" libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } filter {} + defines { "AUDIO_OPUS" } end filter "platforms:*oal" diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp index ff50ac07..1cd45e4f 100644 --- a/src/audio/sampman_oal.cpp +++ b/src/audio/sampman_oal.cpp @@ -45,10 +45,6 @@ bool _bSampmanInitialised = false; uint32 BankStartOffset[MAX_SAMPLEBANKS]; -#ifdef AUDIO_OPUS -OggOpusFile *opusSFX; -#endif - int prevprovider=-1; int curprovider=-1; int usingEAX=0; @@ -76,7 +72,11 @@ char SampleBankDescFilename[] = "audio/sfx.SDT"; char SampleBankDataFilename[] = "audio/sfx.RAW"; FILE *fpSampleDescHandle; +#ifdef AUDIO_OPUS +OggOpusFile *fpSampleDataHandle; +#else FILE *fpSampleDataHandle; +#endif bool bSampleBankLoaded [MAX_SAMPLEBANKS]; int32 nSampleBankDiscStartOffset [MAX_SAMPLEBANKS]; int32 nSampleBankSize [MAX_SAMPLEBANKS]; @@ -753,13 +753,11 @@ cSampleManager::LoadSampleBank(uint8 nBank) } #ifdef AUDIO_OPUS - int ret; - //OggOpusFile *file = op_open_file("AUDIO/SFX0.RAW", &ret); int samplesRead = 0; int samplesSize = nSampleBankSize[nBank] / 2; - op_pcm_seek(opusSFX, 0); + op_pcm_seek(fpSampleDataHandle, 0); while (samplesSize > 0) { - int size = op_read(opusSFX, (opus_int16 *)(nSampleBankMemoryStartAddress[nBank] + samplesRead), samplesSize, NULL); + int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[nBank] + samplesRead), samplesSize, NULL); if (size <= 0) { // huh? //assert(0); @@ -768,14 +766,6 @@ cSampleManager::LoadSampleBank(uint8 nBank) samplesRead += size*2; samplesSize -= size; } - //op_free(file); - - //if (samplesRead != nSampleBankSize[nBank]) - // return false; - - //FILE *fsd = fopen("sfx.temp", "wb"); - //fwrite((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fsd); - //fclose(fsd); #else if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 ) return false; @@ -878,10 +868,10 @@ cSampleManager::LoadPedComment(uint32 nComment) #ifdef AUDIO_OPUS int samplesRead = 0; int samplesSize = m_aSamples[nComment].nSize / 2; - op_pcm_seek(opusSFX, m_aSamples[nComment].nOffset / 2); + op_pcm_seek(fpSampleDataHandle, m_aSamples[nComment].nOffset / 2); while (samplesSize > 0) { - int size = - op_read(opusSFX, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead), samplesSize, NULL); + int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead), + samplesSize, NULL); if (size <= 0) { return false; } @@ -1425,7 +1415,7 @@ cSampleManager::InitialiseSampleBanks(void) fpSampleDescHandle = fopen(SampleBankDescFilename, "rb"); if ( fpSampleDescHandle == NULL ) return false; - +#ifndef AUDIO_OPUS fpSampleDataHandle = fopen(SampleBankDataFilename, "rb"); if ( fpSampleDataHandle == NULL ) { @@ -1438,9 +1428,14 @@ cSampleManager::InitialiseSampleBanks(void) fseek(fpSampleDataHandle, 0, SEEK_END); int32 _nSampleDataEndOffset = ftell(fpSampleDataHandle); rewind(fpSampleDataHandle); - +#else + int e; + fpSampleDataHandle = op_open_file(SampleBankDataFilename, &e); +#endif 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); fpSampleDescHandle = NULL; @@ -1458,15 +1453,6 @@ cSampleManager::InitialiseSampleBanks(void) nSampleBankSize[SAMPLEBANK_MAIN] = nSampleBankDiscStartOffset[SAMPLEBANK_PED] - nSampleBankDiscStartOffset[SAMPLEBANK_MAIN]; nSampleBankSize[SAMPLEBANK_PED] = _nSampleDataEndOffset - nSampleBankDiscStartOffset[SAMPLEBANK_PED]; - - //int error = 0; - //auto encoder = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, &error); - //error = opus_encoder_ctl(encoder, OPUS_SET_BITRATE(75.5)); - - //nbBytes = opus_encode(encoder, in, FRAME_SIZE, cbits, MAX_PACKET_SIZE); - - int e; - opusSFX = op_open_file("AUDIO/SFX.opus", &e); return true; }