- mixer->set_audio_level_callback([this](float level_lufs, float peak_db){
- ui->vu_meter->set_level(level_lufs);
-
- char buf[256];
- snprintf(buf, sizeof(buf), "%.1f", peak_db);
- ui->peak_display->setText(buf);
- if (peak_db > -0.1f) { // -0.1 dBFS is EBU peak limit.
- ui->peak_display->setStyleSheet("QLabel { background-color: red; color: white; }");
- } else {
- ui->peak_display->setStyleSheet("");
- }
+ // Make the previews.
+ unsigned num_previews = mixer->get_num_channels();
+
+ for (unsigned i = 0; i < num_previews; ++i) {
+ Mixer::Output output = Mixer::Output(Mixer::OUTPUT_INPUT0 + i);
+
+ QWidget *preview = new QWidget(this);
+ Ui::Display *ui_display = new Ui::Display;
+ ui_display->setupUi(preview);
+ ui_display->label->setText(mixer->get_channel_name(output).c_str());
+ ui_display->display->set_output(output);
+ ui->preview_displays->insertWidget(previews.size(), preview, 1);
+ previews.push_back(ui_display);
+
+ // Hook up the click.
+ connect(ui_display->display, &GLWidget::clicked, std::bind(&MainWindow::channel_clicked, this, i));
+
+ // Hook up the keyboard key.
+ QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_1 + i), this);
+ connect(shortcut, &QShortcut::activated, std::bind(&MainWindow::channel_clicked, this, i));
+
+ // Hook up the white balance button (irrelevant if invisible).
+ ui_display->wb_button->setVisible(mixer->get_supports_set_wb(output));
+ connect(ui_display->wb_button, &QPushButton::clicked, std::bind(&MainWindow::wb_button_clicked, this, i));
+ }
+
+ mixer->set_audio_level_callback([this](float level_lufs, float peak_db, float global_level_lufs, float range_low_lufs, float range_high_lufs, float auto_gain_staging_db){
+ post_to_main_thread([=]() {
+ ui->vu_meter->set_level(level_lufs);
+ ui->lra_meter->set_levels(global_level_lufs, range_low_lufs, range_high_lufs);
+
+ char buf[256];
+ snprintf(buf, sizeof(buf), "%.1f", peak_db);
+ ui->peak_display->setText(buf);
+ if (peak_db > -0.1f) { // -0.1 dBFS is EBU peak limit.
+ ui->peak_display->setStyleSheet("QLabel { background-color: red; color: white; }");
+ } else {
+ ui->peak_display->setStyleSheet("");
+ }
+
+ ui->gainstaging_knob->setValue(lrintf(auto_gain_staging_db * 10.0f));
+ snprintf(buf, sizeof(buf), "%+.1f dB", auto_gain_staging_db);
+ ui->gainstaging_db_display->setText(buf);
+ });