📄 openalsource.h
字号:
// OpenALSource.h: interface for the COpenALSource class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_OPENALSOURCE_H__00A75D94_11A5_484F_B92B_5E3BB7A7A601__INCLUDED_)
#define AFX_OPENALSOURCE_H__00A75D94_11A5_484F_B92B_5E3BB7A7A601__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <al.h> // main openAL header file
#include <alu.h> // Open AL utilities header
#include <stdio.h>
#include "RefCountPtr.h"
#include "OpenALBuffer.h"
namespace AudioEngine {
class COpenALSource;
// smart pointer to COpenALSource
class COpenALSourcePtr : public CRefCountPtr<COpenALSource>
{
public:
explicit COpenALSourcePtr(COpenALSource* p = NULL);
void Release();
};
class COpenALSource
{
public:
friend class COpenALManager;
COpenALSource();
virtual ~COpenALSource();
unsigned int GetID() { return(m_ID); }
void LinkToBuffer(COpenALBufferPtr linkto);
void Play();
void Pause();
void Stop();
void Rewind();
void PlayFromStart() { Rewind(); Play(); }
// properties
void SetPitch(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_PITCH, value); }
float GetPitch() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_PITCH, &value);
return(value);
}
void SetGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_GAIN, value); }
float GetGain() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_GAIN, &value);
return(value);
}
void SetMinGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_MIN_GAIN, value); }
float GetMinGain() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_MIN_GAIN, &value);
return(value);
}
void SetMaxGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_MAX_GAIN, value); }
float GetMaxGain() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_MAX_GAIN, &value);
return(value);
}
void SetMaxDistance(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_MAX_DISTANCE, value); }
float GetMaxDistance() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_MAX_DISTANCE, &value);
return(value);
}
void SetRolloffFactor(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_ROLLOFF_FACTOR, value); }
float GetRolloffFactor() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_ROLLOFF_FACTOR, &value);
return(value);
}
void SetConeOuterGain(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_CONE_OUTER_GAIN, value); }
float GetConeOuterGain() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_CONE_OUTER_GAIN, &value);
return(value);
}
void SetConeInnerAngle(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_CONE_INNER_ANGLE, value); }
float GetConeInnerAngle() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_CONE_INNER_ANGLE, &value);
return(value);
}
void SetConeOuterAngle(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_CONE_OUTER_ANGLE, value); }
float GetConeOuterAngle() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_CONE_OUTER_ANGLE, &value);
return(value);
}
void SetReferenceDistance(float value) { if (alIsSource(m_ID) == AL_TRUE) alSourcef(m_ID, AL_REFERENCE_DISTANCE, value); }
float GetReferenceDistance() {
float value = 0.0f; if (alIsSource(m_ID) == AL_TRUE) alGetSourcef(m_ID, AL_REFERENCE_DISTANCE, &value);
return(value);
}
void SetPosition(float x, float y, float z) { if (alIsSource(m_ID) == AL_TRUE) alSource3f(m_ID, AL_POSITION, x, y, -z); }
void GetPosition(float &x, float &y, float &z) {
x = y = z = 0.0f;
if (alIsSource(m_ID) == AL_TRUE) alGetSource3f(m_ID, AL_POSITION, &x, &y, &z);
z *= -1;
}
void SetVelocity(float x, float y, float z) { if (alIsSource(m_ID) == AL_TRUE) alSource3f(m_ID, AL_VELOCITY, x, y, -z); }
void GetVelocity(float &x, float &y, float &z) {
x = y = z = 0.0f;
if (alIsSource(m_ID) == AL_TRUE) alGetSource3f(m_ID, AL_VELOCITY, &x, &y, &z);
z *= -1;
}
void SetDirection(float x, float y, float z) { if (alIsSource(m_ID) == AL_TRUE) alSource3f(m_ID, AL_DIRECTION, x, y, -z); }
void GetDirection(float &x, float &y, float &z) {
x = y = z = 0.0f;
if (alIsSource(m_ID) == AL_TRUE) alGetSource3f(m_ID, AL_DIRECTION, &x, &y, &z);
z *= -1;
}
void SetSourceRelative(int value) { if (alIsSource(m_ID) == AL_TRUE) alSourcei(m_ID, AL_SOURCE_RELATIVE, value); }
int GetSourceRelative() {
int value = 0; if (alIsSource(m_ID) == AL_TRUE) alGetSourcei(m_ID, AL_SOURCE_RELATIVE, &value);
return(value);
}
void SetLooping(int value) { if (alIsSource(m_ID) == AL_TRUE) alSourcei(m_ID, AL_LOOPING, value); }
int GetLooping() {
int value = 0; if (alIsSource(m_ID) == AL_TRUE) alGetSourcei(m_ID, AL_LOOPING, &value);
return(value);
}
protected:
unsigned int m_ID;
COpenALBufferPtr m_Buffer;
};
} // namespace
#endif // !defined(AFX_OPENALSOURCE_H__00A75D94_11A5_484F_B92B_5E3BB7A7A601__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -