MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ extract_silence()

std::vector< std::vector< double > > MayaFlux::Yantra::extract_silence ( const std::vector< std::span< const double > > &  channels,
double  silence_threshold,
uint32_t  min_duration,
uint32_t  window_size,
uint32_t  hop_size 
)

Definition at line 223 of file ExtractionHelper.cpp.

229{
230 std::vector<std::vector<double>> result;
231 result.reserve(channels.size());
232 for (const auto& ch : channels) {
233 if (ch.empty()) {
234 result.emplace_back();
235 continue;
236 }
237 const uint32_t w = std::min(window_size, static_cast<uint32_t>(ch.size()));
238 const uint32_t h = std::max(1U, std::min(hop_size, w / 2));
239 const auto energy = D::rms(ch, D::num_windows(ch.size(), w, h), h, w);
240 std::vector<size_t> starts;
241 for (size_t i = 0; i < energy.size(); ++i) {
242 if (energy[i] <= silence_threshold && w >= min_duration) {
243 starts.push_back(i * h);
244 }
245 }
246 result.push_back(D::slice_intervals(ch,
247 D::merge_intervals(D::intervals_from_window_starts(starts, w, ch.size()))));
248 }
249 return result;
250}

References MayaFlux::Kinesis::Discrete::intervals_from_window_starts(), MayaFlux::Kinesis::Discrete::merge_intervals(), MayaFlux::Kinesis::Discrete::num_windows(), MayaFlux::Kinesis::Discrete::rms(), and MayaFlux::Kinesis::Discrete::slice_intervals().

Referenced by MayaFlux::Yantra::FeatureExtractor< InputType, OutputType >::extract_implementation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: