void Music::onTxtMsg(const std::string& text) { if(text=="stop") { stop(); } else if(text=="replay") { replay(); } else if(text=="+") { adjustVolume(+0.1); } else if(text=="-") { adjustVolume(-0.1); } else if(text == "status") { std::ostringstream strs; strs << volume *100; std::string msg = "Dolanik status: <br />"; msg += "Current volume = " + strs.str() + "%<br />"; if(playback) msg += "I'm currently playing song : "+ currentSong->getTitle() + "(Length:" /*"+ Anal::toStr(getCurrentSongLength()) +" */ "s ) <br />"; //FIXME mc->SendTextMessage("music",msg); } else if(text == "playlist") { mc->SendTextMessage("music", genPlaylistString()); } else if(text.substr(0, 2) == "eq") { int band = -1; double amp = -1; if(text.substr(3, 5) == "reset") { resetEqualizer(); return; } std::stringstream ss; ss << text.substr(2); ss >> band; ss >> amp; setEqualizer(band,amp); } else if(text == "help")
AudioEqualizerDialog::AudioEqualizerDialog(QWidget *parent) : QDialog(parent), d(new Data) { d->p = this; auto vbox = new QVBoxLayout; auto hbox = new QHBoxLayout; hbox->addWidget(new QLabel(tr("Preset"))); d->presets = new QComboBox; d->presets->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); for (int i = 0; i < Eq::MaxPreset; ++i) d->presets->addItem(AudioEqualizer::name((Preset)i), i); auto sig = static_cast<Signal<QComboBox, int>>(&QComboBox::currentIndexChanged); auto load = [=] () { auto data = d->presets->currentData(); if (data.type() == (int)QMetaType::Int) setEqualizer(Eq(Preset(data.toInt()))); }; connect(d->presets, sig, this, load); hbox->addWidget(d->presets); auto button = new QPushButton(tr("Load")); connect(button, &QPushButton::clicked, this, load); hbox->addWidget(button); vbox->addLayout(hbox); hbox = new QHBoxLayout; auto font = this->font(); font.setPointSizeF(font.pointSizeF()*0.8); const int w = QFontMetrics(font).width(u"+20.0dB"_q) + 2; for (int i = 0; i < Eq::bands(); ++i) { auto s = d->sliders[i] = new QSlider; s->setOrientation(Qt::Vertical); s->setRange(Eq::min() * Factor, Eq::max() * Factor); s->setFixedWidth(w); auto vbox = new QVBoxLayout; const auto f = Eq::freqeuncy(i); const QString fq = f < 999.9 ? (QString::number(f) % "Hz"_a) : (QString::number(f/1000.0) % "kHz"_a); auto label = new QLabel(fq); label->setFont(font); label->setAlignment(Qt::AlignCenter); vbox->addWidget(label); vbox->addWidget(s); auto dB = new QLabel("0.0dB"_a); dB->setFont(font); dB->setAlignment(Qt::AlignCenter); vbox->addWidget(dB); hbox->addLayout(vbox); connect(s, &QSlider::valueChanged, this, [=] () { const auto v = s->value()/(double)Factor; dB->setText((v > 0 ? "+"_a : ""_a) % QString::number(v, 'f', 1) % "dB"_a); if (_Change(d->eq[i], v) && d->update) d->update(d->eq); }); } vbox->addLayout(hbox); setLayout(vbox); _SetWindowTitle(this, tr("Audio Equalizer")); }