Exemplo n.º 1
0
        public void Submit(SampleBuffer samples)
        {
            if (samples.Frames == 0)
            {
                return;
            }

            if (_replayGainExport != null)
            {
                samples = _replayGainExport.Value.Process(samples);
            }

            if (samples.IsInterleaved)
            {
                Span <float> interleavedSamples = stackalloc float[samples.Frames * samples.Channels];
                samples.CopyToInterleaved(interleavedSamples);
                _encoder !.EncodeInterleaved(interleavedSamples, samples.Frames);
            }
            else if (samples.Channels == 1)
            {
                Span <float> monoSamples = stackalloc float[samples.Frames];
                samples.CopyTo(monoSamples);
                _encoder !.Encode(monoSamples, null);
            }
            else
            {
                Span <float> leftSamples  = stackalloc float[samples.Frames];
                Span <float> rightSamples = stackalloc float[samples.Frames];
                samples.CopyTo(leftSamples, rightSamples);
                _encoder !.Encode(leftSamples, rightSamples);
            }
        }
Exemplo n.º 2
0
        public unsafe void Submit(SampleBuffer samples)
        {
            if (samples.Frames == 0)
            {
                return;
            }

            if (_replayGainExport != null)
            {
                samples = _replayGainExport.Value.Process(samples);
            }

            // Request an unmanaged buffer for each channel, then copy the samples to them
            var buffers = new Span <IntPtr>(_encoder !.GetBuffer(samples.Frames).ToPointer(), samples.Channels);

            if (samples.Channels == 1)
            {
                var monoBuffer = new Span <float>(buffers[0].ToPointer(), samples.Frames);
                samples.CopyTo(monoBuffer);
            }
            else
            {
                var leftBuffer  = new Span <float>(buffers[0].ToPointer(), samples.Frames);
                var rightBuffer = new Span <float>(buffers[1].ToPointer(), samples.Frames);
                samples.CopyTo(leftBuffer, rightBuffer);
            }

            WriteFrames(samples.Frames);
        }
Exemplo n.º 3
0
        public void CopyToIntStereoThrowsExceptionWhenDisposed()
        {
            var samples         = new SampleBuffer(new float[2], 2);
            var leftOutSamples  = new int[1];
            var rightOutSamples = new int[1];

            samples.Dispose();

            Assert.Throws <ObjectDisposedException>(() => samples.CopyTo(leftOutSamples, rightOutSamples, 16));
        }
Exemplo n.º 4
0
        public void CopyToFloatMonoThrowsExceptionWhenDisposed()
        {
            var samples    = new SampleBuffer(new float[1], 1);
            var outSamples = new float[1];

            samples.Dispose();

            Assert.Throws <ObjectDisposedException>(() =>
                                                    samples.CopyTo(outSamples));
        }
Exemplo n.º 5
0
        public void CopyToIntStereoReturnsExpectedResultsForStereo()
        {
            var leftOutSamples  = new int[2];
            var rightOutSamples = new int[2];

            using (var samples = new SampleBuffer(new[] { 1, 1 }, new[] { 2, 2 }, 16))
                samples.CopyTo(leftOutSamples, rightOutSamples, 16);

            Assert.All(leftOutSamples, value => Assert.Equal(1, value));
            Assert.All(rightOutSamples, value => Assert.Equal(2, value));
        }
Exemplo n.º 6
0
        public void CopyToFloatStereoReturnsExpectedResultsForInterleaved()
        {
            var leftOutSamples  = new float[2];
            var rightOutSamples = new float[2];

            using (var samples = new SampleBuffer(new[] { 1f, 2f, 1f, 2f }, 2))
                samples.CopyTo(leftOutSamples, rightOutSamples);

            Assert.All(leftOutSamples, value => Assert.Equal(1f, value));
            Assert.All(rightOutSamples, value => Assert.Equal(2f, value));
        }
Exemplo n.º 7
0
        public void SamplesStayInRange(int bitsPerSample, int minValue, int maxValue)
        {
            var inSamples = new int[4096];

            for (int i = 1, j = minValue, k = maxValue; i < inSamples.Length; i += 2, j++, k--)
            {
                inSamples[i - 1] = Math.Min(j, maxValue);
                inSamples[i]     = Math.Max(k, minValue);
            }
            var outSamples = new float[inSamples.Length];

            using (var samples = new SampleBuffer(inSamples, bitsPerSample))
                samples.CopyTo(outSamples);

            Assert.All(outSamples, sample =>
                       Assert.True(sample >= -1.0 && sample <= 1.0));
        }