在播放中跳过静音 - 优化值
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 的功能
【讨论】:
以上是关于在播放中跳过静音 - 优化值的主要内容,如果未能解决你的问题,请参考以下文章