Skip to content

Commit

Permalink
Adding SilenceProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
markheath committed Nov 25, 2015
1 parent c270c55 commit a996e1b
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
1 change: 1 addition & 0 deletions NAudio/NAudio.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@
<Compile Include="MediaFoundation\MediaFoundationTransform.cs" />
<Compile Include="Wave\WaveProviders\MixingWaveProvider32.cs" />
<Compile Include="Wave\WaveProviders\MultiplexingWaveProvider.cs" />
<Compile Include="Wave\WaveProviders\SilenceWaveProvider.cs" />
<Compile Include="Wave\WaveProviders\StereoToMonoProvider16.cs" />
<Compile Include="Wave\WaveProviders\MonoToStereoProvider16.cs" />
<Compile Include="Wave\WaveProviders\VolumeWaveProvider16.cs" />
Expand Down
37 changes: 37 additions & 0 deletions NAudio/Wave/WaveProviders/SilenceWaveProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;
using System.Linq;

// ReSharper disable once CheckNamespace
namespace NAudio.Wave
{
/// <summary>
/// Silence producing wave provider
/// Useful for playing silence when doing a WASAPI Loopback Capture
/// </summary>
public class SilenceProvider : IWaveProvider
{
/// <summary>
/// Creates a new silence producing wave provider
/// </summary>
/// <param name="wf">Desired WaveFormat (should be PCM / IEE float</param>
public SilenceProvider(WaveFormat wf) { WaveFormat = wf; }

/// <summary>
/// Read silence from into the buffer
/// </summary>
public int Read(byte[] buffer, int offset, int count)
{
var end = offset + count;
for (var pos = offset; pos < end; pos++)
{
buffer[pos] = 0;
}
return count;
}

/// <summary>
/// WaveFormat of this silence producing wave provider
/// </summary>
public WaveFormat WaveFormat { get; private set; }
}
}
1 change: 1 addition & 0 deletions NAudioTests/NAudioTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@
<Compile Include="WaveStreams\MultiplexingWaveProviderTests.cs" />
<Compile Include="WaveStreams\OffsetSampleProviderTests.cs" />
<Compile Include="WaveStreams\SampleToWaveProvider24Tests.cs" />
<Compile Include="WaveStreams\SilenceProviderTests.cs" />
<Compile Include="WaveStreams\StereoToMonoProvider16Tests.cs" />
<Compile Include="WaveStreams\StereoToMonoSampleProviderTests.cs" />
<Compile Include="WaveStreams\TestSampleProvider.cs" />
Expand Down
33 changes: 33 additions & 0 deletions NAudioTests/WaveStreams/SilenceProviderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;
using System.Linq;
using NAudio.Wave;
using NUnit.Framework;

namespace NAudioTests.WaveStreams
{
[TestFixture]
public class SilenceProviderTests
{
[Test]
public void CanReadSilence()
{
var sp = new SilenceProvider(new WaveFormat(44100, 2));
var length = 1000;
var b = Enumerable.Range(1, length).Select(n => (byte) 1).ToArray();
var read = sp.Read(b, 0, length);
Assert.AreEqual(length, read);
Assert.AreEqual(new byte[length], b);
}

[Test]
public void RespectsOffsetAndCount()
{
var sp = new SilenceProvider(new WaveFormat(44100, 2));
var length = 10;
var b = Enumerable.Range(1, length).Select(n => (byte)1).ToArray();
var read = sp.Read(b, 2, 4);
Assert.AreEqual(4, read);
Assert.AreEqual(new byte[] { 1, 1, 0, 0, 0, 0, 1, 1, 1, 1}, b);
}
}
}

0 comments on commit a996e1b

Please sign in to comment.