mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-13 22:22:05 +00:00
extractResourceFiles can export .wav files. closes #166
This commit is contained in:
parent
6966fda776
commit
33b74a7b25
5 changed files with 34 additions and 23 deletions
|
@ -2,6 +2,7 @@ extractResourceFile _common.resources baseref
|
|||
extractResourceFile _ordered.resources baseref
|
||||
extractResourceFile _sound_pc.resources baseref copysound
|
||||
extractResourceFile _sound_pc_en.resources baseref copysound
|
||||
extractResourceFile _sound_pc_gr.resources baseref copysound
|
||||
|
||||
extractResourceFile maps/admin.resources baseref
|
||||
extractResourceFile maps/alphalabs1.resources baseref
|
||||
|
|
|
@ -2,5 +2,5 @@ cd ..
|
|||
del /s /q build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -G "Visual Studio 16" -A x64 -DUSE_OPENAL=ON ../neo
|
||||
cmake -G "Visual Studio 16" -A x64 -DOPENAL=ON ../neo
|
||||
pause
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
Doom 3 BFG Edition GPL Source Code
|
||||
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
||||
Copyright (C) 2024 Robert Beckebans
|
||||
|
||||
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
||||
|
||||
|
@ -29,6 +30,9 @@ If you have questions concerning this license or the applicable additional terms
|
|||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "../sound/WaveFile.h"
|
||||
#include "../renderer/CmdlineProgressbar.h"
|
||||
|
||||
/*
|
||||
================================================================================================
|
||||
|
||||
|
@ -330,8 +334,6 @@ void idResourceContainer::SetContainerIndex( const int& _idx )
|
|||
idResourceContainer::ExtractResourceFile
|
||||
========================
|
||||
*/
|
||||
#include "../sound/WaveFile.h"
|
||||
|
||||
void idResourceContainer::ExtractResourceFile( const char* _fileName, const char* _outPath, bool _copyWavs, bool _all )
|
||||
{
|
||||
idFile* inFile = fileSystem->OpenFileRead( _fileName );
|
||||
|
@ -350,6 +352,8 @@ void idResourceContainer::ExtractResourceFile( const char* _fileName, const char
|
|||
return;
|
||||
}
|
||||
|
||||
common->Printf( "extracting resource file %s\n", _fileName );
|
||||
|
||||
int _tableOffset;
|
||||
int _tableLength;
|
||||
inFile->ReadBig( _tableOffset );
|
||||
|
@ -363,6 +367,12 @@ void idResourceContainer::ExtractResourceFile( const char* _fileName, const char
|
|||
int _numFileResources;
|
||||
memFile.ReadBig( _numFileResources );
|
||||
|
||||
CommandlineProgressBar progressBar( _numFileResources, renderSystem->GetWidth(), renderSystem->GetHeight() );
|
||||
if( _copyWavs )
|
||||
{
|
||||
progressBar.Start();
|
||||
}
|
||||
|
||||
for( int i = 0; i < _numFileResources; i++ )
|
||||
{
|
||||
idResourceCacheEntry rt;
|
||||
|
@ -373,14 +383,6 @@ void idResourceContainer::ExtractResourceFile( const char* _fileName, const char
|
|||
|
||||
if( _copyWavs && ( rt.filename.Find( ".idwav" ) >= 0 || rt.filename.Find( ".idxma" ) >= 0 || rt.filename.Find( ".idmsf" ) >= 0 ) )
|
||||
{
|
||||
// TODO make this work #166
|
||||
|
||||
//rt.filename.SetFileExtension( "wav" );
|
||||
//rt.filename.Replace( "generated/", "" );
|
||||
int len = fileSystem->GetFileLength( rt.filename );
|
||||
//fbuf = ( byte* )Mem_Alloc( len, TAG_RESOURCE );
|
||||
//fileSystem->ReadFile( rt.filename, ( void** )&fbuf, NULL );
|
||||
|
||||
idFileLocal fileIn( fileSystem->OpenFileReadMemory( rt.filename ) );
|
||||
if( fileIn != NULL )
|
||||
{
|
||||
|
@ -439,9 +441,9 @@ void idResourceContainer::ExtractResourceFile( const char* _fileName, const char
|
|||
idFileLocal fileOut( fileSystem->OpenExplicitFileWrite( outName ) );
|
||||
if( fileOut != NULL )
|
||||
{
|
||||
common->Printf( "writing %s\n", outName.c_str() );
|
||||
//common->Printf( "writing %s\n", outName.c_str() );
|
||||
|
||||
uint32 fileSize = 12 + 24 + format.extraSize + 4 + totalBufferSize;
|
||||
uint32 fileSize = 12 + 24 + 2 + format.extraSize + 8 + totalBufferSize;
|
||||
fileSize -= 8;
|
||||
|
||||
idWaveFile::WriteHeaderDirect( fileSize, fileOut );
|
||||
|
@ -454,11 +456,6 @@ void idResourceContainer::ExtractResourceFile( const char* _fileName, const char
|
|||
{
|
||||
Mem_Free( buffers[ i ].buffer );
|
||||
}
|
||||
|
||||
// just export the first file for testing
|
||||
delete inFile;
|
||||
Mem_Free( buf );
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -496,7 +493,10 @@ void idResourceContainer::ExtractResourceFile( const char* _fileName, const char
|
|||
Mem_Free( fbuf );
|
||||
}
|
||||
|
||||
|
||||
if( _copyWavs )
|
||||
{
|
||||
progressBar.Increment( true );
|
||||
}
|
||||
}
|
||||
delete inFile;
|
||||
Mem_Free( buf );
|
||||
|
|
|
@ -107,7 +107,7 @@ void idSoundSample_OpenAL::WriteGeneratedSample( idFile* fileOut )
|
|||
fileOut->WriteBig( loaded );
|
||||
fileOut->WriteBig( playBegin );
|
||||
fileOut->WriteBig( playLength );
|
||||
idWaveFile::WriteWaveFormatDirect( format, fileOut );
|
||||
idWaveFile::WriteWaveFormatDirect( format, fileOut, false );
|
||||
fileOut->WriteBig( ( int )amplitude.Num() );
|
||||
fileOut->Write( amplitude.Ptr(), amplitude.Num() );
|
||||
fileOut->WriteBig( totalBufferSize );
|
||||
|
|
|
@ -427,11 +427,19 @@ bool idWaveFile::WriteWaveFormatDirect( waveFmt_t& format, idFile* file, bool wa
|
|||
//swap.Little( format.basic.blockSize );
|
||||
//swap.Little( format.basic.bitsPerSample );
|
||||
|
||||
// RB begin
|
||||
// RB: this is also called by .idwav saving code and it was missing
|
||||
if( wavFile )
|
||||
{
|
||||
file->WriteBig( format.id );
|
||||
file->WriteUnsignedInt( sizeof( format.basic ) );
|
||||
|
||||
if( format.basic.formatTag != FORMAT_PCM )
|
||||
{
|
||||
file->WriteUnsignedInt( sizeof( format.basic ) + 2 + format.extraSize );
|
||||
}
|
||||
else
|
||||
{
|
||||
file->WriteUnsignedInt( sizeof( format.basic ) );
|
||||
}
|
||||
}
|
||||
// RB end
|
||||
|
||||
|
@ -462,6 +470,7 @@ bool idWaveFile::WriteWaveFormatDirect( waveFmt_t& format, idFile* file, bool wa
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -518,7 +527,8 @@ bool idWaveFile::WriteDataDirect( char* _data, uint32 size, idFile* file )
|
|||
static const uint32 data = 'data';
|
||||
file->WriteBig( data );
|
||||
file->Write( &size, sizeof( uint32 ) );
|
||||
file->WriteBigArray( _data, size );
|
||||
//file->WriteBigArray( _data, size ); // RB: this is super slow
|
||||
file->Write( _data, size );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue