[Android Audio] Be able to turn audio on or off

This commit is contained in:
zilmar 2016-08-11 20:46:03 +10:00
parent a277fc0a60
commit a3fd417e27
2 changed files with 81 additions and 62 deletions

View File

@ -13,7 +13,15 @@
#include "trace.h"
#include "main.h"
void SetupAudioSettings (void)
short Set_EnableAudio = 0;
extern bool g_AudioEnabled;
void SettingsChanged(void *)
{
g_AudioEnabled = GetSystemSetting(Set_EnableAudio) != 0;
}
void SetupAudioSettings(void)
{
SetModuleName("AndroidAudio");
RegisterSetting(Output_SwapChannels, Data_DWORD_General, "SwapChannels", "", 0, NULL);
@ -29,4 +37,11 @@ void SetupAudioSettings (void)
g_ModuleLogLevel[TraceAudioInitShutdown] = GetSetting(Logging_LogAudioInitShutdown);
g_ModuleLogLevel[TraceAudioInterface] = GetSetting(Logging_LogAudioInterface);
Set_EnableAudio = FindSystemSettingId("Enable Audio");
if (Set_EnableAudio != 0)
{
SettingsRegisterChange(true, Set_EnableAudio, NULL, SettingsChanged);
g_AudioEnabled = GetSystemSetting(Set_EnableAudio) != 0;
}
}

View File

