public override void Dispose() { DisposeStream(); if (RawWaveData != null) { Array.Clear(RawWaveData, 0, RawWaveData.Length); RawWaveData = null; } this.wformat = null; this.WaveForm = null; }
/// <summary> /// Returns the Index where reading begins for a wave-sample (<see cref="RiffForm" />) in memory. /// </summary> /// <param name="riff">Our ram/riff-wave.</param> /// <returns>Index where reading begins</returns> public static int FindSampleStart(RiffForm riff) { int start = -1; // if (!MustReadFromDisk) { foreach (KeyValuePair <long, SUBCHUNK> ck in riff.Cks.SubChunks) { if (ck.Value.ckID == "data") { start = Convert.ToInt32(ck.Key) + 8; } } } return(start); }
void InitializeMemory(string path) { this.WaveForm = RiffForm.Load(path); this.wformat = RiffUtil.ToNAudio(this.WaveForm.Cks.ckFmt); sampleData_ChunkLength = this.WaveForm["data"].ckLength; SampleData_SampleCount = SampleData_ChunkLength / WaveFormat.Channels; sampleData_DataStart = RiffUtil.FindSampleStart(this.WaveForm); RawWaveData = new byte[sampleData_ChunkLength]; using (waveFileInputStream = new FileStream( this.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { waveFileInputStream.Seek(sampleData_DataStart, SeekOrigin.Begin); waveFileInputStream.Read(RawWaveData, /*sampleData_DataStart*/ 0, SampleData_ChunkLength); } }