Create TV audio device at the start of the application

This commit is contained in:
SSimco
2023-06-22 13:18:03 +03:00
parent 5a4e27e702
commit 8006ec36ef
4 changed files with 63 additions and 3 deletions
+6 -1
View File
@@ -13,7 +13,7 @@
#include "config/NetworkSettings.h"
#include "input/InputManager.h"
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanAPI.h"
#include "AndroidGui/AndroidAudio.h"
#include "JNIUtils.h"
@@ -297,6 +297,11 @@ Java_info_cemu_Cemu_NativeLibrary_initializeEmulation(JNIEnv *env, jclass clazz)
InputManager::instance().load();
InitializeGlobalVulkan();
createCemuDirectories();
g_config.Load();
auto &config = g_config.data();
AndroidAudio::createAudioDevice(IAudioAPI::AudioAPI::Cubeb,
config.tv_channels,
config.tv_volume);
}
extern "C"
JNIEXPORT void JNICALL
+44
View File
@@ -0,0 +1,44 @@
#include "AndroidAudio.h"
#include "Cafe/OS/libs/snd_core/ax.h"
#include "audio/IAudioAPI.h"
#if HAS_CUBEB
#include "audio/CubebAPI.h"
#endif // HAS_CUBEB
namespace AndroidAudio
{
void createAudioDevice(IAudioAPI::AudioAPI audioApi, sint32 channels, sint32 volume, bool isTV)
{
static constexpr int AX_FRAMES_PER_GROUP = 4;
std::unique_lock lock(g_audioMutex);
auto& audioDevice = isTV ? g_tvAudio : g_padAudio;
switch (audioApi)
{
#if HAS_CUBEB
case IAudioAPI::AudioAPI::Cubeb:
{
audioDevice.reset();
std::shared_ptr<CubebAPI::CubebDeviceDescription> deviceDescriptionPtr = std::make_shared<CubebAPI::CubebDeviceDescription>(nullptr, std::string(), std::wstring());
audioDevice = IAudioAPI::CreateDevice(IAudioAPI::AudioAPI::Cubeb, deviceDescriptionPtr, 48000, channels, snd_core::AX_SAMPLES_PER_3MS_48KHZ * AX_FRAMES_PER_GROUP, 16);
audioDevice->SetVolume(volume);
break;
}
#endif // HAS_CUBEB
default:
cemuLog_log(LogType::Force, fmt::format("Invalid audio api: {}", audioApi));
break;
}
}
void setAudioVolume(sint32 volume, bool isTV)
{
std::shared_lock lock(g_audioMutex);
auto& audioDevice = isTV ? g_tvAudio : g_padAudio;
if (audioDevice)
audioDevice->SetVolume(volume);
}
}; // namespace AndroidAudio
+9
View File
@@ -0,0 +1,9 @@
#pragma once
#include "audio/IAudioAPI.h"
namespace AndroidAudio
{
void createAudioDevice(IAudioAPI::AudioAPI audioApi, sint32 channels, sint32 volume, bool isTV = true);
void setAudioVolume(sint32 volume, bool isTV = true);
}; // namespace AndroidAudio
+4 -2
View File
@@ -1,5 +1,7 @@
add_library(CemuAndroidGui
AndroidAudio.cpp
AndroidAudio.h
AndroidGuiWrapper.cpp
AndroidGuiWrapper.h
GameIconLoader.cpp
@@ -11,7 +13,7 @@ add_library(CemuAndroidGui
Image.h
Utils.cpp
Utils.h
)
)
target_include_directories(CemuAndroidGui PUBLIC "../")
@@ -30,4 +32,4 @@ target_link_libraries(CemuAndroidGui PRIVATE
OpenSSL::Crypto
pugixml::pugixml
ZArchive::zarchive
)
)