@ -36,6 +36,8 @@ typedef struct threadLock_
} threadLock;
#endif
bool g_AudioEnabled = true;
/* Read header for type definition */
AUDIO_INFO g_AudioInfo;
@ -102,7 +104,7 @@ SLAndroidSimpleBufferQueueItf g_bufferQueue = NULL;
bool g_PluginInit = false;
void PluginInit ( void )
void PluginInit(void)
{
if (g_PluginInit)
{
@ -139,27 +141,27 @@ static void CloseAudio(void)
/* Delete Primary buffer */
if (g_primaryBuffer != NULL)
{
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Delete g_primaryBuffer (%p)",g_primaryBuffer);
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Delete g_primaryBuffer (%p)", g_primaryBuffer);
g_primaryBufferBytes = 0;
delete [] g_primaryBuffer;
delete[] g_primaryBuffer;
g_primaryBuffer = NULL;
}
/* Delete Secondary buffers */
if (g_secondaryBuffers != NULL)
{
for(uint32_t i = 0; i < g_SecondaryBufferNbr; i++)
for (uint32_t i = 0; i < g_SecondaryBufferNbr; i++)
{
if (g_secondaryBuffers[i] != NULL)
{
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Delete g_secondaryBuffers[%d] (%p)",i,g_secondaryBuffers[i]);
delete [] g_secondaryBuffers[i];
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Delete g_secondaryBuffers[%d] (%p)", i, g_secondaryBuffers[i]);
delete[] g_secondaryBuffers[i];
g_secondaryBuffers[i] = NULL;
}
}
g_secondaryBufferBytes = 0;
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Delete g_secondaryBuffers (%p)",g_secondaryBuffers);
delete [] g_secondaryBuffers;
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Delete g_secondaryBuffers (%p)", g_secondaryBuffers);
delete[] g_secondaryBuffers;
g_secondaryBuffers = NULL;
}
#ifdef ANDROID
@ -204,11 +206,10 @@ static void CloseAudio(void)
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Done");
}
static bool CreatePrimaryBuffer(void)
{
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Start");
unsigned int primaryBytes = (unsigned int) (g_PrimaryBufferSize * N64_SAMPLE_BYTES);
unsigned int primaryBytes = (unsigned int)(g_PrimaryBufferSize * N64_SAMPLE_BYTES);
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Allocating memory for primary audio buffer: %i bytes.", primaryBytes);
@ -231,7 +232,7 @@ static bool CreateSecondaryBuffers(void)
{
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Start");
bool status = true;
unsigned int secondaryBytes = (unsigned int) (g_SecondaryBufferSize * SLES_SAMPLE_BYTES);
unsigned int secondaryBytes = (unsigned int)(g_SecondaryBufferSize * SLES_SAMPLE_BYTES);
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Allocating memory for %d secondary audio buffers: %i bytes.", g_SecondaryBufferNbr, secondaryBytes);
@ -246,7 +247,7 @@ static bool CreateSecondaryBuffers(void)
}
/* Allocate size of each secondary buffers */
for(uint32_t i = 0; i < g_SecondaryBufferNbr; i++)
for (uint32_t i = 0; i < g_SecondaryBufferNbr; i++)
{
g_secondaryBuffers[i] = new uint8_t[secondaryBytes];
@ -260,23 +261,23 @@ static bool CreateSecondaryBuffers(void)
}
g_secondaryBufferBytes = secondaryBytes;
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Done (res: %s)",status?"True":"False");
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Done (res: %s)", status ? "True" : "False");
return status;
}
static void InitializeAudio(uint32_t freq)
{
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Start (freq: %d)",freq);
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Start (freq: %d)", freq);
if (freq < 4000)
{
WriteTrace(TraceAudioInitShutdown, TraceInfo, "Sometimes a bad frequency is requested so ignore it (freq: %d)",freq);
WriteTrace(TraceAudioInitShutdown, TraceInfo, "Sometimes a bad frequency is requested so ignore it (freq: %d)", freq);
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Done");
return;
}
if (g_GameFreq == freq && g_primaryBuffer != NULL)
{
WriteTrace(TraceAudioInitShutdown, TraceInfo, "we are already using this frequency, so ignore it (freq: %d)",freq);
WriteTrace(TraceAudioInitShutdown, TraceInfo, "we are already using this frequency, so ignore it (freq: %d)", freq);
WriteTrace(TraceAudioInitShutdown, TraceDebug, "Done");
return;
}
@ -326,7 +327,7 @@ static void InitializeAudio(uint32_t freq)
CloseAudio();
/* Create primary buffer */
if(!CreatePrimaryBuffer())
if (!CreatePrimaryBuffer())
{
WriteTrace(TraceAudioInitShutdown, TraceError, "CreatePrimaryBuffer failed");
CloseAudio();
@ -336,7 +337,7 @@ static void InitializeAudio(uint32_t freq)
}
/* Create secondary buffers */
if(!CreateSecondaryBuffers())
if (!CreateSecondaryBuffers())
{
WriteTrace(TraceAudioInitShutdown, TraceError, "CreateSecondaryBuffers failed");
CloseAudio();
@ -574,14 +575,14 @@ static int resample(unsigned char *input, int /*input_avail*/, int oldsamplerate
if (newsamplerate >= oldsamplerate)
{
int sldf = oldsamplerate;
int const2 = 2*sldf;
int const2 = 2 * sldf;
int dldf = newsamplerate;
int const1 = const2 - 2*dldf;
int const1 = const2 - 2 * dldf;
int criteria = const2 - dldf;
for (i = 0; i < output_needed/4; i++)
for (i = 0; i < output_needed / 4; i++)
{
pdest[i] = psrc[j];
if(criteria >= 0)
if (criteria >= 0)
{
++j;
criteria += const1;
@ -591,7 +592,7 @@ static int resample(unsigned char *input, int /*input_avail*/, int oldsamplerate
return j * 4; //number of bytes consumed
}
// newsamplerate < oldsamplerate, this only happens when speed_factor > 1
for (i = 0; i < output_needed/4; i++)
for (i = 0; i < output_needed / 4; i++)
{
j = i * oldsamplerate / newsamplerate;
pdest[i] = psrc[j];
@ -607,7 +608,7 @@ EXPORT void CALL PluginLoaded(void)
EXPORT void CALL AiDacrateChanged(int SystemType)
{
WriteTrace(TraceAudioInterface, TraceDebug, "Start (SystemType: %d)",SystemType);
WriteTrace(TraceAudioInterface, TraceDebug, "Start (SystemType: %d)", SystemType);
if (!g_PluginInit)
{
WriteTrace(TraceAudioInterface, TraceNotice, "Plugin has not been initilized");
@ -636,7 +637,10 @@ EXPORT void CALL AiDacrateChanged(int SystemType)
EXPORT void CALL AiLenChanged(void)
{
WriteTrace(TraceAudioInterface, TraceDebug, "Start (DRAM_ADDR = 0x%X LenReg = 0x%X)", *g_AudioInfo.AI__LEN_REG, *g_AudioInfo.AI__DRAM_ADDR_REG);
if (!g_AudioEnabled)
{
return;
}
uint32_t LenReg = *g_AudioInfo.AI__LEN_REG;
uint8_t * p = g_AudioInfo.RDRAM + (*g_AudioInfo.AI__DRAM_ADDR_REG & 0xFFFFFF);
@ -645,27 +649,27 @@ EXPORT void CALL AiLenChanged(void)
{
unsigned int i;
for ( i = 0 ; i < LenReg ; i += 4 )
for (i = 0; i < LenReg; i += 4)
{
if(g_SwapChannels == 0)
if (g_SwapChannels == 0)
{
/* Left channel */
g_primaryBuffer[ g_primaryBufferPos + i ] = p[ i + 2 ];
g_primaryBuffer[ g_primaryBufferPos + i + 1 ] = p[ i + 3 ];
g_primaryBuffer[g_primaryBufferPos + i] = p[i + 2];
g_primaryBuffer[g_primaryBufferPos + i + 1] = p[i + 3];
/* Right channel */
g_primaryBuffer[ g_primaryBufferPos + i + 2 ] = p[ i ];
g_primaryBuffer[ g_primaryBufferPos + i + 3 ] = p[ i + 1 ];
g_primaryBuffer[g_primaryBufferPos + i + 2] = p[i];
g_primaryBuffer[g_primaryBufferPos + i + 3] = p[i + 1];
}
else
{
/* Left channel */
g_primaryBuffer[ g_primaryBufferPos + i ] = p[ i ];
g_primaryBuffer[ g_primaryBufferPos + i + 1 ] = p[ i + 1 ];
g_primaryBuffer[g_primaryBufferPos + i] = p[i];
g_primaryBuffer[g_primaryBufferPos + i + 1] = p[i + 1];
/* Right channel */
g_primaryBuffer[ g_primaryBufferPos + i + 2 ] = p[ i + 2];
g_primaryBuffer[ g_primaryBufferPos + i + 3 ] = p[ i + 3 ];
g_primaryBuffer[g_primaryBufferPos + i + 2] = p[i + 2];
g_primaryBuffer[g_primaryBufferPos + i + 3] = p[i + 3];
}
}
g_primaryBufferPos += i;
@ -711,7 +715,7 @@ EXPORT void CALL AiLenChanged(void)
g_secondaryBufferIndex++;
if(g_secondaryBufferIndex > (g_SecondaryBufferNbr-1))
if (g_secondaryBufferIndex > (g_SecondaryBufferNbr - 1))
{
g_secondaryBufferIndex = 0;
}