forked from 0ad/0ad
Fix sound errors when no sound card is detected.
Based on a patch by: @Imarok Refs: #3285 Differential Revision: https://code.wildfiregames.com/D1481 This was SVN commit r24551.
This commit is contained in:
parent
687a9335f0
commit
205486d6f3
@ -915,7 +915,7 @@ bool Init(const CmdLineArgs& args, int flags)
|
|||||||
CNetHost::Initialize();
|
CNetHost::Initialize();
|
||||||
|
|
||||||
#if CONFIG2_AUDIO
|
#if CONFIG2_AUDIO
|
||||||
if (!args.Has("autostart-nonvisual"))
|
if (!args.Has("autostart-nonvisual") && !g_DisableAudio)
|
||||||
ISoundManager::CreateSoundManager();
|
ISoundManager::CreateSoundManager();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2020 Wildfire Games.
|
/* Copyright (C) 2021 Wildfire Games.
|
||||||
* This file is part of 0 A.D.
|
* This file is part of 0 A.D.
|
||||||
*
|
*
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
@ -143,8 +143,11 @@ void RunHardwareDetection()
|
|||||||
scriptInterface.SetProperty(settings, "gfx_card", gfx::CardName());
|
scriptInterface.SetProperty(settings, "gfx_card", gfx::CardName());
|
||||||
scriptInterface.SetProperty(settings, "gfx_drv_ver", gfx::DriverInfo());
|
scriptInterface.SetProperty(settings, "gfx_drv_ver", gfx::DriverInfo());
|
||||||
#if CONFIG2_AUDIO
|
#if CONFIG2_AUDIO
|
||||||
|
if (g_SoundManager)
|
||||||
|
{
|
||||||
scriptInterface.SetProperty(settings, "snd_card", g_SoundManager->GetSoundCardNames());
|
scriptInterface.SetProperty(settings, "snd_card", g_SoundManager->GetSoundCardNames());
|
||||||
scriptInterface.SetProperty(settings, "snd_drv_ver", g_SoundManager->GetOpenALVersion());
|
scriptInterface.SetProperty(settings, "snd_drv_ver", g_SoundManager->GetOpenALVersion());
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
ReportSDL(scriptInterface, settings);
|
ReportSDL(scriptInterface, settings);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2020 Wildfire Games.
|
/* Copyright (C) 2021 Wildfire Games.
|
||||||
* This file is part of 0 A.D.
|
* This file is part of 0 A.D.
|
||||||
*
|
*
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
@ -137,8 +137,15 @@ void WriteSystemInfo()
|
|||||||
fprintf(f, "Video Mode : %dx%d:%d\n", g_VideoMode.GetXRes(), g_VideoMode.GetYRes(), g_VideoMode.GetBPP());
|
fprintf(f, "Video Mode : %dx%d:%d\n", g_VideoMode.GetXRes(), g_VideoMode.GetYRes(), g_VideoMode.GetBPP());
|
||||||
|
|
||||||
#if CONFIG2_AUDIO
|
#if CONFIG2_AUDIO
|
||||||
|
if (g_SoundManager)
|
||||||
|
{
|
||||||
fprintf(f, "Sound Card : %s\n", g_SoundManager->GetSoundCardNames().c_str());
|
fprintf(f, "Sound Card : %s\n", g_SoundManager->GetSoundCardNames().c_str());
|
||||||
fprintf(f, "Sound Drivers : %s\n", g_SoundManager->GetOpenALVersion().c_str());
|
fprintf(f, "Sound Drivers : %s\n", g_SoundManager->GetOpenALVersion().c_str());
|
||||||
|
}
|
||||||
|
else if(g_DisableAudio)
|
||||||
|
fprintf(f, "Sound : Game was ran without audio\n");
|
||||||
|
else
|
||||||
|
fprintf(f, "Sound : No audio device was found\n");
|
||||||
#else
|
#else
|
||||||
fprintf(f, "Sound : Game was compiled without audio\n");
|
fprintf(f, "Sound : Game was compiled without audio\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -184,11 +184,18 @@ private:
|
|||||||
|
|
||||||
void ISoundManager::CreateSoundManager()
|
void ISoundManager::CreateSoundManager()
|
||||||
{
|
{
|
||||||
if (!g_SoundManager)
|
if (g_SoundManager)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ALCdevice* device = alcOpenDevice(nullptr);
|
||||||
|
if (!device)
|
||||||
{
|
{
|
||||||
g_SoundManager = new CSoundManager();
|
LOGWARNING("No audio device was found.");
|
||||||
g_SoundManager->StartWorker();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_SoundManager = new CSoundManager(device);
|
||||||
|
g_SoundManager->StartWorker();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISoundManager::SetEnabled(bool doEnable)
|
void ISoundManager::SetEnabled(bool doEnable)
|
||||||
@ -227,8 +234,8 @@ Status CSoundManager::ReloadChangedFiles(const VfsPath& UNUSED(path))
|
|||||||
return static_cast<CSoundManager*>(param)->ReloadChangedFiles(path);
|
return static_cast<CSoundManager*>(param)->ReloadChangedFiles(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSoundManager::CSoundManager()
|
CSoundManager::CSoundManager(ALCdevice* device)
|
||||||
: m_Context(nullptr), m_Device(nullptr), m_ALSourceBuffer(nullptr),
|
: m_Context(nullptr), m_Device(device), m_ALSourceBuffer(nullptr),
|
||||||
m_CurrentTune(nullptr), m_CurrentEnvirons(nullptr),
|
m_CurrentTune(nullptr), m_CurrentEnvirons(nullptr),
|
||||||
m_Worker(nullptr), m_DistressMutex(), m_PlayListItems(nullptr), m_SoundGroups(),
|
m_Worker(nullptr), m_DistressMutex(), m_PlayListItems(nullptr), m_SoundGroups(),
|
||||||
m_Gain(.5f), m_MusicGain(.5f), m_AmbientGain(.5f), m_ActionGain(.5f), m_UIGain(.5f),
|
m_Gain(.5f), m_MusicGain(.5f), m_AmbientGain(.5f), m_ActionGain(.5f), m_UIGain(.5f),
|
||||||
@ -305,7 +312,9 @@ Status CSoundManager::AlcInit()
|
|||||||
{
|
{
|
||||||
Status ret = INFO::OK;
|
Status ret = INFO::OK;
|
||||||
|
|
||||||
m_Device = alcOpenDevice(NULL);
|
if(!m_Device)
|
||||||
|
m_Device = alcOpenDevice(nullptr);
|
||||||
|
|
||||||
if (m_Device)
|
if (m_Device)
|
||||||
{
|
{
|
||||||
ALCint attribs[] = {ALC_STEREO_SOURCES, 16, 0};
|
ALCint attribs[] = {ALC_STEREO_SOURCES, 16, 0};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2020 Wildfire Games.
|
/* Copyright (C) 2021 Wildfire Games.
|
||||||
* This file is part of 0 A.D.
|
* This file is part of 0 A.D.
|
||||||
*
|
*
|
||||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||||
@ -96,7 +96,7 @@ protected:
|
|||||||
CStr8 m_SoundCardNames;
|
CStr8 m_SoundCardNames;
|
||||||
CStr8 m_OpenALVersion;
|
CStr8 m_OpenALVersion;
|
||||||
public:
|
public:
|
||||||
CSoundManager();
|
CSoundManager(ALCdevice* device);
|
||||||
virtual ~CSoundManager();
|
virtual ~CSoundManager();
|
||||||
|
|
||||||
void StartWorker();
|
void StartWorker();
|
||||||
|
Loading…
Reference in New Issue
Block a user