Log scaling for better vol control
This commit is contained in:
parent
10fe7103da
commit
cb9770a757
2 changed files with 25 additions and 6 deletions
|
|
@ -48,9 +48,20 @@
|
|||
#include <QVBoxLayout>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
||||
namespace {
|
||||
inline float sliderToVolume(int slider) {
|
||||
float x = static_cast<float>(slider) / 100.0f;
|
||||
return x * x * x;
|
||||
}
|
||||
inline int volumeToSlider(float volume) {
|
||||
return static_cast<int>(std::round(std::cbrt(volume) * 100.0f));
|
||||
}
|
||||
}
|
||||
|
||||
class DeleteVirtualNodeCommand : public QUndoCommand {
|
||||
public:
|
||||
struct Snapshot {
|
||||
|
|
@ -1192,7 +1203,7 @@ void GraphEditorWidget::wireVolumeWidget(QtNodes::NodeId nodeId) {
|
|||
connect(vol, &NodeVolumeWidget::volumeChanged, this,
|
||||
[this, capturedId](int value) {
|
||||
auto state = m_model->nodeVolumeState(capturedId);
|
||||
state.volume = static_cast<float>(value) / 100.0f;
|
||||
state.volume = sliderToVolume(value);
|
||||
m_model->setNodeVolumeState(capturedId, state);
|
||||
});
|
||||
|
||||
|
|
@ -1268,7 +1279,7 @@ void GraphEditorWidget::rebuildMixerStrips() {
|
|||
auto *slider = new ClickSlider(Qt::Horizontal);
|
||||
slider->setRange(0, 100);
|
||||
auto state = m_model->nodeVolumeState(nodeId);
|
||||
slider->setValue(static_cast<int>(state.volume * 100.0f));
|
||||
slider->setValue(volumeToSlider(state.volume));
|
||||
slider->setStyleSheet(QStringLiteral(
|
||||
"QSlider::groove:horizontal {"
|
||||
" background: #1a1a1e; border-radius: 3px; height: 6px; }"
|
||||
|
|
@ -1301,7 +1312,7 @@ void GraphEditorWidget::rebuildMixerStrips() {
|
|||
connect(slider, &QSlider::valueChanged, this,
|
||||
[this, capturedId](int value) {
|
||||
auto s = m_model->nodeVolumeState(capturedId);
|
||||
s.volume = static_cast<float>(value) / 100.0f;
|
||||
s.volume = sliderToVolume(value);
|
||||
m_model->setNodeVolumeState(capturedId, s);
|
||||
});
|
||||
|
||||
|
|
@ -1330,7 +1341,7 @@ void GraphEditorWidget::rebuildMixerStrips() {
|
|||
return;
|
||||
QSignalBlocker sb(slider);
|
||||
QSignalBlocker mb(muteBtn);
|
||||
slider->setValue(static_cast<int>(cur.volume * 100.0f));
|
||||
slider->setValue(volumeToSlider(cur.volume));
|
||||
muteBtn->setChecked(cur.mute);
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue