World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Класс AudioSample16
+ Граф наследования:AudioSample16:
+ Граф связей класса AudioSample16:

Открытые члены

 AudioSample16 ()
 
virtual ~AudioSample16 ()
 
virtual bool Open (PAudioDataSource data_source)
 
virtual bool IsValid ()
 
virtual bool Play (bool loop=false, bool positioned=false)
 
virtual bool Stop ()
 
virtual bool SetVolume (float volume)
 
virtual bool SetPosition (float x, float y, float z, float max_dist)
 
- Открытые члены унаследованные от IAudioSample
 IAudioSample ()
 
virtual ~IAudioSample ()
 

Защищенные члены

void Close ()
 

Защищенные данные

PAudioDataSource pDataSource
 
CallBackTimer updater
 
ALenum al_format
 
ALuint al_source
 
ALsizei al_sample_rate
 
bool loop
 
bool positioned
 

Подробное описание

См. определение в файле OpenALSoundProvider.cpp строка 668

Конструктор(ы)

◆ AudioSample16()

AudioSample16::AudioSample16 ( )

См. определение в файле OpenALSoundProvider.cpp строка 694

694  {
695  al_format = AL_FORMAT_STEREO16;
696  al_source = -1;
697  al_sample_rate = 0;
698  loop = false;
699  positioned = true;
700 }

Перекрестные ссылки al_format, al_sample_rate, al_source, loop и positioned.

◆ ~AudioSample16()

AudioSample16::~AudioSample16 ( )
virtual

См. определение в файле OpenALSoundProvider.cpp строка 702

702 { Close(); }

Перекрестные ссылки Close().

+ Граф вызовов:

Методы

◆ Open()

bool AudioSample16::Open ( PAudioDataSource  data_source)
virtual

Замещает IAudioSample.

См. определение в файле OpenALSoundProvider.cpp строка 721

721  {
722  pDataSource = data_source;
723  if (!pDataSource) {
724  return false;
725  }
726 
727  if (!pDataSource->Open()) {
728  return false;
729  }
730 
732  if (CheckError()) {
733  return false;
734  }
735 
736  alSourcei(al_source, AL_LOOPING, AL_FALSE);
737  alSourcef(al_source, AL_PITCH, 1.f);
738  alSourcef(al_source, AL_GAIN, 1.f);
739  alSourcef(al_source, AL_REFERENCE_DISTANCE, 6.5f); // 300 / 50
740  alSourcef(al_source, AL_MAX_DISTANCE, 2000.f);
741  alSource3f(al_source, AL_POSITION, 0.f, 0.f, 0.f);
742  alSource3f(al_source, AL_VELOCITY, 0.f, 0.f, 0.f);
743 
744  al_sample_rate = pDataSource->GetSampleRate();
745 
746  unsigned int num_channels = data_source->GetChannelCount();
747  switch (num_channels) {
748  case 1:
749  al_format = AL_FORMAT_MONO16;
750  break;
751  case 2:
752  al_format = AL_FORMAT_STEREO16;
753  break;
754  default:
755  if (alIsExtensionPresent("AL_EXT_MCFORMATS")) {
756  switch (num_channels) {
757  case 4:
758  al_format = alGetEnumValue("AL_FORMAT_QUAD16");
759  break;
760  case 6:
761  al_format = alGetEnumValue("AL_FORMAT_51CHN16");
762  break;
763  case 7:
764  al_format = alGetEnumValue("AL_FORMAT_61CHN16");
765  break;
766  case 8:
767  al_format = alGetEnumValue("AL_FORMAT_71CHN16");
768  break;
769  }
770  }
771  Error("Unsupported number of audio channels: %u", num_channels);
772  }
773 
774  while (true) {
775  PMemBuffer buffer = pDataSource->GetNextBuffer();
776  if (!buffer) {
777  break;
778  }
779 
780  ALuint al_buffer = -1;
781  alGenBuffers(1, &al_buffer);
782  if (CheckError()) {
783  Close();
784  break;
785  }
786 
787  alBufferData(al_buffer, al_format, buffer->GetData(), buffer->GetSize(), al_sample_rate);
788  if (CheckError()) {
789  Close();
790  break;
791  }
792 
793  alSourceQueueBuffers(al_source, 1, &al_buffer);
794  if (CheckError()) {
795  Close();
796  break;
797  }
798  }
799 
800  return true;
801 }

