Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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>());
        }
Esempio n. 6
0
        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]));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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 }));
        }
Esempio n. 9
0
        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))));
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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);
        }