/// <summary> /// Creates a deeply cloned copy of the <see cref="WaveDataChunk"/>. /// </summary> /// <returns>A deeply cloned copy of the <see cref="WaveDataChunk"/>.</returns> public new WaveDataChunk Clone() { WaveDataChunk waveDataChunk = new WaveDataChunk(m_waveFormat); // Deep clone sample blocks foreach (LittleBinaryValue[] samples in m_sampleBlocks) { waveDataChunk.SampleBlocks.Add(WaveFile.CloneSampleBlock(samples)); } return waveDataChunk; }
/// <summary>Creates a new in-memory wave loaded from an existing wave audio stream.</summary> /// <param name="source">Stream of WAV formatted audio data to load.</param> /// <returns>In-memory representation of wave file.</returns> public static WaveFile Load(Stream source) { RiffChunk riffChunk; RiffHeaderChunk waveHeader = null; WaveFormatChunk waveFormat = null; WaveDataChunk waveData = null; while (waveData == null) { riffChunk = RiffChunk.ReadNext(source); switch (riffChunk.TypeID) { case RiffHeaderChunk.RiffTypeID: waveHeader = new RiffHeaderChunk(riffChunk, source, "WAVE"); break; case WaveFormatChunk.RiffTypeID: if (waveHeader == null) throw new InvalidDataException("WAVE format section encountered before RIFF header, wave file corrupted."); waveFormat = new WaveFormatChunk(riffChunk, source); break; case WaveDataChunk.RiffTypeID: if (waveFormat == null) throw new InvalidDataException("WAVE data section encountered before format section, wave file corrupted."); waveData = new WaveDataChunk(riffChunk, source, waveFormat); break; default: // Skip unidentified section source.Seek(riffChunk.ChunkSize, SeekOrigin.Current); break; } } return new WaveFile(waveHeader, waveFormat, waveData); }
public WaveFile(int sampleRate, short bitsPerSample, short channels, ushort audioFormat) { m_waveHeader = new RiffHeaderChunk("WAVE"); m_waveFormat = new WaveFormatChunk(sampleRate, bitsPerSample, channels, audioFormat); m_waveData = new WaveDataChunk(m_waveFormat); }
public WaveFile(RiffHeaderChunk waveHeader, WaveFormatChunk waveFormat, WaveDataChunk waveData) { m_waveHeader = waveHeader; m_waveFormat = waveFormat; m_waveData = waveData; }
/// <summary>Creates a new empty in-memory wave file using standard CD quality settings</summary> public WaveFile() { m_waveHeader = new RiffHeaderChunk("WAVE"); m_waveFormat = new WaveFormatChunk(44100, 16, 2, 0x1); m_waveData = new WaveDataChunk(m_waveFormat); }