You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
3.8 KiB
158 lines
3.8 KiB
8 years ago
|
//mp3 support added by Killar
|
||
|
|
||
|
#include "hud.h"
|
||
|
#include "cl_util.h"
|
||
|
#include "mp3.h"
|
||
|
|
||
|
int CMP3::Initialize()
|
||
|
{
|
||
|
|
||
|
char fmodlib[256];
|
||
|
|
||
|
m_iIsPlaying = 0;
|
||
|
sprintf( fmodlib, "%s/fmod.dll", gEngfuncs.pfnGetGameDirectory());
|
||
|
// replace forward slashes with backslashes
|
||
|
for( int i=0; i < 256; i++ )
|
||
|
if( fmodlib[i] == '/' ) fmodlib[i] = '\\';
|
||
|
|
||
|
m_hFMod = LoadLibrary( fmodlib );
|
||
|
|
||
|
if( m_hFMod != NULL )
|
||
|
{
|
||
|
// fill in the function pointers
|
||
|
// (FARPROC&)VER = GetProcAddress(m_hFMod, "_FSOUND_GetVersion@0");
|
||
|
(FARPROC&)SCL = GetProcAddress(m_hFMod, "_FSOUND_Stream_Close@4");
|
||
|
(FARPROC&)SOP = GetProcAddress(m_hFMod, "_FSOUND_SetOutput@4");
|
||
|
(FARPROC&)SBS = GetProcAddress(m_hFMod, "_FSOUND_SetBufferSize@4");
|
||
|
(FARPROC&)SDRV = GetProcAddress(m_hFMod, "_FSOUND_SetDriver@4");
|
||
|
(FARPROC&)INIT = GetProcAddress(m_hFMod, "_FSOUND_Init@12");
|
||
|
(FARPROC&)SOF = GetProcAddress(m_hFMod, "_FSOUND_Stream_OpenFile@12"); //
|
||
|
// (FARPROC&)LNGTH = GetProcAddress(m_hFMod, "_FSOUND_Stream_GetLength@4"); //
|
||
|
(FARPROC&)SO = GetProcAddress(m_hFMod, "_FSOUND_Stream_Open@16"); //AJH Use new version of fmod
|
||
|
(FARPROC&)SPLAY = GetProcAddress(m_hFMod, "_FSOUND_Stream_Play@8");
|
||
|
(FARPROC&)CLOSE = GetProcAddress(m_hFMod, "_FSOUND_Close@0");
|
||
|
|
||
|
if( !(SCL && SOP && SBS && SDRV && INIT && (SOF||SO) && SPLAY && CLOSE) )
|
||
|
{
|
||
|
FreeLibrary( m_hFMod );
|
||
|
gEngfuncs.Con_Printf("Fatal Error: FMOD functions couldn't be loaded!\n");
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
gEngfuncs.Con_Printf("Fatal Error: FMOD library couldn't be loaded!\n");
|
||
|
return 0;
|
||
|
}
|
||
|
gEngfuncs.Con_Printf("FMOD.dll loaded successfully!\n");
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int CMP3::Shutdown()
|
||
|
{
|
||
|
if( m_hFMod )
|
||
|
{
|
||
|
CLOSE();
|
||
|
|
||
|
FreeLibrary( m_hFMod );
|
||
|
m_hFMod = NULL;
|
||
|
m_iIsPlaying = 0;
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int CMP3::StopMP3( void )
|
||
|
{
|
||
|
SCL( m_Stream );
|
||
|
m_iIsPlaying = 0;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int CMP3::PlayMP3( const char *pszSong )
|
||
|
{
|
||
|
if( m_iIsPlaying )
|
||
|
{
|
||
|
// sound system is already initialized
|
||
|
SCL( m_Stream );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SOP( FSOUND_OUTPUT_DSOUND );
|
||
|
SBS( 200 );
|
||
|
SDRV( 0 );
|
||
|
INIT( 44100, 3, 0 ); // we need just one channel, multiple mp3s at a time would be, erm, strange...
|
||
|
}//AJH not for really cool effects, say walking past cars in a street playing different tunes, might change this later.
|
||
|
|
||
|
char song[256];
|
||
|
|
||
|
sprintf( song, "%s/%s", gEngfuncs.pfnGetGameDirectory(), pszSong);
|
||
|
|
||
|
//gEngfuncs.Con_Printf("Using fmod.dll version %f\n",VER());
|
||
|
|
||
|
if (SO)
|
||
|
{
|
||
|
m_Stream = SO( song, FSOUND_NORMAL | FSOUND_LOOP_NORMAL, 0 ,0); //AJH new version fmod uses Open
|
||
|
}
|
||
|
else if( SOF )
|
||
|
{
|
||
|
m_Stream = SOF( song, FSOUND_NORMAL | FSOUND_LOOP_NORMAL, 1 ); //AJH old version fmod OpenFile
|
||
|
}
|
||
|
if(m_Stream)
|
||
|
{
|
||
|
SPLAY( 0, m_Stream );
|
||
|
m_iIsPlaying = 1;
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_iIsPlaying = 0;
|
||
|
gEngfuncs.Con_Printf("Error: Could not load %s\n",song);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int CMP3::PlayMP3NL( const char *pszSong )
|
||
|
{
|
||
|
if( m_iIsPlaying )
|
||
|
{
|
||
|
// sound system is already initialized
|
||
|
SCL( m_Stream );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SOP( FSOUND_OUTPUT_DSOUND );
|
||
|
SBS( 200 );
|
||
|
SDRV( 0 );
|
||
|
INIT( 44100, 3, 0 ); // we need just one channel, multiple mp3s at a time would be, erm, strange...
|
||
|
}//AJH not for really cool effects, say walking past cars in a street playing different tunes, might change this later.
|
||
|
|
||
|
char song[256];
|
||
|
|
||
|
sprintf( song, "%s/%s", gEngfuncs.pfnGetGameDirectory(), pszSong);
|
||
|
|
||
|
//gEngfuncs.Con_Printf("Using fmod.dll version %f\n",VER());
|
||
|
|
||
|
if (SO)
|
||
|
{
|
||
|
m_Stream = SO( song, FSOUND_NORMAL | FSOUND_LOOP_OFF, 0 ,0); //AJH new version fmod uses Open
|
||
|
}
|
||
|
else if( SOF )
|
||
|
{
|
||
|
m_Stream = SOF( song, FSOUND_NORMAL | FSOUND_LOOP_OFF, 1 ); //AJH old version fmod OpenFile
|
||
|
}
|
||
|
if(m_Stream)
|
||
|
{
|
||
|
SPLAY( 0, m_Stream );
|
||
|
m_iIsPlaying = 1;
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_iIsPlaying = 0;
|
||
|
gEngfuncs.Con_Printf("Error: Could not load %s\n",song);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|