2020-11-06 14:56:32 +01:00
|
|
|
#include "pch.h"
|
|
|
|
#include "Sound.h"
|
|
|
|
|
2021-02-06 14:53:47 +01:00
|
|
|
|
2021-01-23 17:28:29 +01:00
|
|
|
int Sound::num_channels;
|
2021-09-16 09:57:46 +02:00
|
|
|
unsigned int Sound::enabled_flag = -1;
|
2021-01-23 17:28:29 +01:00
|
|
|
|
2021-08-27 12:29:41 +02:00
|
|
|
int Sound::Init(int voices)
|
2020-12-02 18:12:34 +01:00
|
|
|
{
|
2021-01-23 17:28:29 +01:00
|
|
|
int channelCount = voices;
|
|
|
|
if (voices > 8)
|
|
|
|
channelCount = 8;
|
|
|
|
num_channels = channelCount;
|
|
|
|
|
2021-10-01 17:55:44 +02:00
|
|
|
Mix_Init(MIX_INIT_MID);
|
2021-09-06 15:27:58 +02:00
|
|
|
return Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024);
|
2020-12-02 18:12:34 +01:00
|
|
|
}
|
|
|
|
|
2021-01-23 17:28:29 +01:00
|
|
|
void Sound::Enable(int channelFrom, int channelTo, int enableFlag)
|
2020-11-06 14:56:32 +01:00
|
|
|
{
|
2021-09-16 09:57:46 +02:00
|
|
|
enabled_flag = enableFlag ? -1 : 0;
|
2020-11-29 16:50:49 +01:00
|
|
|
}
|
2020-12-02 18:12:34 +01:00
|
|
|
|
|
|
|
void Sound::Activate()
|
|
|
|
{
|
2021-08-27 12:29:41 +02:00
|
|
|
Mix_Resume(-1);
|
2020-12-02 18:12:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void Sound::Deactivate()
|
|
|
|
{
|
2021-08-27 12:29:41 +02:00
|
|
|
Mix_Pause(-1);
|
2020-12-02 18:12:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void Sound::Close()
|
|
|
|
{
|
2021-09-22 14:50:07 +02:00
|
|
|
Mix_CloseAudio();
|
2021-08-27 12:29:41 +02:00
|
|
|
Mix_Quit();
|
2021-01-23 17:28:29 +01:00
|
|
|
}
|
|
|
|
|
2021-08-27 12:29:41 +02:00
|
|
|
void Sound::PlaySound(Mix_Chunk* wavePtr, int minChannel, int maxChannel, unsigned int dwFlags, int16_t loops)
|
2021-01-23 17:28:29 +01:00
|
|
|
{
|
2021-09-22 14:50:07 +02:00
|
|
|
if (wavePtr && enabled_flag)
|
2021-08-27 12:29:41 +02:00
|
|
|
Mix_PlayChannel(-1, wavePtr, loops);
|
2020-12-25 14:46:06 +01:00
|
|
|
}
|
|
|
|
|
2021-09-14 14:33:18 +02:00
|
|
|
Mix_Chunk* Sound::LoadWaveFile(std::string lpName)
|
2020-12-25 14:46:06 +01:00
|
|
|
{
|
2021-09-22 14:50:07 +02:00
|
|
|
auto wavFile = fopen(lpName.c_str(), "r");
|
|
|
|
if (!wavFile)
|
|
|
|
return nullptr;
|
|
|
|
fclose(wavFile);
|
|
|
|
|
2021-09-14 14:33:18 +02:00
|
|
|
return Mix_LoadWAV(lpName.c_str());
|
2020-12-25 14:46:06 +01:00
|
|
|
}
|
|
|
|
|
2021-08-27 12:29:41 +02:00
|
|
|
void Sound::FreeSound(Mix_Chunk* wave)
|
2020-12-25 14:46:06 +01:00
|
|
|
{
|
2021-08-27 12:29:41 +02:00
|
|
|
if (wave)
|
|
|
|
Mix_FreeChunk(wave);
|
2020-12-25 14:46:06 +01:00
|
|
|
}
|