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); }
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; }
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); }
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)); }
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); }
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; }