/*
	This file is part of Warzone 2100.
	Copyright (C) 1999-2004  Eidos Interactive
	Copyright (C) 2005-2012  Warzone 2100 Project

	Warzone 2100 is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	Warzone 2100 is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Warzone 2100; if not, write to the Free Software
	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/** \file
 *  Library-specific sound library functions;
 *  these need to be re-written for each library.
 */

#ifndef __INCLUDED_LIB_SOUND_TRACKLIB_H__
#define __INCLUDED_LIB_SOUND_TRACKLIB_H__

#include "track.h"
#include "lib/framework/vector.h"

bool	sound_InitLibrary( void );
void	sound_ShutdownLibrary( void );

void	sound_FreeTrack( TRACK * psTrack );

bool	sound_Play2DSample( TRACK * psTrack, AUDIO_SAMPLE * psSample,
							bool bQueued );
bool	sound_Play3DSample( TRACK * psTrack, AUDIO_SAMPLE * psSample );
void	sound_StopSample(AUDIO_SAMPLE* psSample);
void	sound_PauseSample( AUDIO_SAMPLE * psSample );
void	sound_ResumeSample( AUDIO_SAMPLE * psSample );

AUDIO_STREAM* sound_PlayStream(PHYSFS_file* PHYSFS_fileHandle, float volume, void (*onFinished)(void*), void* user_data);

void	sound_SetSampleFreq( AUDIO_SAMPLE * psSample, SDWORD iFreq );
void	sound_SetSampleVol( AUDIO_SAMPLE * psSample, SDWORD iVol,
							bool bScale3D );

int		sound_GetNumSamples( void );
bool	sound_SampleIsFinished( AUDIO_SAMPLE * psSample );
bool	sound_QueueSamplePlaying( void );

void	sound_SetPlayerPos(Vector3f pos);
void sound_SetPlayerOrientationVector(Vector3f forward, Vector3f up);
void sound_SetPlayerOrientation(float angle);
void	sound_SetObjectPosition( AUDIO_SAMPLE *psSample );

void *	sound_GetObject( SDWORD iSample );
void	sound_SetObject( SDWORD iSample, void *pObj );

void	sound_SetCallback( SDWORD iSample, AUDIO_CALLBACK pCallBack );

void	sound_PauseAll( void );
void	sound_ResumeAll( void );
void	sound_StopAll( void );
void	sound_Update( void );
unsigned int sound_GetActiveSamplesCount(void);

UDWORD	sound_GetGameTime( void );

#endif	// __INCLUDED_LIB_SOUND_TRACKLIB_H__
