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

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

 AudioTrackS16 ()
 
virtual ~AudioTrackS16 ()
 
virtual bool Open (PAudioDataSource data_source)
 
virtual bool IsValid ()
 
virtual bool Play ()
 
virtual bool Stop ()
 
virtual bool Pause ()
 
virtual bool Resume ()
 
virtual bool SetVolume (float volume)
 
virtual float GetVolume ()
 
- Открытые члены унаследованные от IAudioTrack
 IAudioTrack ()
 
virtual ~IAudioTrack ()
 

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

void Close ()
 
void DrainBuffers ()
 
void Update ()
 

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

PAudioDataSource pDataSource
 
CallBackTimer updater
 
ALenum al_format
 
ALuint al_source
 
ALsizei al_sample_rate
 
size_t uiReservedData
 
size_t uiReservedDataMinimum
 

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

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

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

◆ AudioTrackS16()

AudioTrackS16::AudioTrackS16 ( )

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

457  {
458  al_format = AL_FORMAT_STEREO16;
459  al_source = -1;
460  al_sample_rate = 0;
461  uiReservedData = 0;
463 }

Перекрестные ссылки al_format, al_sample_rate, al_source, uiReservedData и uiReservedDataMinimum.

◆ ~AudioTrackS16()

AudioTrackS16::~AudioTrackS16 ( )
virtual

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

465 { Close(); }

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

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

Методы

◆ Open()

bool AudioTrackS16::Open ( PAudioDataSource  data_source)
virtual

Замещает IAudioTrack.

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

467  {
468  pDataSource = data_source;
469  if (!pDataSource) {
470  return false;
471  }
472 
473  if (!pDataSource->Open()) {
474  return false;
475  }
476 
478  if (CheckError()) {
479  return false;
480  }
481 
482  alSourcei(al_source, AL_LOOPING, AL_FALSE);
483  alSourcef(al_source, AL_PITCH, 1.f);
484  alSourcef(al_source, AL_GAIN, 1.f);
485  alSourcei(al_source, AL_SOURCE_RELATIVE, AL_TRUE);
486  alSource3f(al_source, AL_POSITION, 0.f, 0.f, 0.f);
487  alSource3f(al_source, AL_VELOCITY, 0.f, 0.f, 0.f);
488 
489  al_sample_rate = pDataSource->GetSampleRate();
490 
491  uiReservedData = 0;
492  uiReservedDataMinimum = 1000 * (al_sample_rate / 1000) * 4;
493 
494  return true;
495 }

Перекрестные ссылки al_sample_rate, al_source, alGenSources(), alSource3f(), alSourcef(), alSourcei(), CheckError(), pDataSource, uiReservedData и uiReservedDataMinimum.

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

◆ IsValid()

bool AudioTrackS16::IsValid ( )
virtual

Замещает IAudioTrack.

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

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

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

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

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

◆ Play()

bool AudioTrackS16::Play ( )
virtual

Замещает IAudioTrack.

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

499  {
500  if (!IsValid()) {
501  return false;
502  }
503 
504  ALint status;
505  alGetSourcei(al_source, AL_SOURCE_STATE, &status);
506  if (status == AL_PLAYING) {
507  return true;
508  }
509 
510  Update();
511 
513  if (CheckError()) {
514  return false;
515  }
516 
517  updater.Start(10, [this]() { Update(); });
518 
519  return true;
520 }

Перекрестные ссылки al_source, alGetSourcei(), alSourcePlay(), CheckError(), IsValid(), CallBackTimer::Start(), Update() и updater.

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

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

◆ Stop()

bool AudioTrackS16::Stop ( )
virtual

Замещает IAudioTrack.

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

522  {
523  if (!IsValid()) {
524  return false;
525  }
526 
527  Close();
528 
529  return true;
530 }

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

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

◆ Pause()

bool AudioTrackS16::Pause ( )
virtual

Замещает IAudioTrack.

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

532  {
533  if (!IsValid()) {
534  return false;
535  }
536 
538  if (CheckError()) {
539  return false;
540  }
541 
542  updater.Stop();
543 
544  return true;
545 }

Перекрестные ссылки al_source, alSourcePause(), CheckError(), IsValid(), CallBackTimer::Stop() и updater.

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

◆ Resume()

bool AudioTrackS16::Resume ( )
virtual

Замещает IAudioTrack.

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

547 { return Play(); }

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

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

◆ SetVolume()

bool AudioTrackS16::SetVolume ( float  volume)
virtual

Замещает IAudioTrack.

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

549  {
550  if (!IsValid()) {
551  return false;
552  }
553 
554  alSourcef(al_source, AL_GAIN, volume);
555  if (CheckError()) {
556  return false;
557  }
558 
559  return true;
560 }

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

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

◆ GetVolume()

float AudioTrackS16::GetVolume ( )
virtual

Замещает IAudioTrack.

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

562  {
563  if (!IsValid()) {
564  return 0.f;
565  }
566 
567  ALfloat volume = 0.f;
568  alGetSourcef(al_source, AL_GAIN, &volume);
569  if (CheckError()) {
570  volume = 0.f;
571  }
572  return volume;
573 }

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

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

◆ Close()

void AudioTrackS16::Close ( )
protected

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

575  {
576  updater.Stop();
577  if (pDataSource) {
578  pDataSource->Close();
579  }
580 
581  if (alIsSource(al_source) != 0) {
583  CheckError();
585  CheckError();
586  }
587 
588  al_source = -1;
589  al_sample_rate = 0;
590  uiReservedData = 0;
592 }

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

Используется в Stop(), Update() и ~AudioTrackS16().

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

◆ DrainBuffers()

void AudioTrackS16::DrainBuffers ( )
protected

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

