audiomonitor: update parameters immediately when panels are focused

This commit is contained in:
itsmattkc
2021-04-27 00:54:46 +10:00
parent f2f5ab8739
commit 4ab4380057
4 changed files with 42 additions and 2 deletions
+5
View File
@@ -35,6 +35,11 @@ class AudioMonitorPanel : public PanelWidget
public:
AudioMonitorPanel(QWidget* parent = nullptr);
void SetParams(const AudioParams& params)
{
audio_monitor_->SetParams(params);
}
private:
virtual void Retranslate() override;
+21
View File
@@ -58,6 +58,8 @@ void AudioMonitor::SetParams(const AudioParams &params)
peaked_.resize(params_.channel_count());
peaked_.fill(false);
update();
}
void AudioMonitor::OutputDeviceSet(AudioPlaybackCache *cache, qint64 offset, int playback_speed)
@@ -72,6 +74,11 @@ void AudioMonitor::OutputDeviceSet(AudioPlaybackCache *cache, qint64 offset, int
return;
}
if (offset > file_->size()) {
Stop();
return;
}
file_->seek(offset);
playback_speed_ = playback_speed;
@@ -86,6 +93,8 @@ void AudioMonitor::Stop()
delete file_;
file_ = nullptr;
waveform_ = nullptr;
SetUpdateLoop(false);
}
void AudioMonitor::OutputPushed(const QByteArray &d)
@@ -103,6 +112,10 @@ void AudioMonitor::OutputAudioVisualWaveformSet(const AudioVisualWaveform *wavef
{
Stop();
if (start >= waveform->length()) {
return;
}
waveform_ = waveform;
waveform_time_ = start;
@@ -240,8 +253,16 @@ void AudioMonitor::paintGL()
if (file_) {
UpdateValuesFromFile(v, delta_time);
if (file_->atEnd()) {
Stop();
}
} else if (waveform_) {
UpdateValuesFromWaveform(v, delta_time);
if (waveform_time_ >= waveform_->length()) {
Stop();
}
}
last_time_ = current_time;
+14 -2
View File
@@ -194,6 +194,7 @@ TimelinePanel* MainWindow::OpenSequence(Sequence *sequence, bool enable_focus)
if (enable_focus) {
TimelineFocused(sequence);
UpdateAudioMonitorParams(sequence);
}
return panel;
@@ -689,17 +690,28 @@ void MainWindow::SaveCustomShortcuts()
}
void MainWindow::UpdateAudioMonitorParams(ViewerOutput *viewer)
{
audio_monitor_panel_->SetParams(viewer ? viewer->GetAudioParams() : AudioParams());
}
void MainWindow::FocusedPanelChanged(PanelWidget *panel)
{
TimelinePanel* timeline = dynamic_cast<TimelinePanel*>(panel);
// Update audio monitor panel
TimeBasedPanel* tbp = dynamic_cast<TimeBasedPanel*>(panel);
if (tbp) {
UpdateAudioMonitorParams(tbp->GetConnectedViewer());
}
// Signal timeline focus
TimelinePanel* timeline = dynamic_cast<TimelinePanel*>(panel);
if (timeline) {
TimelineFocused(timeline->GetConnectedViewer());
return;
}
// Signal project panel focus
ProjectPanel* project = dynamic_cast<ProjectPanel*>(panel);
if (project) {
UpdateTitle();
node_panel_->SetGraph(project->project());
+2
View File
@@ -140,6 +140,8 @@ private:
void SaveCustomShortcuts();
void UpdateAudioMonitorParams(ViewerOutput* viewer);
QByteArray premaximized_state_;
// Standard panels