mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-22 06:05:38 +00:00
Fixed an issue where defining the same sound file for multiple navigation sounds would log an error to es_log.txt on theme change.
This commit is contained in:
parent
ad973e1ffa
commit
60a6776b53
|
@ -59,7 +59,7 @@ void AudioManager::init()
|
||||||
sRequestedAudioFormat.callback = mixAudio;
|
sRequestedAudioFormat.callback = mixAudio;
|
||||||
sRequestedAudioFormat.userdata = nullptr;
|
sRequestedAudioFormat.userdata = nullptr;
|
||||||
|
|
||||||
for (int i = 0; i < SDL_GetNumAudioDevices(0); ++i) {
|
for (int i {0}; i < SDL_GetNumAudioDevices(0); ++i) {
|
||||||
LOG(LogInfo) << "Detected playback device: " << SDL_GetAudioDeviceName(i, 0);
|
LOG(LogInfo) << "Detected playback device: " << SDL_GetAudioDeviceName(i, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ void AudioManager::deinit()
|
||||||
void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
||||||
{
|
{
|
||||||
// Process navigation sounds.
|
// Process navigation sounds.
|
||||||
bool stillPlaying = false;
|
bool stillPlaying {false};
|
||||||
|
|
||||||
// Initialize the buffer to "silence".
|
// Initialize the buffer to "silence".
|
||||||
SDL_memset(stream, 0, len);
|
SDL_memset(stream, 0, len);
|
||||||
|
@ -134,10 +134,10 @@ void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
||||||
// Iterate through all our samples.
|
// Iterate through all our samples.
|
||||||
std::vector<std::shared_ptr<Sound>>::const_iterator soundIt = sSoundVector.cbegin();
|
std::vector<std::shared_ptr<Sound>>::const_iterator soundIt = sSoundVector.cbegin();
|
||||||
while (soundIt != sSoundVector.cend()) {
|
while (soundIt != sSoundVector.cend()) {
|
||||||
std::shared_ptr<Sound> sound = *soundIt;
|
std::shared_ptr<Sound> sound {*soundIt};
|
||||||
if (sound->isPlaying()) {
|
if (sound->isPlaying()) {
|
||||||
// Calculate rest length of current sample.
|
// Calculate rest length of current sample.
|
||||||
Uint32 restLength = (sound->getLength() - sound->getPosition());
|
Uint32 restLength {sound->getLength() - sound->getPosition()};
|
||||||
if (restLength > static_cast<Uint32>(len)) {
|
if (restLength > static_cast<Uint32>(len)) {
|
||||||
// If stream length is smaller than sample length, clip it.
|
// If stream length is smaller than sample length, clip it.
|
||||||
restLength = len;
|
restLength = len;
|
||||||
|
@ -159,7 +159,7 @@ void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process video stream audio generated by VideoFFmpegComponent.
|
// Process video stream audio generated by VideoFFmpegComponent.
|
||||||
int streamLength = SDL_AudioStreamAvailable(sConversionStream);
|
int streamLength {SDL_AudioStreamAvailable(sConversionStream)};
|
||||||
|
|
||||||
if (streamLength <= 0) {
|
if (streamLength <= 0) {
|
||||||
// If nothing is playing, pause the device until there is more audio to output.
|
// If nothing is playing, pause the device until there is more audio to output.
|
||||||
|
@ -168,7 +168,7 @@ void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int chunkLength = 0;
|
int chunkLength {0};
|
||||||
|
|
||||||
// Cap the chunk length to the buffer size.
|
// Cap the chunk length to the buffer size.
|
||||||
if (streamLength > len)
|
if (streamLength > len)
|
||||||
|
@ -178,8 +178,8 @@ void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
||||||
|
|
||||||
std::vector<Uint8> converted(chunkLength);
|
std::vector<Uint8> converted(chunkLength);
|
||||||
|
|
||||||
int processedLength =
|
int processedLength {
|
||||||
SDL_AudioStreamGet(sConversionStream, static_cast<void*>(&converted.at(0)), chunkLength);
|
SDL_AudioStreamGet(sConversionStream, static_cast<void*>(&converted.at(0)), chunkLength)};
|
||||||
|
|
||||||
if (processedLength < 0) {
|
if (processedLength < 0) {
|
||||||
LOG(LogError) << "AudioManager::mixAudio(): Couldn't convert sound chunk:";
|
LOG(LogError) << "AudioManager::mixAudio(): Couldn't convert sound chunk:";
|
||||||
|
@ -196,7 +196,7 @@ void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len)
|
||||||
// stream is not played when the video player has been stopped. Otherwise there would
|
// stream is not played when the video player has been stopped. Otherwise there would
|
||||||
// be a short time period when the audio would keep playing after the video was stopped
|
// be a short time period when the audio would keep playing after the video was stopped
|
||||||
// and before the stream was cleared in clearStream().
|
// and before the stream was cleared in clearStream().
|
||||||
bool muteStream = sMuteStream;
|
bool muteStream {sMuteStream};
|
||||||
if (muteStream) {
|
if (muteStream) {
|
||||||
SDL_MixAudioFormat(stream, &converted.at(0), sAudioFormat.format, processedLength, 0);
|
SDL_MixAudioFormat(stream, &converted.at(0), sAudioFormat.format, processedLength, 0);
|
||||||
}
|
}
|
||||||
|
@ -219,14 +219,13 @@ void AudioManager::registerSound(std::shared_ptr<Sound> sound)
|
||||||
|
|
||||||
void AudioManager::unregisterSound(std::shared_ptr<Sound> sound)
|
void AudioManager::unregisterSound(std::shared_ptr<Sound> sound)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < sSoundVector.size(); ++i) {
|
for (unsigned int i {0}; i < sSoundVector.size(); ++i) {
|
||||||
if (sSoundVector.at(i) == sound) {
|
if (sSoundVector.at(i) == sound) {
|
||||||
sSoundVector[i]->stop();
|
sSoundVector[i]->stop();
|
||||||
sSoundVector.erase(sSoundVector.cbegin() + i);
|
sSoundVector.erase(sSoundVector.cbegin() + i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(LogError) << "AudioManager - tried to unregister a sound that wasn't registered";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioManager::play()
|
void AudioManager::play()
|
||||||
|
@ -238,7 +237,7 @@ void AudioManager::play()
|
||||||
void AudioManager::stop()
|
void AudioManager::stop()
|
||||||
{
|
{
|
||||||
// Stop playing all Sounds.
|
// Stop playing all Sounds.
|
||||||
for (unsigned int i = 0; i < sSoundVector.size(); ++i) {
|
for (unsigned int i {0}; i < sSoundVector.size(); ++i) {
|
||||||
if (sSoundVector.at(i)->isPlaying())
|
if (sSoundVector.at(i)->isPlaying())
|
||||||
sSoundVector[i]->stop();
|
sSoundVector[i]->stop();
|
||||||
}
|
}
|
||||||
|
@ -248,7 +247,7 @@ void AudioManager::stop()
|
||||||
|
|
||||||
void AudioManager::setupAudioStream(int sampleRate)
|
void AudioManager::setupAudioStream(int sampleRate)
|
||||||
{
|
{
|
||||||
SDL_AudioStatus audioStatus = SDL_GetAudioDeviceStatus(sAudioDevice);
|
SDL_AudioStatus audioStatus {SDL_GetAudioDeviceStatus(sAudioDevice)};
|
||||||
|
|
||||||
// It's very important to pause the audio device before setting up the stream,
|
// It's very important to pause the audio device before setting up the stream,
|
||||||
// or we may get random crashes if attempting to play samples at the same time.
|
// or we may get random crashes if attempting to play samples at the same time.
|
||||||
|
|
Loading…
Reference in a new issue