在播放中跳过静音 - 优化值

Posted

技术标签:

【中文标题】在播放中跳过静音 - 优化值【英文标题】:Skip silence in playback - Optimizing values 【发布时间】:2019-10-12 03:21:14 【问题描述】:

我的目标是在播放中跳过静音。

这是我的代码

...
double v1 = 500;
float v2 = 0.005F;
double v3 = 40;
meter = new MeteringSampleProvider(AudioFileReaderObject);
meter.StreamVolume += Meter_StreamVolume;
meter.SamplesPerNotification = v1;
...                


private void Meter_StreamVolume(object sender, StreamVolumeEventArgs e)

    if (e.MaxSampleValues.Length > 0)
    
        Console.WriteLine("0", e.MaxSampleValues[0]);
        if (e.MaxSampleValues[0] < v2 && AudioFileReaderObject.TotalTime.TotalMilliseconds > AudioFileReaderObject.CurrentTime.TotalMilliseconds + v3)
        
            Console.Write("Correction " + AudioFileReaderObject.CurrentTime);
            AudioFileReaderObject.CurrentTime += TimeSpan.FromMilliseconds(v3);
            Console.WriteLine(" -> "+AudioFileReaderObject.CurrentTime);
        
    

输出要么没有真正消除沉默,要么切断了一切。

如何优化 v1、v2 和 v3?

【问题讨论】:

【参考方案1】:

要在播放中跳过静音,您需要实现自己的IWaveProvider(或ISampleProvider),它会从源代码提前读取。然后,您可以找到一个噪声门算法来检测静默期的开始和结束时间,然后在静默期丢弃所有样本。不幸的是,这是您必须自己实现的东西,因为它不是 NAudio 的功能

【讨论】:

以上是关于在播放中跳过静音 - 优化值的主要内容,如果未能解决你的问题,请参考以下文章

XSL/FO 在选择语句中跳过一个值

iOS微信小视频优化心得

在 if 语句的帮助下,让 R 在 while 循环中跳过某些索引值

可以从 Android 应用程序中跳过曲目吗?

[转]iOS微信小视频优化心得

如何在函数调用中跳过可选参数?