Refactored VAD multithreading

This commit is contained in:
Daniel Wolf 2016-06-30 20:52:29 +02:00
parent 8fa494fb77
commit 0447cbb4ff
1 changed files with 12 additions and 12 deletions

View File

@ -73,12 +73,13 @@ BoundedTimeline<void> detectVoiceActivity(std::unique_ptr<AudioStream> audioStre
ThreadPool threadPool; ThreadPool threadPool;
int segmentCount = threadPool.getThreadCount(); int segmentCount = threadPool.getThreadCount();
centiseconds audioLength = audioStream->getTruncatedRange().getLength(); centiseconds audioLength = audioStream->getTruncatedRange().getLength();
ProgressMerger progressMerger(progressSink); vector<TimeRange> audioSegments;
for (int i = 0; i < segmentCount; ++i) { for (int i = 0; i < segmentCount; ++i) {
TimeRange segmentRange = TimeRange(i * audioLength / segmentCount, (i + 1) * audioLength / segmentCount); TimeRange segmentRange = TimeRange(i * audioLength / segmentCount, (i + 1) * audioLength / segmentCount);
ProgressSink& segmentProgressSink = progressMerger.addSink(1.0); audioSegments.push_back(segmentRange);
threadPool.schedule([segmentRange, &audioStream, &segmentProgressSink, &activityMutex, &activity] { }
std::unique_ptr<AudioStream> audioSegment = createSegment(audioStream->clone(false), segmentRange); threadPool.schedule(audioSegments, [&](const TimeRange& segmentRange, ProgressSink& segmentProgressSink) {
unique_ptr<AudioStream> audioSegment = createSegment(audioStream->clone(false), segmentRange);
BoundedTimeline<void> activitySegment = webRtcDetectVoiceActivity(*audioSegment, segmentProgressSink); BoundedTimeline<void> activitySegment = webRtcDetectVoiceActivity(*audioSegment, segmentProgressSink);
std::lock_guard<std::mutex> lock(activityMutex); std::lock_guard<std::mutex> lock(activityMutex);
@ -86,8 +87,7 @@ BoundedTimeline<void> detectVoiceActivity(std::unique_ptr<AudioStream> audioStre
activityRange.getTimeRange().shift(segmentRange.getStart()); activityRange.getTimeRange().shift(segmentRange.getStart());
activity.set(activityRange); activity.set(activityRange);
} }
}); }, progressSink);
}
threadPool.waitAll(); threadPool.waitAll();
// Fill small gaps in activity // Fill small gaps in activity