support more than 2 output channels
up to 16 on JACK to-do: add more mixer settings
This commit is contained in:
parent
77f7fcd555
commit
71e40dc015
11 changed files with 127 additions and 42 deletions
|
|
@ -73,6 +73,22 @@ const char* audioBackends[]={
|
|||
"SDL"
|
||||
};
|
||||
|
||||
const bool isProAudio[]={
|
||||
true,
|
||||
false
|
||||
};
|
||||
|
||||
const char* nonProAudioOuts[]={
|
||||
"Mono",
|
||||
"Stereo",
|
||||
"What?",
|
||||
"Quadraphonic",
|
||||
"What?",
|
||||
"5.1 Surround",
|
||||
"What?",
|
||||
"7.1 Surround"
|
||||
};
|
||||
|
||||
const char* audioQualities[]={
|
||||
"High",
|
||||
"Low"
|
||||
|
|
@ -192,6 +208,11 @@ const char* specificControls[18]={
|
|||
settings.audioBufSize=x; \
|
||||
}
|
||||
|
||||
#define CHANS_SELECTABLE(x) \
|
||||
if (ImGui::Selectable(nonProAudioOuts[x-1],settings.audioChans==x)) { \
|
||||
settings.audioChans=x; \
|
||||
}
|
||||
|
||||
#define UI_COLOR_CONFIG(what,label) \
|
||||
if (ImGui::ColorEdit4(label "##CC_" #what,(float*)&uiColors[what])) { \
|
||||
applyUISettings(false); \
|
||||
|
|
@ -676,9 +697,16 @@ void FurnaceGUI::drawSettings() {
|
|||
ImVec2 settingsViewSize=ImGui::GetContentRegionAvail();
|
||||
settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y;
|
||||
if (ImGui::BeginChild("SettingsView",settingsViewSize)) {
|
||||
#ifdef HAVE_JACK
|
||||
ImGui::Text("Backend");
|
||||
ImGui::SameLine();
|
||||
ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2);
|
||||
int prevAudioEngine=settings.audioEngine;
|
||||
if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) {
|
||||
if (settings.audioEngine!=prevAudioEngine) {
|
||||
if (!isProAudio[settings.audioEngine]) settings.audioChans=2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ImGui::Text("Device");
|
||||
ImGui::SameLine();
|
||||
|
|
@ -711,6 +739,27 @@ void FurnaceGUI::drawSettings() {
|
|||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
if (isProAudio[settings.audioEngine]) {
|
||||
ImGui::Text("Outputs");
|
||||
ImGui::SameLine();
|
||||
if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) {
|
||||
if (settings.audioChans<1) settings.audioChans=1;
|
||||
if (settings.audioChans>16) settings.audioChans=16;
|
||||
}
|
||||
} else {
|
||||
ImGui::Text("Channels");
|
||||
ImGui::SameLine();
|
||||
String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1];
|
||||
if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) {
|
||||
CHANS_SELECTABLE(1);
|
||||
CHANS_SELECTABLE(2);
|
||||
CHANS_SELECTABLE(4);
|
||||
CHANS_SELECTABLE(6);
|
||||
CHANS_SELECTABLE(8);
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Text("Buffer size");
|
||||
ImGui::SameLine();
|
||||
String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate));
|
||||
|
|
@ -757,8 +806,8 @@ void FurnaceGUI::drawSettings() {
|
|||
TAAudioDesc& audioWant=e->getAudioDescWant();
|
||||
TAAudioDesc& audioGot=e->getAudioDescGot();
|
||||
|
||||
ImGui::Text("want: %d samples @ %.0fHz",audioWant.bufsize,audioWant.rate);
|
||||
ImGui::Text("got: %d samples @ %.0fHz",audioGot.bufsize,audioGot.rate);
|
||||
ImGui::Text("want: %d samples @ %.0fHz (%d channels)",audioWant.bufsize,audioWant.rate,audioWant.outChans);
|
||||
ImGui::Text("got: %d samples @ %.0fHz (%d channels)",audioGot.bufsize,audioGot.rate,audioWant.outChans);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
|
|
@ -2343,6 +2392,7 @@ void FurnaceGUI::syncSettings() {
|
|||
settings.iconSize=e->getConfInt("iconSize",16);
|
||||
settings.audioEngine=(e->getConfString("audioEngine","SDL")=="SDL")?1:0;
|
||||
settings.audioDevice=e->getConfString("audioDevice","");
|
||||
settings.audioChans=e->getConfInt("audioChans",2);
|
||||
settings.midiInDevice=e->getConfString("midiInDevice","");
|
||||
settings.midiOutDevice=e->getConfString("midiOutDevice","");
|
||||
settings.c163Name=e->getConfString("c163Name",DIV_C163_DEFAULT_NAME);
|
||||
|
|
@ -2476,6 +2526,7 @@ void FurnaceGUI::syncSettings() {
|
|||
clampSetting(settings.audioQuality,0,1);
|
||||
clampSetting(settings.audioBufSize,32,4096);
|
||||
clampSetting(settings.audioRate,8000,384000);
|
||||
clampSetting(settings.audioChans,1,16);
|
||||
clampSetting(settings.arcadeCore,0,1);
|
||||
clampSetting(settings.ym2612Core,0,1);
|
||||
clampSetting(settings.snCore,0,1);
|
||||
|
|
@ -2643,6 +2694,7 @@ void FurnaceGUI::commitSettings() {
|
|||
e->setConf("audioQuality",settings.audioQuality);
|
||||
e->setConf("audioBufSize",settings.audioBufSize);
|
||||
e->setConf("audioRate",settings.audioRate);
|
||||
e->setConf("audioChans",settings.audioChans);
|
||||
e->setConf("arcadeCore",settings.arcadeCore);
|
||||
e->setConf("ym2612Core",settings.ym2612Core);
|
||||
e->setConf("snCore",settings.snCore);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue