示例#1
0
文件: WaveFile.cs 项目: avs009/gsf
 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);
 }
示例#2
0
文件: WaveFile.cs 项目: avs009/gsf
 public WaveFile(RiffHeaderChunk waveHeader, WaveFormatChunk waveFormat, WaveDataChunk waveData)
 {
     m_waveHeader = waveHeader;
     m_waveFormat = waveFormat;
     m_waveData = waveData;
 }
示例#3
0
文件: WaveFile.cs 项目: avs009/gsf
 /// <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);
 }
示例#4
0
文件: WaveFile.cs 项目: avs009/gsf
        /// <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);
        }
示例#5
0
文件: WaveFile.cs 项目: rmc00/gsf
 public WaveFile(RiffHeaderChunk waveHeader, WaveFormatChunk waveFormat, WaveDataChunk waveData, ListInfoChunk listInfo = null)
 {
     m_waveHeader = waveHeader;
     m_waveFormat = waveFormat;
     m_waveData = waveData;
     m_listInfo = listInfo;
 }
示例#6
0
文件: WaveFile.cs 项目: rmc00/gsf
        /// <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>
        /// <param name="loadData">Determines if wave data should be loaded into memory.</param>
        /// <returns>In-memory representation of wave file.</returns>
        public static WaveFile Load(Stream source, bool loadData = true)
        {
            RiffChunk riffChunk;
            RiffHeaderChunk waveHeader = null;
            WaveFormatChunk waveFormat = null;
            WaveDataChunk waveData = null;
            ListInfoChunk listInfo = null;

            while (source.Position < source.Length)
            {
                riffChunk = RiffChunk.ReadNext(source);

                switch (riffChunk.TypeID)
                {
                    case RiffHeaderChunk.RiffTypeID:
                        waveHeader = new RiffHeaderChunk(riffChunk, source, "WAVE");
                        break;
                    case WaveFormatChunk.RiffTypeID:
                        if ((object)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 ((object)waveFormat == null)
                            throw new InvalidDataException("WAVE data section encountered before format section, wave file corrupted");

                        if (loadData)
                        {
                            waveData = new WaveDataChunk(riffChunk, source, waveFormat);
                        }
                        else
                        {
                            source.Seek(riffChunk.ChunkSize, SeekOrigin.Current);
                            waveData = new WaveDataChunk(waveFormat);
                            waveData.ChunkSize = riffChunk.ChunkSize;
                        }
                        break;
                    case ListInfoChunk.RiffTypeID:
                        listInfo = new ListInfoChunk(riffChunk, source);
                        break;
                    default:
                        // Skip unidentified section
                        source.Seek(riffChunk.ChunkSize, SeekOrigin.Current);
                        break;
                }
            }

            return new WaveFile(waveHeader, waveFormat, waveData, listInfo);
        }
示例#7
0
文件: WaveFile.cs 项目: avs009/gsf
        /// <summary>Creates a new in-memory wave loaded from an existing wave file.</summary>
        /// <param name="waveFileName">File name of WAV file to load.</param>
        /// <returns>In-memory representation of wave file.</returns>
        public static WaveFile Load(string waveFileName)
        {
            FileStream source = File.Open(waveFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
            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:
                        break;
                }
            }

            return new WaveFile(waveHeader, waveFormat, waveData);
        }