mirror of
https://github.com/love2d/love.git
synced 2026-08-16 08:11:02 +02:00
Merge pull request #1646 from cigumo/ios-audio-interruption-handling
adds iOS audio interruption handling and recovery
This commit is contained in:
@@ -291,6 +291,12 @@ public:
|
||||
**/
|
||||
static bool setMixWithSystem(bool mix);
|
||||
|
||||
/**
|
||||
* Pause/resume audio context
|
||||
*/
|
||||
virtual void pauseContext() = 0;
|
||||
virtual void resumeContext() = 0;
|
||||
|
||||
private:
|
||||
|
||||
static StringMap<DistanceModel, DISTANCE_MAX_ENUM>::Entry distanceModelEntries[];
|
||||
|
||||
@@ -203,6 +203,15 @@ bool Audio::isEFXsupported() const
|
||||
return false;
|
||||
}
|
||||
|
||||
void Audio::pauseContext()
|
||||
{
|
||||
}
|
||||
|
||||
void Audio::resumeContext()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
} // null
|
||||
} // audio
|
||||
} // love
|
||||
|
||||
@@ -86,6 +86,9 @@ public:
|
||||
int getMaxSourceEffects() const;
|
||||
bool isEFXsupported() const;
|
||||
|
||||
void pauseContext();
|
||||
void resumeContext();
|
||||
|
||||
private:
|
||||
float volume;
|
||||
DistanceModel distanceModel;
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
#ifdef LOVE_IOS
|
||||
#include "common/ios.h"
|
||||
#endif
|
||||
|
||||
namespace love
|
||||
{
|
||||
namespace audio
|
||||
@@ -189,10 +193,18 @@ Audio::Audio()
|
||||
|
||||
poolThread = new PoolThread(pool);
|
||||
poolThread->start();
|
||||
|
||||
#ifdef LOVE_IOS
|
||||
love::ios::initAudioSessionInterruptionHandler();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
Audio::~Audio()
|
||||
{
|
||||
#ifdef LOVE_IOS
|
||||
love::ios::destroyAudioSessionInterruptionHandler();
|
||||
#endif
|
||||
poolThread->setFinish();
|
||||
poolThread->wait();
|
||||
|
||||
@@ -293,6 +305,17 @@ std::vector<love::audio::Source*> Audio::pause()
|
||||
return Source::pause(pool);
|
||||
}
|
||||
|
||||
void Audio::pauseContext()
|
||||
{
|
||||
alcMakeContextCurrent(nullptr);
|
||||
}
|
||||
|
||||
void Audio::resumeContext()
|
||||
{
|
||||
if (context && alcGetCurrentContext() != context)
|
||||
alcMakeContextCurrent(context);
|
||||
}
|
||||
|
||||
void Audio::setVolume(float volume)
|
||||
{
|
||||
alListenerf(AL_GAIN, volume);
|
||||
|
||||
@@ -95,6 +95,8 @@ public:
|
||||
void pause(love::audio::Source *source);
|
||||
void pause(const std::vector<love::audio::Source*> &sources);
|
||||
std::vector<love::audio::Source*> pause();
|
||||
void pauseContext();
|
||||
void resumeContext();
|
||||
void setVolume(float volume);
|
||||
float getVolume() const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user