Exemplo n.º 1
0
        public bool ReadChunk(ref IFrameDataSubset subset, int overrideChunkSize = 0)
        {
            if (_chunkReadIndex >= Left.Length)
            {
                return(false);
            }

            if (overrideChunkSize != 0)
            {
                _chunkReadSize = overrideChunkSize;
            }

            var readSize  = _chunkReadSize;
            var readIndex = _chunkReadIndex;

            if (readIndex + readSize >= Left.Length)
            {
                readSize = Left.Length - readIndex;
            }

            _chunkReadIndex += readSize;

            subset = new FrameDataSubset(Left, Right, readIndex, readSize);
            return(true);
        }
Exemplo n.º 2
0
        private float[] ConvertStereoToMono(IFrameDataSubset subset)
        {
            var outputIndex = 0;
            var output = new float[subset.Length];
            var offset = subset.Left.Offset;
            for (var i = 0; i < subset.Length; i += 2)
            {
                output[outputIndex] = (subset.Left.Array[i + offset] + subset.Right.Array[i + offset]) / 2;
                outputIndex++;
            }

            return output;
        }
Exemplo n.º 3
0
        private float[] ConvertStereoToMono(IFrameDataSubset subset)
        {
            var outputIndex = 0;
            var output      = new float[subset.Length];
            var offset      = subset.Left.Offset;

            for (var i = 0; i < subset.Length; i += 2)
            {
                output[outputIndex] = (subset.Left.Array[i + offset] + subset.Right.Array[i + offset]) / 2;
                outputIndex++;
            }

            return(output);
        }
Exemplo n.º 4
0
        public IFrameData MakeSummaryData(IFrameData input, int ratio)
        {
            var max = new List <float>();

            input.BeginChunkyRead(ratio);

            IFrameDataSubset subset = null;

            while (input.ReadChunk(ref subset))
            {
                var maxmag = Math.Max(subset.Left.Max(), subset.Right.Max());
                var minmag = Math.Min(subset.Left.Min(), subset.Right.Min());
                max.Add(Math.Max(maxmag, Math.Abs(minmag)));
            }

            return(new FrameData(max.ToArray(), null, ratio));
        }
Exemplo n.º 5
0
        public float[] DetectOnsets(IFrameData waveData, int samplesPerSecond, int sampleWindowSize, float sensitivity = 1.5f)
        {
            _onsetDetection = new OnsetDetection(sampleWindowSize, samplesPerSecond);

            waveData.BeginChunkyRead(sampleWindowSize);

            IFrameDataSubset subset = null;

            while (waveData.ReadChunk(ref subset))
            {
                var mono = ConvertStereoToMono(subset);
                _onsetDetection.AddFlux(mono);
            }

            var onsets = _onsetDetection.FindOnsets(sensitivity);

            _onsetDetection.NormalizeOnsets(onsets, 0);

            return(onsets);
        }
Exemplo n.º 6
0
        public bool ReadChunk(ref IFrameDataSubset subset, int overrideChunkSize = 0)
        {
            if (_chunkReadIndex >= Left.Length) return false;

            if (overrideChunkSize != 0)
            {
                _chunkReadSize = overrideChunkSize;
            }

            var readSize = _chunkReadSize;
            var readIndex = _chunkReadIndex;

            if (readIndex + readSize >= Left.Length)
            {
                readSize = Left.Length - readIndex;
            }

            _chunkReadIndex += readSize;

            subset = new FrameDataSubset(Left, Right, readIndex, readSize);
            return true;
        }