Перекрестные ссылки al_format, al_sample_rate, al_source, alBufferData(), alGenBuffers(), alGenSources(), alGetEnumValue(), alIsExtensionPresent(), alSource3f(), alSourcef(), alSourcei(), alSourceQueueBuffers(), CheckError(), Close() и pDataSource.

+ Граф вызовов:

◆ IsValid()

bool AudioSample16::IsValid ( )
virtual

Замещает IAudioSample.

См. определение в файле OpenALSoundProvider.cpp строка 817

817 { return (alIsSource(al_source) != 0); }

Перекрестные ссылки al_source и alIsSource().

Используется в Play(), SetPosition(), SetVolume() и Stop().

+ Граф вызовов:
+ Граф вызова функции:

◆ Play()

bool AudioSample16::Play ( bool  loop = false,
bool  positioned = false 
)
virtual

Замещает IAudioSample.

См. определение в файле OpenALSoundProvider.cpp строка 819

819  {
820  if (!IsValid()) {
821  return false;
822  }
823 
824  loop = loop_;
825  positioned = positioned_;
826 
827  alSourcei(al_source, AL_SOURCE_RELATIVE, positioned ? AL_FALSE : AL_TRUE);
828  // alSource3f(al_source, AL_POSITION, 0.f, 0.f, 0.f);
829  alSource3f(al_source, AL_VELOCITY, 0.f, 0.f, 0.f);
830 
831  alSourcei(al_source, AL_LOOPING, loop ? AL_TRUE : AL_FALSE);
832 
833  ALint status;
834  alGetSourcei(al_source, AL_SOURCE_STATE, &status);
835  if (status == AL_PLAYING) {
836  return true;
837  }
838 
840  if (CheckError()) {
841  return false;
842  }
843 
844  return true;
845 }

Перекрестные ссылки al_source, alGetSourcei(), alSource3f(), alSourcei(), alSourcePlay(), CheckError(), IsValid(), loop и positioned.

+ Граф вызовов:

◆ Stop()

bool AudioSample16::Stop ( )
virtual

Замещает IAudioSample.

См. определение в файле OpenALSoundProvider.cpp строка 847

847  {
848  if (!IsValid()) {
849  return false;
850  }
851 
853  if (CheckError()) {
854  return false;
855  }
856 
857  return true;
858 }

Перекрестные ссылки al_source, alSourceStop(), CheckError() и IsValid().

+ Граф вызовов:

◆ SetVolume()

bool AudioSample16::SetVolume ( float  volume)
virtual

Замещает IAudioSample.

См. определение в файле OpenALSoundProvider.cpp строка 860

860  {
861  if (!IsValid()) {
862  return false;
863  }
864 
865  alSourcef(al_source, AL_GAIN, volume);
866  if (CheckError()) {
867  return false;
868  }
869 
870  return true;
871 }

Перекрестные ссылки al_source, alSourcef(), CheckError() и IsValid().

+ Граф вызовов:

◆ SetPosition()

bool AudioSample16::SetPosition ( float  x,
float  y,
float  z,
float  max_dist 
)
virtual

Замещает IAudioSample.

См. определение в файле OpenALSoundProvider.cpp строка 803

803  {
804  if (!IsValid()) {
805  return false;
806  }
807 
808  alSource3f(al_source, AL_POSITION, x, y, z);
809  alSourcef(al_source, AL_MAX_DISTANCE, max_dist);
810  if (CheckError()) {
811  return false;
812  }
813 
814  return true;
815 }

Перекрестные ссылки al_source, alSource3f(), alSourcef(), CheckError() и IsValid().

+ Граф вызовов:

◆ Close()

void AudioSample16::Close ( )
protected

См. определение в файле OpenALSoundProvider.cpp строка 704

704  {
705  updater.Stop();
706  if (pDataSource) {
707  pDataSource->Close();
708  }
709 
710  if (alIsSource(al_source) != 0) {
712  CheckError();
714  CheckError();
715  }
716 
717  al_source = -1;
718  al_sample_rate = 0;
719 }

