public void TrackCanBePaused() { // Arrange const int fullCount = 1000; const int halfCount = fullCount / 2; var mixer = new Mixer(); var soundData = GetRandomFloats(fullCount); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); track.Play(); var buffer = new float[fullCount]; // Act mixer.Read(buffer, 0, halfCount); track.Pause(); mixer.Read(buffer, halfCount, halfCount); // Assert Assert.That(track.IsPlaying, Is.False); var expectedBuffer = soundData.ToArray(); Array.Clear(expectedBuffer, halfCount, halfCount); Assert.That(buffer, Is.EqualTo(expectedBuffer)); }
public void TrackCanBeStoppedAndPlayedFromTheBeginning() { // Arrange const int fullCount = 1000; const int halfCount = fullCount / 2; const int quarterCount = fullCount / 4; var mixer = new Mixer(); var soundData = GetRandomFloats(fullCount); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); track.Play(); var buffer = new float[fullCount]; // Act mixer.Read(buffer, 0, halfCount); track.Stop(); mixer.Read(buffer, halfCount, quarterCount); track.Play(); mixer.Read(buffer, halfCount + quarterCount, quarterCount); // Assert Assert.That(track.IsPlaying, Is.True); var expectedBuffer = soundData.ToArray(); Array.Copy(soundData, 0, expectedBuffer, halfCount + quarterCount, quarterCount); Array.Clear(expectedBuffer, halfCount, quarterCount); Assert.That(buffer, Is.EqualTo(expectedBuffer)); }
public void UnitTests() { var sampleSource = new TestSampleSource(); sampleSource.value = 3; Func <int> getSample = delegate() { return(sampleSource.value); }; var recorder = new SampleRecorder <int>(getSample: getSample, sampleRate: 1.0f, maxSamplesCount: 2); Assert.AreEqual(recorder.samples.Count, 0); recorder.OnUpdate(new TimeSlice(1.0f)); Assert.AreEqual(recorder.samples.Count, 1); sampleSource.value = 4; recorder.OnUpdate(new TimeSlice(1.0f)); Assert.AreEqual(recorder.samples.Count, 2); Assert.AreEqual(recorder.samples[0].value, 3); Assert.AreEqual(recorder.samples[1].value, 4); sampleSource.value = 5; recorder.OnUpdate(new TimeSlice(1.0f)); Assert.AreEqual(recorder.samples.Count, 2); Assert.AreEqual(recorder.samples[0].value, 4); Assert.AreEqual(recorder.samples[1].value, 5); }
public void RemoveTrack_ShouldDisposeSampleSource() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); // Act mixer.RemoveTrack(track); // Assert Assert.That(sound.IsDisposed, Is.True); }
public void RemoveTrack_ShouldThrowException_WhenMixerDisposed() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); mixer.Dispose(); // Act // Assert Assert.That(() => mixer.RemoveTrack(track), Throws.TypeOf <ObjectDisposedException>()); }
public void Read_ShouldFillBufferWithZeroes_WhenTrackAddedButNotPlayed() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); mixer.AddTrack(sound); var buffer = new float[soundData.Length]; // Act mixer.Read(buffer, 0, buffer.Length); // Assert Assert.That(buffer, Is.EqualTo(new float[buffer.Length])); }
public void Read_ShouldNotDisposeSampleSource_WhenThereIsMoreToReadFromIt() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); track.Play(); var buffer = new float[soundData.Length]; // Act mixer.Read(buffer, 0, buffer.Length); // Assert Assert.That(sound.IsDisposed, Is.False); }
public void Read_ShouldMixTwoSoundsByAddition() { // Arrange var mixer = new Mixer(); var sound1 = new TestSampleSource(new[] { 1f, 2f, 3f }); var sound2 = new TestSampleSource(new[] { 10f, 20f, 30f }); var track1 = mixer.AddTrack(sound1); var track2 = mixer.AddTrack(sound2); track1.Play(); track2.Play(); var buffer = new float[3]; // Act mixer.Read(buffer, 0, buffer.Length); // Assert Assert.That(buffer, Is.EqualTo(new[] { 11f, 22f, 33f })); }
public void Read_ShouldFillBufferWithSoundDataFromTheOffset() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); track.Play(); var buffer = new float[soundData.Length]; // Act mixer.Read(buffer, 123, 456); // Assert Assert.That(buffer.Take(123), Is.EqualTo(Enumerable.Repeat(0f, 123))); Assert.That(buffer.Skip(123).Take(456), Is.EqualTo(soundData.Take(456))); Assert.That(buffer.Skip(123).Skip(456), Is.EqualTo(Enumerable.Repeat(0f, buffer.Length - (123 + 456)))); }
public void Read_ShouldStopTrack_WhenItHasCompleted() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); sound.Position = sound.Length; var track = mixer.AddTrack(sound); track.Play(); var buffer = new float[soundData.Length]; // Act mixer.Read(buffer, 0, buffer.Length); // Assert Assert.That(track.IsPlaying, Is.False); Assert.That(sound.Position, Is.Zero); }
public void TrackNotifiesWithEventWhenItIsDisposed() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound = new TestSampleSource(soundData); var track = mixer.AddTrack(sound); object?eventSender = null; track.Disposed += (sender, args) => { eventSender = sender; }; // Assume Assume.That(eventSender, Is.Null); // Act mixer.RemoveTrack(track); // Assert Assert.That(eventSender, Is.EqualTo(track)); }
public void Dispose_ShouldDisposeAllAddedSampleSources() { // Arrange var mixer = new Mixer(); var soundData = GetRandomFloats(); var sound1 = new TestSampleSource(soundData); var sound2 = new TestSampleSource(soundData); mixer.AddTrack(sound1); mixer.AddTrack(sound2); // Assume Assume.That(sound1.IsDisposed, Is.False); Assume.That(sound2.IsDisposed, Is.False); // Act mixer.Dispose(); // Assert Assert.That(sound1.IsDisposed, Is.True); Assert.That(sound2.IsDisposed, Is.True); }