summaryrefslogtreecommitdiff
path: root/utils/scenemanager/sound.h
blob: 0199701c5e1fd26b6473e442c33e44d4bf19fd0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef SOUND_H
#define SOUND_H
#pragma once

class CAudioMixer;

class CAudioInput
{
public:
	// factory to create a suitable audio input for this system
	static CAudioInput *Create( void );

	// base class needs virtual destructor
	virtual ~CAudioInput( void ) {}

	// ------------------- interface ------------------------

	// Returns the current count of available samples
	virtual int SampleCount( void ) = 0;
	
	// returns the size of each sample in bytes
	virtual int SampleSize( void ) = 0;
	
	// returns the sampling rate of the data
	virtual int SampleRate( void ) = 0;

	// returns a pointer to the available data
	virtual void *SampleData( void ) = 0;

	// release the available data (mark as done)
	virtual void SampleRelease( void ) = 0;

	// returns the mono/stereo status of this device (true if stereo)
	virtual bool IsStereo( void ) = 0;

	// begin sampling
	virtual void Start( void ) = 0;

	// stop sampling
	virtual void Stop( void ) = 0;
};

class CAudioSource;

class CAudioOutput
{
public:
	// factory to create a suitable audio output for this system
	static CAudioOutput *Create( void );

	// base class needs virtual destructor
	virtual ~CAudioOutput( void ) {}

	// ------------------- interface ------------------------

	// returns the size of each sample in bytes
	virtual int		SampleSize( void ) = 0;
	
	// returns the sampling rate of the data
	virtual int		SampleRate( void ) = 0;

	// returns the mono/stereo status of this device (true if stereo)
	virtual bool	IsStereo( void ) = 0;

	// move up to time (time is absolute)
	virtual void	Update( float dt ) = 0;

	virtual void	Flush( void ) = 0;

	// Hook up a filter to the input channel
	virtual void	AddSource( CAudioMixer *pSource ) = 0;

	virtual void	StopSounds( void ) = 0;

	virtual void	FreeChannel( int channel ) = 0;

	virtual int		FindSourceIndex( CAudioMixer *pSource ) = 0;

	virtual float	GetAmountofTimeAhead( void ) = 0;

	virtual int		GetNumberofSamplesAhead( void ) = 0;

	virtual CAudioMixer *GetMixerForSource( CAudioSource *pDevice ) = 0;
};


int AudioResample( void *pInput,	int inCount,	int inSize,		bool inStereo,	int inRate,
				    void *pOutput,	int outCount,	int outSize,	bool outStereo, int outRate );

#endif		// SOUND_H