Add option for enabling/disabling automatic device scan
Some checks are pending
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux32 flags:32 name:Linux GCC 32 os:ubuntu-latest]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux64 flags:64 name:Linux GCC x64 os:ubuntu-latest]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm32 flags:arm32 name:Linux GCC ARM 32 os:ubuntu-latest]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm64 flags:arm64 name:Linux GCC ARM 64 os:ubuntu-latest]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:macos name:macOS Apple Silicon os:macos-14]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win32 flags:-A Win32 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 Win32 os:windows-2022]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win64 flags:-A x64 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 x64 os:windows-2022]) (push) Waiting to run
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:winarm64 flags:-A ARM64 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 ARM os:windows-2022]) (push) Waiting to run
CD / Create Pi Mono Setup (push) Blocked by required conditions
CD / Publishing (push) Blocked by required conditions

This commit is contained in:
Lorenzooone
2025-05-02 19:16:41 +02:00
parent 3363c9a2c7
commit 44b68f2787
6 changed files with 42 additions and 12 deletions

View File

@@ -22,6 +22,7 @@ enum AudioMenuOutAction{
AUDIO_MENU_CHANGE_DEVICE,
AUDIO_MENU_MODE_DEC,
AUDIO_MENU_MODE_INC,
AUDIO_MENU_AUTO_SCAN,
};
class AudioMenu : public OptionSelectionMenu {

View File

@@ -23,6 +23,7 @@ public:
void change_audio_mode_output(bool is_change_positive);
void change_audio_volume(bool is_change_positive);
void change_audio_mute();
void change_auto_device_scan();
void request_audio_restart();
void signal_conversion_error();
bool check_audio_restart_request();
@@ -35,6 +36,7 @@ public:
bool has_text_to_print();
std::string text_to_print();
bool get_mute();
bool get_auto_device_scan();
int get_real_volume();
bool load_audio_data(std::string key, std::string value);
std::string save_audio_data();
@@ -49,6 +51,7 @@ private:
AudioOutputType output_type;
audio_output_device_data output_device;
AudioMode mode_output;
bool periodic_output_audio_device_scan;
bool restart_request = false;
bool text_updated;
std::string text;
@@ -56,6 +59,7 @@ private:
void set_audio_output_type(int new_value);
void set_audio_mode_output(int new_value);
void set_audio_mute(bool new_mute);
void set_auto_device_scan(bool new_value);
void update_text(std::string text);
const std::string audio_mode_output_str = "audio_mode";
const std::string max_audio_latency_str = "max_audio_latency";
@@ -64,6 +68,7 @@ private:
const std::string output_type_str = "audio_output_type";
const std::string device_request_str = "audio_output_device_requested";
const std::string device_name_str = "audio_output_device_name";
const std::string auto_device_scan_str = "audio_auto_device_scan";
};
#endif

View File

