mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
engine: move engine/audio/public to public/ directory
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#undef fopen
|
||||
#include <stdio.h>
|
||||
#include "voice_wavefile.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
static unsigned long ReadDWord(FILE * fp)
|
||||
{
|
||||
unsigned long ret;
|
||||
fread( &ret, 4, 1, fp );
|
||||
return ret;
|
||||
}
|
||||
|
||||
static unsigned short ReadWord(FILE * fp)
|
||||
{
|
||||
unsigned short ret;
|
||||
fread( &ret, 2, 1, fp );
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void WriteDWord(FILE * fp, unsigned long val)
|
||||
{
|
||||
fwrite( &val, 4, 1, fp );
|
||||
}
|
||||
|
||||
static void WriteWord(FILE * fp, unsigned short val)
|
||||
{
|
||||
fwrite( &val, 2, 1, fp );
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool ReadWaveFile(
|
||||
const char *pFilename,
|
||||
char *&pData,
|
||||
int &nDataBytes,
|
||||
int &wBitsPerSample,
|
||||
int &nChannels,
|
||||
int &nSamplesPerSec)
|
||||
{
|
||||
FILE * fp = fopen(pFilename, "rb");
|
||||
if(!fp)
|
||||
return false;
|
||||
|
||||
fseek( fp, 22, SEEK_SET );
|
||||
|
||||
nChannels = ReadWord(fp);
|
||||
nSamplesPerSec = ReadDWord(fp);
|
||||
|
||||
fseek(fp, 34, SEEK_SET);
|
||||
wBitsPerSample = ReadWord(fp);
|
||||
|
||||
fseek(fp, 40, SEEK_SET);
|
||||
nDataBytes = ReadDWord(fp);
|
||||
ReadDWord(fp);
|
||||
pData = new char[nDataBytes];
|
||||
if(!pData)
|
||||
{
|
||||
fclose(fp);
|
||||
return false;
|
||||
}
|
||||
fread(pData, nDataBytes, 1, fp);
|
||||
fclose( fp );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WriteWaveFile(
|
||||
const char *pFilename,
|
||||
const char *pData,
|
||||
int nBytes,
|
||||
int wBitsPerSample,
|
||||
int nChannels,
|
||||
int nSamplesPerSec)
|
||||
{
|
||||
FILE * fp = fopen(pFilename, "wb");
|
||||
if(!fp)
|
||||
return false;
|
||||
|
||||
// Write the RIFF chunk.
|
||||
fwrite("RIFF", 4, 1, fp);
|
||||
WriteDWord(fp, 0);
|
||||
fwrite("WAVE", 4, 1, fp);
|
||||
|
||||
|
||||
// Write the FORMAT chunk.
|
||||
fwrite("fmt ", 4, 1, fp);
|
||||
|
||||
WriteDWord(fp, 0x10);
|
||||
WriteWord(fp, 1); // WAVE_FORMAT_PCM
|
||||
WriteWord(fp, (unsigned short)nChannels);
|
||||
WriteDWord(fp, (unsigned long)nSamplesPerSec);
|
||||
WriteDWord(fp, (unsigned long)((wBitsPerSample / 8) * nChannels * nSamplesPerSec));
|
||||
WriteWord(fp, (unsigned short)((wBitsPerSample / 8) * nChannels));
|
||||
WriteWord(fp, (unsigned short)wBitsPerSample);
|
||||
|
||||
// Write the DATA chunk.
|
||||
fwrite("data", 4, 1, fp);
|
||||
WriteDWord(fp, (unsigned long)nBytes);
|
||||
fwrite(pData, nBytes, 1, fp);
|
||||
|
||||
|
||||
// Go back and write the length of the riff file.
|
||||
unsigned long dwVal = ftell(fp) - 8;
|
||||
fseek( fp, 4, SEEK_SET );
|
||||
WriteDWord(fp, dwVal);
|
||||
|
||||
fclose(fp);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user