Перекрестные ссылки al_sample_rate, al_source, alDeleteSources(), alIsSource(), alSourceStop(), CheckError(), pDataSource, CallBackTimer::Stop() и updater.

Используется в Open() и ~AudioSample16().

+ Граф вызовов:
+ Граф вызова функции:

Данные класса

◆ pDataSource

PAudioDataSource AudioSample16::pDataSource
protected

См. определение в файле OpenALSoundProvider.cpp строка 684

Используется в Close() и Open().

◆ updater

CallBackTimer AudioSample16::updater
protected

См. определение в файле OpenALSoundProvider.cpp строка 685

Используется в Close().

◆ al_format

ALenum AudioSample16::al_format
protected

См. определение в файле OpenALSoundProvider.cpp строка 686

Используется в AudioSample16() и Open().

◆ al_source

ALuint AudioSample16::al_source
protected

См. определение в файле OpenALSoundProvider.cpp строка 687

Используется в AudioSample16(), Close(), IsValid(), Open(), Play(), SetPosition(), SetVolume() и Stop().

◆ al_sample_rate

ALsizei AudioSample16::al_sample_rate
protected

См. определение в файле OpenALSoundProvider.cpp строка 688

Используется в AudioSample16(), Close() и Open().

◆ loop

bool AudioSample16::loop
protected

См. определение в файле OpenALSoundProvider.cpp строка 690

Используется в AudioSample16() и Play().

◆ positioned

bool AudioSample16::positioned
protected

См. определение в файле OpenALSoundProvider.cpp строка 691

Используется в AudioSample16() и Play().


Объявления и описания членов класса находятся в файле:
alGenSources
AL_API void AL_APIENTRY alGenSources(ALsizei n, ALuint *sources)
CheckError
bool CheckError()
Definition: OpenALSoundProvider.cpp:31
alSourcef
AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value)
z
GLdouble GLdouble z
Definition: SDL_opengl_glext.h:407
alIsExtensionPresent
AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname)
AudioSample16::IsValid
virtual bool IsValid()
Definition: OpenALSoundProvider.cpp:817
AudioSample16::al_format
ALenum al_format
Definition: OpenALSoundProvider.cpp:686
AudioSample16::loop
bool loop
Definition: OpenALSoundProvider.cpp:690
alBufferData
AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq)
alSourceStop
AL_API void AL_APIENTRY alSourceStop(ALuint source)
CallBackTimer::Stop
void Stop()
Definition: OpenALSoundProvider.cpp:409
buffer
EGLContext EGLenum EGLClientBuffer buffer
Definition: SDL_egl.h:952
y
EGLSurface EGLint EGLint y
Definition: SDL_egl.h:1596
x
EGLSurface EGLint x
Definition: SDL_egl.h:1596
alGetSourcei
AL_API void AL_APIENTRY alGetSourcei(ALuint source, ALenum param, ALint *value)
alSourceQueueBuffers
AL_API void AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei nb, const ALuint *buffers)
AudioSample16::al_source
ALuint al_source
Definition: OpenALSoundProvider.cpp:687
f
GLfloat f
Definition: SDL_opengl_glext.h:1873
AudioSample16::Close
void Close()
Definition: OpenALSoundProvider.cpp:704
AudioSample16::al_sample_rate
ALsizei al_sample_rate
Definition: OpenALSoundProvider.cpp:688
alIsSource
AL_API ALboolean AL_APIENTRY alIsSource(ALuint source)
alSource3f
AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3)
ALint
int ALint
Definition: al.h:56
alSourcePlay
AL_API void AL_APIENTRY alSourcePlay(ALuint source)
AudioSample16::updater
CallBackTimer updater
Definition: OpenALSoundProvider.cpp:685
alDeleteSources
AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources)
alSourcei
AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value)
alGetEnumValue
AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename)
ALuint
unsigned int ALuint
Definition: al.h:59
alGenBuffers
AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers)
AudioSample16::positioned
bool positioned
Definition: OpenALSoundProvider.cpp:691
AudioSample16::pDataSource
PAudioDataSource pDataSource
Definition: OpenALSoundProvider.cpp:684
PMemBuffer
std::shared_ptr< IMemBuffer > PMemBuffer
Definition: MemBuffer.h:13