public void Use_full_volume_and_center_balance_on_sampling()
        {
            var ctx          = new ContextFor <NAudioGetWaveform>();
            var peakProvider = new PeakProvider();

            ctx.Use <IPeakProvider>(peakProvider);
            var sut = ctx.BuildSut();

            var waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(8000, 1);

            using (var buffer = new BufferedWaveStream(waveFormat, TimeSpan.FromSeconds(1)))
                using (var waveStream = new WaveProviderEx(buffer))
                {
                    var source = new Uri("my://source/");
                    ctx.For <IWaveProviderFactory>().Create(source).Returns(waveStream);

                    waveStream.Position = 40;
                    waveStream.Volume   = 0.5f;
                    waveStream.Pan      = -1f;

                    var samples = waveFormat.Generate(buffer.BufferDuration, SignalGeneratorType.Square);
                    buffer.AddSamples(samples, 0, samples.Length);

                    var waveForm = sut.For(source);
                    waveForm.Duration.Should().Be(buffer.BufferDuration);
                    waveForm.Peaks.Should().HaveCount((int)(peakProvider.PeaksPerSecond * buffer.BufferDuration.TotalSeconds));
                    waveForm.Peaks.All(p => p.Max == 1f && p.Min == -1f).Should().BeTrue();

                    waveStream.Position.Should().Be(40, "should be restored after sampling");
                    waveStream.Volume.Should().Be(0.5f);
                    waveStream.Pan.Should().Be(-1f);
                }
        }
Exemple #2
0
 public void Support_Root_Mean_Square_Filter()
 {
     PeakProvider.RmsFilter(new[] { 0.5f, 0.5f }).Should().Be(0.5f);
     PeakProvider.RmsFilter(new[] { 0.25f, 0.5f, 0.75f, 1f }).Should().BeApproximately(0.684f, 0.001f);
 }
Exemple #3
0
 public void Support_Average_Filter()
 {
     PeakProvider.AvgFilter(new[] { -1f, 1f }).Should().Be(0f);
     PeakProvider.AvgFilter(new[] { 0.5f, 0.5f }).Should().Be(0.5f);
 }
Exemple #4
0
 public void Support_MagFilter()
 {
     PeakProvider.MagFilter(new[] { -1f }).Should().Be(1f);
     PeakProvider.MagFilter(new[] { -0.1f, 0.5f }).Should().Be(0.5f);
 }