Пропустить тишину при воспроизведении - оптимизация значений - PullRequest
0 голосов
/ 12 октября 2019

Моя цель - пропустить тишину при воспроизведении.

Это мой код

...
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 Ответ

0 голосов
/ 14 октября 2019

Чтобы пропустить тишину при воспроизведении, вам нужно реализовать свой собственный IWaveProvider (или ISampleProvider), который читает вперед от источника. Затем вы можете найти алгоритм шумового затвора, чтобы определить, когда начинаются и заканчиваются периоды молчания, а затем отбросить все выборки в течение периода молчания. К сожалению, это то, что вам нужно реализовать самостоятельно, поскольку это не функция NAudio

...