mirror of
https://github.com/izzy2lost/WeeU.git
synced 2026-07-06 00:19:59 -07:00
Create TV audio device at the start of the application
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user