From 0447cbb4ffa5690ae96e0a3f70a7d7f63b66eb35 Mon Sep 17 00:00:00 2001 From: Daniel Wolf Date: Thu, 30 Jun 2016 20:52:29 +0200 Subject: [PATCH] Refactored VAD multithreading --- src/audio/voiceActivityDetection.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/audio/voiceActivityDetection.cpp b/src/audio/voiceActivityDetection.cpp index 7f521f6..63deb50 100644 --- a/src/audio/voiceActivityDetection.cpp +++ b/src/audio/voiceActivityDetection.cpp @@ -73,21 +73,21 @@ BoundedTimeline detectVoiceActivity(std::unique_ptr audioStre ThreadPool threadPool; int segmentCount = threadPool.getThreadCount(); centiseconds audioLength = audioStream->getTruncatedRange().getLength(); - ProgressMerger progressMerger(progressSink); + vector audioSegments; for (int i = 0; i < segmentCount; ++i) { TimeRange segmentRange = TimeRange(i * audioLength / segmentCount, (i + 1) * audioLength / segmentCount); - ProgressSink& segmentProgressSink = progressMerger.addSink(1.0); - threadPool.schedule([segmentRange, &audioStream, &segmentProgressSink, &activityMutex, &activity] { - std::unique_ptr audioSegment = createSegment(audioStream->clone(false), segmentRange); - BoundedTimeline activitySegment = webRtcDetectVoiceActivity(*audioSegment, segmentProgressSink); - - std::lock_guard lock(activityMutex); - for (auto activityRange : activitySegment) { - activityRange.getTimeRange().shift(segmentRange.getStart()); - activity.set(activityRange); - } - }); + audioSegments.push_back(segmentRange); } + threadPool.schedule(audioSegments, [&](const TimeRange& segmentRange, ProgressSink& segmentProgressSink) { + unique_ptr audioSegment = createSegment(audioStream->clone(false), segmentRange); + BoundedTimeline activitySegment = webRtcDetectVoiceActivity(*audioSegment, segmentProgressSink); + + std::lock_guard lock(activityMutex); + for (auto activityRange : activitySegment) { + activityRange.getTimeRange().shift(segmentRange.getStart()); + activity.set(activityRange); + } + }, progressSink); threadPool.waitAll(); // Fill small gaps in activity