audiomix: let's move those new full/channel menus up

This commit is contained in:
hap 2025-06-25 21:24:22 +02:00
parent ab72bc83dd
commit 033c012f67
2 changed files with 40 additions and 20 deletions

View File

@ -327,15 +327,15 @@ or input and adjust the volume from -96 dB (quietest) to +12 dB (loudest). Fo
channel routes, you can also select the individual emulated channel and host channel routes, you can also select the individual emulated channel and host
channel. Select **Remove this route** to remove a route. channel. Select **Remove this route** to remove a route.
Select **Add <device> full route** to add a new full route to that group. If Select **Add new full route** to add a new full route to that group. If
possible, it will be added and the menu highlight will move to the newly added possible, it will be added and the menu highlight will move to the newly added
route. If routes between the highlighted device and every host output/input route. If routes between the highlighted device and every host output/input
already exist, no route will be added. already exist, no route will be added.
Select **Add <device> channel route* to add a new channel route to that group. Select **Add new channel route* to add a new channel route to that group. If
If possible, it will be added and the menu highlight will move to the newly possible, it will be added and the menu highlight will move to the newly added
added route. If routes between all channels for the highlighted device and route. If routes between all channels for the highlighted device and every
every host output/input channel already exist, no route will be added. host output/input channel already exist, no route will be added.
Some sound modules allow channel assignments and volumes to be controlled using Some sound modules allow channel assignments and volumes to be controlled using
an external mixer interface (for example the PipeWire module for Linux has this an external mixer interface (for example the PipeWire module for Linux has this
@ -373,7 +373,7 @@ by output device chains. When editing the **Default** chain, you can restore
the built-in default value for a parameter by pressing the UI Clear key the built-in default value for a parameter by pressing the UI Clear key
(Del/Delete/Forward Delete on the keyboard by default). (Del/Delete/Forward Delete on the keyboard by default).
The Audio Events menu also allows you to configure the algorithm used for audio The Audio Effects menu also allows you to configure the algorithm used for audio
sample rate conversion. The default **LoFi** algorithm has modest CPU sample rate conversion. The default **LoFi** algorithm has modest CPU
requirements. The **HQ** algorithm provides higher quality sample rate requirements. The **HQ** algorithm provides higher quality sample rate
conversion at the expense of requiring substantially higher CPU performance. conversion at the expense of requiring substantially higher CPU performance.
@ -391,7 +391,7 @@ low-pass filter can simulate the poor high-frequency response typical of many
arcade cabinets and television sets. arcade cabinets and television sets.
The Q factor controls how sharp the transition from the stop band to the The Q factor controls how sharp the transition from the stop band to the
passband is. Higher factors provide a sharper transition. Values over 0.7 passband is. Higher factors provide a sharper transition. Values over 0.71
cause the filter to amplify frequencies close to the cutoff frequency, which cause the filter to amplify frequencies close to the cutoff frequency, which
may be surprising or undesirable. may be surprising or undesirable.

View File

@ -661,7 +661,10 @@ void menu_audio_mixer::populate()
if(cursel_line == 0xffffffff) if(cursel_line == 0xffffffff)
cursel_line = 0; cursel_line = 0;
if(m_reset_selection.m_maptype == MT_INTERNAL) if(!m_reset_item)
m_reset_item = (m_selections[0].m_maptype == MT_NONE) ? ITM_ADD_FULL : ITM_GUEST_CHANNEL;
else if(m_reset_selection.m_maptype == MT_INTERNAL)
cursel_line = 0xffffffff; cursel_line = 0xffffffff;
if((cursel_line < m_selections.size()) && (m_selections[cursel_line].m_maptype == MT_FULL)) { if((cursel_line < m_selections.size()) && (m_selections[cursel_line].m_maptype == MT_FULL)) {
@ -671,11 +674,31 @@ void menu_audio_mixer::populate()
// (Re)build the menu // (Re)build the menu
uint32_t cursel = 0; uint32_t cursel = 0;
auto const add_routes = [this, &cursel] ()
{
item_append(
_("menu-audiomix", "Add new full route"),
0,
reinterpret_cast<void *>(((cursel + 1) << 3) | ITM_ADD_FULL));
item_append(
_("menu-audiomix", "Add new channel route"),
0,
reinterpret_cast<void *>(((cursel + 1) << 3) | ITM_ADD_CHANNEL));
};
for(const auto &omap : mapping) { for(const auto &omap : mapping) {
item_append(omap.m_dev->tag(), FLAG_UI_HEADING | FLAG_DISABLE, nullptr); item_append(omap.m_dev->tag(), FLAG_UI_HEADING | FLAG_DISABLE, nullptr);
bool first = true;
for(const auto &nmap : omap.m_node_mappings) { for(const auto &nmap : omap.m_node_mappings) {
const auto &node = find_node(nmap.m_node); const auto &node = find_node(nmap.m_node);
if(first) {
first = false;
add_routes();
}
item_append(menu_item_type::SEPARATOR);
item_append( item_append(
omap.m_dev->is_output() ? _("menu-audiomix", "Output") : _("menu-audiomix", "Input"), omap.m_dev->is_output() ? _("menu-audiomix", "Output") : _("menu-audiomix", "Input"),
_("menu-audiomix", "[all]"), _("menu-audiomix", "[all]"),
@ -699,13 +722,18 @@ void menu_audio_mixer::populate()
_("menu-audiomix", "Remove this route"), _("menu-audiomix", "Remove this route"),
0, 0,
reinterpret_cast<void *>(((cursel + 1) << 3) | ITM_REMOVE)); reinterpret_cast<void *>(((cursel + 1) << 3) | ITM_REMOVE));
item_append(menu_item_type::SEPARATOR);
++cursel; ++cursel;
} }
for(const auto &cmap : omap.m_channel_mappings) { for(const auto &cmap : omap.m_channel_mappings) {
const auto &node = find_node(cmap.m_node); const auto &node = find_node(cmap.m_node);
if(first) {
first = false;
add_routes();
}
item_append(menu_item_type::SEPARATOR);
item_append( item_append(
omap.m_dev->is_output() ? _("menu-audiomix", "Output") : _("menu-audiomix", "Input"), omap.m_dev->is_output() ? _("menu-audiomix", "Output") : _("menu-audiomix", "Input"),
omap.m_dev->get_position(cmap.m_guest_channel).name(), omap.m_dev->get_position(cmap.m_guest_channel).name(),
@ -734,21 +762,13 @@ void menu_audio_mixer::populate()
_("menu-audiomix", "Remove this route"), _("menu-audiomix", "Remove this route"),
0, 0,
reinterpret_cast<void *>(((cursel + 1) << 3) | ITM_REMOVE)); reinterpret_cast<void *>(((cursel + 1) << 3) | ITM_REMOVE));
item_append(menu_item_type::SEPARATOR);
++cursel; ++cursel;
} }
if(omap.m_node_mappings.empty() && omap.m_channel_mappings.empty()) if(omap.m_node_mappings.empty() && omap.m_channel_mappings.empty()) {
add_routes();
++cursel; ++cursel;
}
item_append(
util::string_format(_("menu-audiomix", "Add %1$s full route"), omap.m_dev->tag()),
0,
reinterpret_cast<void *>((cursel << 3) | ITM_ADD_FULL));
item_append(
util::string_format(_("menu-audiomix", "Add %1$s channel route"), omap.m_dev->tag()),
0,
reinterpret_cast<void *>((cursel << 3) | ITM_ADD_CHANNEL));
} }
item_append(menu_item_type::SEPARATOR); item_append(menu_item_type::SEPARATOR);