This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

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