103 lines
3.6 KiB
C++
103 lines
3.6 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $Workfile: $
|
|
// $Date: $
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
|
|
#ifndef SND_AUDIO_SOURCE_H
|
|
#define SND_AUDIO_SOURCE_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "tier0/platform.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
class CAudioSource;
|
|
class IAudioDevice;
|
|
struct channel_t;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: This is an instance of an audio source.
|
|
// Mixers are attached to channels and reference an audio
|
|
//source. Mixers are specific to the sample format and source format. Mixers are
|
|
//never re-used, so they can track instance data like sample position,
|
|
//fractional sample, stream cache, faders, etc.
|
|
//-----------------------------------------------------------------------------
|
|
abstract_class CAudioMixer {
|
|
public:
|
|
virtual ~CAudioMixer(void) {}
|
|
|
|
// UNDONE: time compress
|
|
virtual bool MixDataToDevice(IAudioDevice * pDevice, channel_t * pChannel,
|
|
int startSample, int sampleCount,
|
|
int outputRate, bool forward = true) = 0;
|
|
virtual void IncrementSamples(channel_t * pChannel, int startSample,
|
|
int sampleCount, int outputRate,
|
|
bool forward = true) = 0;
|
|
virtual bool SkipSamples(IAudioDevice * pDevice, channel_t * pChannel,
|
|
int startSample, int sampleCount, int outputRate,
|
|
bool forward = true) = 0;
|
|
|
|
virtual CAudioSource *GetSource(void) = 0;
|
|
|
|
virtual int GetSamplePosition(void) = 0;
|
|
virtual int GetScubPosition(void) = 0;
|
|
|
|
virtual bool SetSamplePosition(int position, bool scrubbing = false) = 0;
|
|
virtual void SetLoopPosition(int position) = 0;
|
|
virtual int GetStartPosition(void) = 0;
|
|
|
|
virtual bool GetActive(void) = 0;
|
|
virtual void SetActive(bool active) = 0;
|
|
|
|
virtual void SetModelIndex(int index) = 0;
|
|
virtual int GetModelIndex(void) const = 0;
|
|
|
|
virtual void SetDirection(bool forward) = 0;
|
|
virtual bool GetDirection(void) const = 0;
|
|
|
|
virtual void SetAutoDelete(bool autodelete) = 0;
|
|
virtual bool GetAutoDelete(void) const = 0;
|
|
|
|
virtual void SetVolume(float volume) = 0;
|
|
virtual channel_t *GetChannel() = 0;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: A source is an abstraction for a stream, cached file, or procedural
|
|
// source of audio.
|
|
//-----------------------------------------------------------------------------
|
|
class CSentence;
|
|
|
|
abstract_class CAudioSource {
|
|
public:
|
|
CAudioSource(void);
|
|
virtual ~CAudioSource(void);
|
|
|
|
// Create an instance (mixer) of this audio source
|
|
virtual CAudioMixer *CreateMixer(void) = 0;
|
|
virtual int GetOutputData(void **pData, int samplePosition, int sampleCount,
|
|
bool forward = true) = 0;
|
|
virtual int SampleRate(void) = 0;
|
|
virtual int SampleSize(void) = 0;
|
|
virtual int SampleCount(void) = 0;
|
|
virtual float TrueSampleSize(void) = 0;
|
|
virtual bool IsLooped(void) = 0;
|
|
virtual bool IsStreaming(void) = 0;
|
|
virtual float GetRunningLength(void) = 0;
|
|
virtual int GetNumChannels() = 0;
|
|
|
|
virtual CSentence *GetSentence(void) { return NULL; };
|
|
};
|
|
|
|
extern CAudioSource *AudioSource_Create(const char *pName);
|
|
|
|
#endif // SND_AUDIO_SOURCE_H
|