@@ -49,6 +49,11 @@ static const AudioMenuOptionInfo audio_next_device_option = {
.is_inc = false, .dec_str = "", .inc_str = "", .inc_out_action = AUDIO_MENU_NO_ACTION,
.out_action = AUDIO_MENU_CHANGE_DEVICE};
static const AudioMenuOptionInfo audio_auto_scan_option = {
.base_name = "Disable Automatic Device Scan", .false_name = "Enable Automatic Device Scan",
.is_inc = false, .dec_str = "", .inc_str = "", .inc_out_action = AUDIO_MENU_NO_ACTION,
.out_action = AUDIO_MENU_AUTO_SCAN};
static const AudioMenuOptionInfo* pollable_options[] = {
&audio_volume_option,
@@ -56,6 +61,7 @@ static const AudioMenuOptionInfo* pollable_options[] = {
&audio_output_type_option,
&audio_max_latency_option,
&audio_mode_output_option,
&audio_auto_scan_option,
&audio_next_device_option,
&audio_restart_option,
};
@@ -153,6 +159,9 @@ void AudioMenu::prepare(float menu_scaling_factor, int view_size_x, int view_siz
case AUDIO_MENU_MUTE:
this->labels[index]->setText(this->setTextOptionBool(real_index, audio_data->get_mute()));
break;
case AUDIO_MENU_AUTO_SCAN:
this->labels[index]->setText(this->setTextOptionBool(real_index, audio_data->get_auto_device_scan()));
break;
default:
break;
}

View File

@@ -1594,6 +1594,9 @@ void WindowScreen::poll(bool do_everything) {
case AUDIO_MENU_RESTART:
this->audio_data->request_audio_restart();
break;
case AUDIO_MENU_AUTO_SCAN:
this->audio_data->change_auto_device_scan();
break;
case AUDIO_MENU_CHANGE_DEVICE:
this->setup_audio_devices_menu();
done = true;

View File

@@ -1,4 +1,5 @@
#include "audio_data.hpp"
#include "utils.hpp"
int searchAudioDevice(std::string device_name, std::vector<std::string> &audio_devices) {
int index = -1;
@@ -20,6 +21,11 @@ void AudioData::reset() {
this->mode_output = AUDIO_MODE_LOW_LATENCY;
this->restart_request = false;
this->text_updated = false;
#if (defined(RASPI) || defined(ANDROID_COMPILATION))
this->periodic_output_audio_device_scan = false;
#else
this->periodic_output_audio_device_scan = true;
#endif
this->output_device.preference_requested = false;
this->output_device.preferred = "";
}
@@ -74,6 +80,10 @@ void AudioData::change_audio_mute() {
this->update_text("Volume: " + std::to_string(this->get_final_volume()) + "%");
}
void AudioData::change_auto_device_scan() {
this->set_auto_device_scan(!this->periodic_output_audio_device_scan);
}
void AudioData::request_audio_restart() {
this->restart_request = true;
this->update_text("Restarting audio...");
@@ -189,11 +199,19 @@ bool AudioData::get_mute() {
return this->mute;
}
bool AudioData::get_auto_device_scan() {
return this->periodic_output_audio_device_scan;
}
bool AudioData::load_audio_data(std::string key, std::string value) {
if (key == this->mute_str) {
this->set_audio_mute(std::stoi(value));
return true;
}
if (key == this->auto_device_scan_str) {
this->set_auto_device_scan(std::stoi(value));
return true;
}
if (key == this->volume_str) {
this->set_audio_volume(std::stoi(value));
return true;
@@ -224,6 +242,7 @@ bool AudioData::load_audio_data(std::string key, std::string value) {
std::string AudioData::save_audio_data() {
std::string out_str = "";
out_str += this->mute_str + "=" + std::to_string(this->mute) + "\n";
out_str += this->auto_device_scan_str + "=" + std::to_string(this->periodic_output_audio_device_scan) + "\n";
out_str += this->volume_str + "=" + std::to_string(this->volume) + "\n";
out_str += this->max_audio_latency_str + "=" + std::to_string(this->max_audio_latency) + "\n";
out_str += this->output_type_str + "=" + std::to_string(this->output_type) + "\n";
@@ -268,3 +287,7 @@ void AudioData::set_audio_volume(int new_volume) {
void AudioData::set_audio_mute(bool new_mute) {
this->mute = new_mute;
}
void AudioData::set_auto_device_scan(bool new_value) {
this->periodic_output_audio_device_scan = new_value;
}

View File

@@ -28,17 +28,6 @@
#define NO_DATA_CONSECUTIVE_THRESHOLD 4
#define TIME_AUDIO_DEVICE_CHECK 0.25
#ifdef PERIODIC_AUDIO_DEVICE_RESCANNING
#undef PERIODIC_AUDIO_DEVICE_RESCANNING
#endif
#if (defined(RASPI) || defined(ANDROID_COMPILATION))
#define PERIODIC_AUDIO_DEVICE_RESCANNING false
#else
#define PERIODIC_AUDIO_DEVICE_RESCANNING true
#endif
struct override_all_data {
override_win_data override_top_bot_data;
override_win_data override_top_data;
@@ -396,7 +385,7 @@ static bool handleAudioDeviceChanges(Audio &audio, AudioData *audio_data, std::o
int index = -1;
bool success = false;
bool preference_requested = in_use_audio_output_device_data.preference_requested;
bool check_audio_device = PERIODIC_AUDIO_DEVICE_RESCANNING;
bool check_audio_device = audio_data->get_auto_device_scan();
check_audio_device = check_audio_device || ((old_in_use_audio_output_device_data.preference_requested != in_use_audio_output_device_data.preference_requested) || (old_in_use_audio_output_device_data.preferred != in_use_audio_output_device_data.preferred));
if(check_audio_device && preference_requested) {
std::vector<std::string> audio_devices = sf::PlaybackDevice::getAvailableDevices();