Update to v094r23 release.
byuu says:
The library window is gone, and replaced with
hiro::BrowserWindow::openFolder(). This gives navigation capabilities to
game loading, and it also completes our slotted cart selection code. As
an added bonus, it's less code this way, too.
I also set the window size to consistent sizes between all emulated
systems, so that switching between SFC and GB don't cause the window
size to keep changing, and so that the scaling size is consistent (eg at
normal scale, GB @ 3x is closer to SNES @ 2x.) This means black borders
in GB/GBA mode, but it doesn't look that bad, and it's not like many
people ever use these modes anyway.
Finally, added the placeholder tabs for video, audio and timing. I don't
intend to add the timing calculator code to v095 (it might be better as
a separate tool), but I'll add the ability to set video/audio rates, at
least.
Glitch 1: despite selecting the first item in the BrowserDialog list, if
you press enter when the window appears, it doesn't activate the item
until you press an arrow key first.
Glitch 2: in Game Boy mode, if you set the 4x window size, it's not
honoring the full requested height because the viewport is smaller than
the window. 8+ years of trying to get GTK+ and Qt to simply set the god
damned window size I ask for, and I still can't get them to do it
reliably.
Remaining issues:
- finish configuration panels (video, audio, timing)
- fix ruby driver compilation on Windows
- add DIP switch selection window (NSS) [I may end up punting this one
to v096]
2015-05-30 11:39:09 +00:00
|
|
|
AudioSettings::AudioSettings(TabFrame* parent) : TabFrameItem(parent) {
|
2016-01-07 08:14:33 +00:00
|
|
|
setIcon(Icon::Device::Speaker);
|
Update to v094r23 release.
byuu says:
The library window is gone, and replaced with
hiro::BrowserWindow::openFolder(). This gives navigation capabilities to
game loading, and it also completes our slotted cart selection code. As
an added bonus, it's less code this way, too.
I also set the window size to consistent sizes between all emulated
systems, so that switching between SFC and GB don't cause the window
size to keep changing, and so that the scaling size is consistent (eg at
normal scale, GB @ 3x is closer to SNES @ 2x.) This means black borders
in GB/GBA mode, but it doesn't look that bad, and it's not like many
people ever use these modes anyway.
Finally, added the placeholder tabs for video, audio and timing. I don't
intend to add the timing calculator code to v095 (it might be better as
a separate tool), but I'll add the ability to set video/audio rates, at
least.
Glitch 1: despite selecting the first item in the BrowserDialog list, if
you press enter when the window appears, it doesn't activate the item
until you press an arrow key first.
Glitch 2: in Game Boy mode, if you set the 4x window size, it's not
honoring the full requested height because the viewport is smaller than
the window. 8+ years of trying to get GTK+ and Qt to simply set the god
damned window size I ask for, and I still can't get them to do it
reliably.
Remaining issues:
- finish configuration panels (video, audio, timing)
- fix ruby driver compilation on Windows
- add DIP switch selection window (NSS) [I may end up punting this one
to v096]
2015-05-30 11:39:09 +00:00
|
|
|
setText("Audio");
|
|
|
|
|
|
|
|
layout.setMargin(5);
|
2015-06-15 22:26:47 +00:00
|
|
|
|
|
|
|
frequencyLabel.setText("Frequency:");
|
Update to v098r01 release.
byuu says:
Changelog:
- SFC: balanced profile removed
- SFC: performance profile removed
- SFC: code for handling non-threaded CPU, SMP, DSP, PPU removed
- SFC: Coprocessor, Controller (and expansion port) shared Thread code
merged to SFC::Cothread
- Cothread here just means "Thread with CPU affinity" (couldn't think
of a better name, sorry)
- SFC: CPU now has vector<Thread*> coprocessors, peripherals;
- this is the beginning of work to allow expansion port devices to be
dynamically changed at run-time
- ruby: all audio drivers default to 48000hz instead of 22050hz now if
no frequency is assigned
- note: the WASAPI driver can default to whatever the native frequency
is; doesn't have to be 48000hz
- tomoko: removed the ability to change the frequency from the UI (but
it will display the frequency used)
- tomoko: removed the timing settings panel
- the goal is to work toward smooth video via adaptive sync
- the model is broken by not being in control of the audio frequency
anyway
- it's further broken by PAL running at 50hz and WSC running at 75hz
- it was always broken anyway by SNES interlace timing varying from
progressive timing
- higan: audio/ stub created (for now, it's just nall/dsp/ moved here
and included as a header)
- higan: video/ stub created
- higan/GNUmakefile: now includes build rules for essential components
(libco, emulator, audio, video)
The audio changes are in preparation to merge wareya's awesome WASAPI
work without the need for the nall/dsp resampler.
2016-04-09 03:40:12 +00:00
|
|
|
auto frequencyValue = audio->get(Audio::Frequency).get<uint>();
|
|
|
|
frequencyCombo.append(ComboButtonItem().setText({frequencyValue, "hz"}));
|
|
|
|
frequencyCombo.setEnabled(false); //not user configurable
|
2015-06-15 22:26:47 +00:00
|
|
|
|
|
|
|
latencyLabel.setText("Latency:");
|
|
|
|
latencyCombo.append(ComboButtonItem().setText("20ms"));
|
|
|
|
latencyCombo.append(ComboButtonItem().setText("40ms"));
|
|
|
|
latencyCombo.append(ComboButtonItem().setText("60ms"));
|
|
|
|
latencyCombo.append(ComboButtonItem().setText("80ms"));
|
|
|
|
latencyCombo.append(ComboButtonItem().setText("100ms"));
|
2015-11-16 08:38:05 +00:00
|
|
|
switch(settings["Audio/Latency"].natural()) {
|
2015-06-15 22:26:47 +00:00
|
|
|
case 20: latencyCombo.item(0)->setSelected(); break;
|
|
|
|
case 40: latencyCombo.item(1)->setSelected(); break;
|
|
|
|
case 60: latencyCombo.item(2)->setSelected(); break;
|
|
|
|
case 80: latencyCombo.item(3)->setSelected(); break;
|
|
|
|
case 100: latencyCombo.item(4)->setSelected(); break;
|
|
|
|
}
|
|
|
|
latencyCombo.onChange([&] { update(); });
|
|
|
|
|
|
|
|
resamplerLabel.setText("Resampler:");
|
|
|
|
resamplerCombo.append(ComboButtonItem().setText("Linear"));
|
|
|
|
resamplerCombo.append(ComboButtonItem().setText("Hermite"));
|
|
|
|
resamplerCombo.append(ComboButtonItem().setText("Sinc"));
|
2015-11-16 08:38:05 +00:00
|
|
|
if(settings["Audio/Resampler"].text() == "Linear" ) resamplerCombo.item(0)->setSelected();
|
|
|
|
if(settings["Audio/Resampler"].text() == "Hermite") resamplerCombo.item(1)->setSelected();
|
|
|
|
if(settings["Audio/Resampler"].text() == "Sinc" ) resamplerCombo.item(2)->setSelected();
|
2015-06-15 22:26:47 +00:00
|
|
|
resamplerCombo.onChange([&] { update(); });
|
|
|
|
|
|
|
|
volumeLabel.setText("Volume:");
|
2015-11-16 08:38:05 +00:00
|
|
|
volumeSlider.setLength(201).setPosition(settings["Audio/Volume"].natural()).onChange([&] { updateVolume(); });
|
2015-06-15 22:26:47 +00:00
|
|
|
|
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
|
|
|
auto AudioSettings::update() -> void {
|
|
|
|
if(auto item = latencyCombo.selected()) {
|
2015-11-16 08:38:05 +00:00
|
|
|
uint latency = 60;
|
|
|
|
if(item->offset() == 0) latency = 20;
|
|
|
|
if(item->offset() == 1) latency = 40;
|
|
|
|
if(item->offset() == 2) latency = 60;
|
|
|
|
if(item->offset() == 3) latency = 80;
|
|
|
|
if(item->offset() == 4) latency = 100;
|
|
|
|
settings["Audio/Latency"].setValue(latency);
|
2015-06-15 22:26:47 +00:00
|
|
|
}
|
|
|
|
if(auto item = resamplerCombo.selected()) {
|
2015-11-16 08:38:05 +00:00
|
|
|
string resampler = "Sinc";
|
|
|
|
if(item->offset() == 0) resampler = "Linear";
|
|
|
|
if(item->offset() == 1) resampler = "Hermite";
|
|
|
|
if(item->offset() == 2) resampler = "Sinc";
|
|
|
|
settings["Audio/Resampler"].setValue(resampler);
|
2015-06-15 22:26:47 +00:00
|
|
|
}
|
|
|
|
updateVolume();
|
|
|
|
program->updateAudio();
|
|
|
|
}
|
|
|
|
|
|
|
|
auto AudioSettings::updateVolume() -> void {
|
2015-11-16 08:38:05 +00:00
|
|
|
settings["Audio/Volume"].setValue(volumeSlider.position());
|
|
|
|
volumeValue.setText({volumeSlider.position(), "%"});
|
|
|
|
program->updateAudioVolume();
|
Update to v094r23 release.
byuu says:
The library window is gone, and replaced with
hiro::BrowserWindow::openFolder(). This gives navigation capabilities to
game loading, and it also completes our slotted cart selection code. As
an added bonus, it's less code this way, too.
I also set the window size to consistent sizes between all emulated
systems, so that switching between SFC and GB don't cause the window
size to keep changing, and so that the scaling size is consistent (eg at
normal scale, GB @ 3x is closer to SNES @ 2x.) This means black borders
in GB/GBA mode, but it doesn't look that bad, and it's not like many
people ever use these modes anyway.
Finally, added the placeholder tabs for video, audio and timing. I don't
intend to add the timing calculator code to v095 (it might be better as
a separate tool), but I'll add the ability to set video/audio rates, at
least.
Glitch 1: despite selecting the first item in the BrowserDialog list, if
you press enter when the window appears, it doesn't activate the item
until you press an arrow key first.
Glitch 2: in Game Boy mode, if you set the 4x window size, it's not
honoring the full requested height because the viewport is smaller than
the window. 8+ years of trying to get GTK+ and Qt to simply set the god
damned window size I ask for, and I still can't get them to do it
reliably.
Remaining issues:
- finish configuration panels (video, audio, timing)
- fix ruby driver compilation on Windows
- add DIP switch selection window (NSS) [I may end up punting this one
to v096]
2015-05-30 11:39:09 +00:00
|
|
|
}
|