Skip to content

Commit

Permalink
SetupDialog: Warn of unusual buffersizes
Browse files Browse the repository at this point in the history
This displays a warning dialog if the users requests unusual
buffersizes:

- buffersizes less than 32
- buffersizes which are not a (natural number) power of 2

This commit also replaces some `setGeometry` stuff by `QBoxLayout`.
  • Loading branch information
JohannesLorenz committed Sep 24, 2023
1 parent 61b6126 commit 7aca8ae
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 6 deletions.
2 changes: 2 additions & 0 deletions include/SetupDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ private slots:
// Audio settings widget.
void audioInterfaceChanged(const QString & driver);
void toggleHQAudioDev(bool enabled);
void updateBufferSizeWarning(int value);
void setBufferSize(int value);
void resetBufferSize();

Expand Down Expand Up @@ -179,6 +180,7 @@ private slots:
int m_bufferSize;
QSlider * m_bufferSizeSlider;
QLabel * m_bufferSizeLbl;
QLabel * m_bufferSizeWarnLbl;

// MIDI settings widgets.
QComboBox * m_midiInterfaces;
Expand Down
38 changes: 32 additions & 6 deletions src/gui/modals/SetupDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -579,32 +579,39 @@ SetupDialog::SetupDialog(ConfigTab tab_to_open) :

// Buffer size tab.
auto bufferSize_tw = new TabWidget(tr("Buffer size"), audio_w);
bufferSize_tw->setFixedHeight(76);
auto bufferSize_layout = new QVBoxLayout(bufferSize_tw);
bufferSize_layout->setSpacing(10);
bufferSize_layout->setContentsMargins(10, 18, 10, 10);

m_bufferSizeSlider = new QSlider(Qt::Horizontal, bufferSize_tw);
m_bufferSizeSlider->setRange(1, 128);
m_bufferSizeSlider->setTickInterval(8);
m_bufferSizeSlider->setPageStep(8);
m_bufferSizeSlider->setValue(m_bufferSize / BUFFERSIZE_RESOLUTION);
m_bufferSizeSlider->setGeometry(10, 18, 340, 18);
m_bufferSizeSlider->setTickPosition(QSlider::TicksBelow);

m_bufferSizeLbl = new QLabel(bufferSize_tw);

m_bufferSizeWarnLbl = new QLabel(bufferSize_tw);
m_bufferSizeWarnLbl->setWordWrap(true);

connect(m_bufferSizeSlider, SIGNAL(valueChanged(int)),
this, SLOT(setBufferSize(int)));
connect(m_bufferSizeSlider, SIGNAL(valueChanged(int)),
this, SLOT(showRestartWarning()));

m_bufferSizeLbl = new QLabel(bufferSize_tw);
m_bufferSizeLbl->setGeometry(10, 40, 200, 24);
setBufferSize(m_bufferSizeSlider->value());

auto bufferSize_reset_btn = new QPushButton(embed::getIconPixmap("reload"), "", bufferSize_tw);
bufferSize_reset_btn->setGeometry(320, 40, 28, 28);
connect(bufferSize_reset_btn, SIGNAL(clicked()),
this, SLOT(resetBufferSize()));
bufferSize_reset_btn->setToolTip(
tr("Reset to default value"));

bufferSize_layout->addWidget(m_bufferSizeSlider);
bufferSize_layout->addWidget(m_bufferSizeLbl);
bufferSize_layout->addWidget(m_bufferSizeWarnLbl);
bufferSize_layout->addWidget(bufferSize_reset_btn);


// Audio layout ordering.
audio_layout->addWidget(audioiface_tw);
Expand Down Expand Up @@ -1172,6 +1179,24 @@ void SetupDialog::audioInterfaceChanged(const QString & iface)
}


void SetupDialog::updateBufferSizeWarning(int value)
{
QString text = "<ul>";
if((value & (value - 1)) != 0) // <=> value is not a power of 2 (for value > 0)
{
text += "<li>" + tr("The currently selected value is not a power of 2 "
"(32, 64, 128, 256, 512, 1024, ...). Some plugins may not be available.") + "</li>";
}
if(value <= 32)
{
text += "<li>" + tr("The currently selected value is less than or equal to 32. "
"Some plugins may not be available.") + "</li>";
}
text += "</ul>";
m_bufferSizeWarnLbl->setText(text);
}


void SetupDialog::setBufferSize(int value)
{
const int step = DEFAULT_BUFFER_SIZE / BUFFERSIZE_RESOLUTION;
Expand All @@ -1197,6 +1222,7 @@ void SetupDialog::setBufferSize(int value)
m_bufferSize = value * BUFFERSIZE_RESOLUTION;
m_bufferSizeLbl->setText(tr("Frames: %1\nLatency: %2 ms").arg(m_bufferSize).arg(
1000.0f * m_bufferSize / Engine::audioEngine()->processingSampleRate(), 0, 'f', 1));
updateBufferSizeWarning(m_bufferSize);
}


Expand Down

0 comments on commit 7aca8ae

Please sign in to comment.