JD2022-TU1/main/extern/Raki/Source/RakiTools/BinWii/BinWii.cpp

105 lines
3.4 KiB
C++

#include "Precompiled.h"
#include "RakiTests/Initializer/TestInitializer.h"
#include "RakiEngine/Data/MemoryBlock/MemoryBlock.h"
#include "RakiEngine/Data/Stream/BufferFromStream.h"
#include "RakiEngine/Data/Stream/FileStream.h"
#include "RakiEngine/Data/Stream/SeekableStreamPart.h"
#include "RakiEngine/Data/WaveFile/RiffChunkManager.h"
#include "RakiEngine/Data/WaveFile/BinWaveData/BinWaveData.h"
#include "RakiEngine/Data/WaveFile/WaveFile.h"
#include "RakiEngine/Data/WaveFile/WaveDataPitchConverter.h"
#include "RakiEngine/Specific/_WIN32/Specific_WIN32.h"
#include "RakiTests/_Win32/CoInitializeInitObject.h"
#include "RakiTests/_Win32/KeyValueContainer.h"
#ifndef RAKI_PLATFORM_WIN32
#error // this is a bin test app - only for Win32
#endif // RAKI_PLATFORM_WIN32
// path=E:/ITF/UbiArt/extern/Raki/TestData/Sfx_CageDoor_Discover.wav samplingRate=32 interleaveIfStereo=false
int _tmain(int argc, _TCHAR* argv[] )
{
raki::CoInitializeInitObject coInitializeInitObject;
raki::KeyValueContainer keyValueContainer( argc, argv );
{
raki::Engine::ExternalToolPaths externalToolPaths;
const raki::u32 size = 512;
char rvlRootPath[size];
char cafeDspadpcmEncPath[size];
size_t returnedSize = 0;
getenv_s( &returnedSize, rvlRootPath, size, "REVOLUTION_SDK_ROOT" );
if ( !rvlRootPath[0] )
return false;
// -fscomp -x -ignorewavloop
sprintf_s( cafeDspadpcmEncPath, size, "%s\\x86\\bin\\dspadpcm.exe", rvlRootPath );
externalToolPaths.m_wiiDspadpcmEncPath = cafeDspadpcmEncPath;
raki::TestInitializer initializer( &externalToolPaths );
bool error = false;
if ( ( keyValueContainer.getNbKeyValuePairs() != 3 ) && ( keyValueContainer.getNbKeyValuePairs() != 4 ) )
error = true;
if ( !keyValueContainer.getStringValue( _T( "path" ) ).size() )
error = true;
if ( !keyValueContainer.getStringValue( _T( "samplingRate" ) ).size() )
error = true;
if ( !keyValueContainer.getStringValue( _T( "interleaveIfStereo" ) ).size() )
error = true;
const bool isStream = keyValueContainer.getBoolValue( _T( "isStream" ) );
const raki::u32 binFlags = isStream ? 1 : 0;
if ( error )
{
printf( "BinWii usage (note original wave files MUST HAVE 48 kHz sampling rate:" );
printf( " valid sampling rate are:" );
printf( " 32 for 32 kHz, 24 for 24 kHz and 16 for 16 kHz" );
printf( " Interleaving is necessary for streamed waves, non interleaved data is necessary for buffered waves" );
printf( "Example:" );
printf( " BinWii path=<path> samplingRate=32 interleaveIfStereo=false" );
return -1;
}
#define TEXT_SIZE 512
char path[TEXT_SIZE];
size_t returnSize = 0;
wcstombs_s( &returnSize, path, TEXT_SIZE, keyValueContainer.getStringValue( _T( "path" ) ).c_str(), TEXT_SIZE );
int samplingRate = keyValueContainer.getIntValue( _T( "samplingRate" ) );
bool interleaveIfStereo = keyValueContainer.getBoolValue( _T( "interleaveIfStereo" ) );
char outputPath[TEXT_SIZE];
sprintf_s( outputPath, TEXT_SIZE, "%s.wii", path );
if ( !raki::Specific::BinWii::Bin( path, outputPath, samplingRate, interleaveIfStereo, binFlags ) )
return -1;
}
return 0;
}