Fixed erratic progress display
This commit is contained in:
parent
6888dadd04
commit
229105a965
|
@ -4,6 +4,7 @@
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <format.h>
|
#include <format.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <boost/algorithm/clamp.hpp>
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
@ -58,7 +59,7 @@ ProgressBar::~ProgressBar() {
|
||||||
|
|
||||||
void ProgressBar::reportProgress(double value) {
|
void ProgressBar::reportProgress(double value) {
|
||||||
// Make sure value is in [0..1] range
|
// Make sure value is in [0..1] range
|
||||||
value = std::max(0.0, std::min(1.0, value));
|
value = boost::algorithm::clamp(value, 0.0, 1.0);
|
||||||
|
|
||||||
currentProgress = value;
|
currentProgress = value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <future>
|
#include <future>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -14,6 +13,11 @@ public:
|
||||||
virtual void reportProgress(double value) = 0;
|
virtual void reportProgress(double value) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NullProgressSink : public ProgressSink {
|
||||||
|
public:
|
||||||
|
void reportProgress(double) override {}
|
||||||
|
};
|
||||||
|
|
||||||
class ProgressForwarder : public ProgressSink {
|
class ProgressForwarder : public ProgressSink {
|
||||||
public:
|
public:
|
||||||
ProgressForwarder(std::function<void(double progress)> callback);
|
ProgressForwarder(std::function<void(double progress)> callback);
|
||||||
|
|
|
@ -29,6 +29,10 @@ BoundedTimeline<void> webRtcDetectVoiceActivity(const AudioClip& audioClip, Prog
|
||||||
error = WebRtcVad_set_mode(vadHandle, aggressiveness);
|
error = WebRtcVad_set_mode(vadHandle, aggressiveness);
|
||||||
if (error) throw runtime_error("Error setting WebRTC VAD aggressiveness.");
|
if (error) throw runtime_error("Error setting WebRTC VAD aggressiveness.");
|
||||||
|
|
||||||
|
ProgressMerger progressMerger(progressSink);
|
||||||
|
ProgressSink& pass1ProgressSink = progressMerger.addSink(1.0);
|
||||||
|
ProgressSink& pass2ProgressSink = progressMerger.addSink(0.3);
|
||||||
|
|
||||||
// Detect activity
|
// Detect activity
|
||||||
BoundedTimeline<void> activity(audioClip.getTruncatedRange());
|
BoundedTimeline<void> activity(audioClip.getTruncatedRange());
|
||||||
centiseconds time = 0cs;
|
centiseconds time = 0cs;
|
||||||
|
@ -46,7 +50,7 @@ BoundedTimeline<void> webRtcDetectVoiceActivity(const AudioClip& audioClip, Prog
|
||||||
}
|
}
|
||||||
time += 1cs;
|
time += 1cs;
|
||||||
};
|
};
|
||||||
process16bitAudioClip(audioClip, processBuffer, bufferCapacity, progressSink);
|
process16bitAudioClip(audioClip, processBuffer, bufferCapacity, pass1ProgressSink);
|
||||||
|
|
||||||
// WebRTC adapts to the audio. This means results may not be correct at the very beginning.
|
// WebRTC adapts to the audio. This means results may not be correct at the very beginning.
|
||||||
// It sometimes returns false activity at the very beginning, mistaking the background noise for speech.
|
// It sometimes returns false activity at the very beginning, mistaking the background noise for speech.
|
||||||
|
@ -56,7 +60,7 @@ BoundedTimeline<void> webRtcDetectVoiceActivity(const AudioClip& audioClip, Prog
|
||||||
activity.clear(firstActivity);
|
activity.clear(firstActivity);
|
||||||
unique_ptr<AudioClip> streamStart = audioClip.clone() | segment(TimeRange(0cs, firstActivity.getEnd()));
|
unique_ptr<AudioClip> streamStart = audioClip.clone() | segment(TimeRange(0cs, firstActivity.getEnd()));
|
||||||
time = 0cs;
|
time = 0cs;
|
||||||
process16bitAudioClip(*streamStart, processBuffer, bufferCapacity, progressSink);
|
process16bitAudioClip(*streamStart, processBuffer, bufferCapacity, pass2ProgressSink);
|
||||||
}
|
}
|
||||||
|
|
||||||
return activity;
|
return activity;
|
||||||
|
|
Loading…
Reference in New Issue