594  {
595  ALint num_processed_buffers = 0;
596  alGetSourcei(al_source, AL_BUFFERS_PROCESSED, &num_processed_buffers);
597  if (num_processed_buffers <= 0) {
598  return;
599  }
600 
601  ALuint *processed_buffer_ids = new ALuint[num_processed_buffers];
602  if (CheckError()) {
603  log("OpenAL: Faile to get played buffers.");
604  } else {
605  for (ALint i = 0; i < num_processed_buffers; i++) {
606  ALuint buffer = processed_buffer_ids[i];
608  if (CheckError()) {
609  log("OpenAL: Faile to unqueue played buffer.");
610  } else {
611  ALint size = 0;
612  alGetBufferi(buffer, AL_SIZE, &size);
613  uiReservedData -= size;
614  alDeleteBuffers(1, &buffer);
615  if (CheckError()) {
616  log("OpenAL: Faile to delete played buffer.");
617  }
618  }
619  }
620  }
621  delete[] processed_buffer_ids;
622 }

Перекрестные ссылки al_source, alDeleteBuffers(), alGetBufferi(), alGetSourcei(), alSourceUnqueueBuffers(), CheckError(), log() и uiReservedData.

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

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

◆ Update()

void AudioTrackS16::Update ( )
protected

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

624  {
625  DrainBuffers();
626 
628  PMemBuffer buffer = pDataSource->GetNextBuffer();
629 
630  if (!buffer) {
631  return;
632  }
633 
634  ALuint al_buffer = -1;
635  alGenBuffers(1, &al_buffer);
636  if (CheckError()) {
637  Close();
638  return;
639  }
640 
641  alBufferData(al_buffer, al_format, buffer->GetData(), buffer->GetSize(), al_sample_rate);
642  if (CheckError()) {
643  Close();
644  return;
645  }
646 
647  alSourceQueueBuffers(al_source, 1, &al_buffer);
648  if (CheckError()) {
649  Close();
650  return;
651  }
652 
653  uiReservedData += buffer->GetSize();
654  }
655 }

Перекрестные ссылки al_format, al_sample_rate, al_source, alBufferData(), alGenBuffers(), alSourceQueueBuffers(), CheckError(), Close(), DrainBuffers(), pDataSource, uiReservedData и uiReservedDataMinimum.

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

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

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

◆ pDataSource

PAudioDataSource AudioTrackS16::pDataSource
protected

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

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

◆ updater

CallBackTimer AudioTrackS16::updater
protected

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

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

◆ al_format

ALenum AudioTrackS16::al_format
protected

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

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

◆ al_source

ALuint AudioTrackS16::al_source
protected

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

Используется в AudioTrackS16(), Close(), DrainBuffers(), GetVolume(), IsValid(), Open(), Pause(), Play(), SetVolume() и Update().

◆ al_sample_rate

ALsizei AudioTrackS16::al_sample_rate
protected

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

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

◆ uiReservedData

size_t AudioTrackS16::uiReservedData
protected

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

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

◆ uiReservedDataMinimum

size_t AudioTrackS16::uiReservedDataMinimum
protected

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

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


Объявления и описания членов класса находятся в файле:
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)
CallBackTimer::Start
void Start(int interval, std::function< void(void)> func)
Definition: OpenALSoundProvider.cpp:395
AudioTrackS16::al_format
ALenum al_format
Definition: OpenALSoundProvider.cpp:450
AudioTrackS16::Update
void Update()
Definition: OpenALSoundProvider.cpp:624
alBufferData
AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq)
alSourceUnqueueBuffers
AL_API void AL_APIENTRY alSourceUnqueueBuffers(ALuint source, ALsizei nb, ALuint *buffers)
AudioTrackS16::al_source
ALuint al_source
Definition: OpenALSoundProvider.cpp:451
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
AudioTrackS16::Close
void Close()
Definition: OpenALSoundProvider.cpp:575
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)
AudioTrackS16::uiReservedData
size_t uiReservedData
Definition: OpenALSoundProvider.cpp:453
AudioTrackS16::IsValid
virtual bool IsValid()
Definition: OpenALSoundProvider.cpp:497
alGetBufferi
AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value)
f
GLfloat f
Definition: SDL_opengl_glext.h:1873
AudioTrackS16::pDataSource
PAudioDataSource pDataSource
Definition: OpenALSoundProvider.cpp:448
AudioTrackS16::DrainBuffers
void DrainBuffers()
Definition: OpenALSoundProvider.cpp:594
alDeleteBuffers
AL_API void AL_APIENTRY alDeleteBuffers(ALsizei n, const ALuint *buffers)
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)
AudioTrackS16::Play
virtual bool Play()
Definition: OpenALSoundProvider.cpp:499
ALint
int ALint
Definition: al.h:56
alSourcePlay
AL_API void AL_APIENTRY alSourcePlay(ALuint source)
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)
alSourcePause
AL_API void AL_APIENTRY alSourcePause(ALuint source)
ALuint
unsigned int ALuint
Definition: al.h:59
log
void log(const char *format,...)
Definition: OpenALSoundProvider.cpp:24
AudioTrackS16::uiReservedDataMinimum
size_t uiReservedDataMinimum
Definition: OpenALSoundProvider.cpp:454
alGenBuffers
AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers)
AudioTrackS16::updater
CallBackTimer updater
Definition: OpenALSoundProvider.cpp:449
size
GLsizeiptr size
Definition: SDL_opengl_glext.h:540
ALfloat
float ALfloat
Definition: al.h:68
PMemBuffer
std::shared_ptr< IMemBuffer > PMemBuffer
Definition: MemBuffer.h:13
AudioTrackS16::al_sample_rate
ALsizei al_sample_rate
Definition: OpenALSoundProvider.cpp:452
alGetSourcef
AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value)