예제 #1
0
 public static WaveData Read(WavFile file)
 {
     var stream = new FileStream(file.FileName, FileMode.Open);
     var result = Read(file, stream);
     stream.Close();
     return result;
 }
예제 #2
0
 public static Task<WaveData> ReadAsync(WavFile file, Stream stream, int samplesPerPixel)
 {
     return Task.Factory.StartNew<WaveData>(() =>
     {
         return Read(file,stream);
     });
 }
예제 #3
0
        /// <summary>
        /// Read wavfile infomation.
        /// </summary>
        /// <param name="stream">The stream of the file</param>
        /// <returns></returns>
        public static WavFile Read(Stream stream, int pixelPerSecond = 200, string cacheFile = "")
        {
            var file = new WavFile();

            using (var reader = new BinaryReader(stream))
            {
                stream.Position = 0;

                file.FileTag = string.Concat(reader.ReadChars(4));
                if (file.FileTag != "RIFF")
                {
                    throw new Exception("not RIFF file!");
                }
                file.FileLength  = reader.ReadInt32();
                stream.Position += 12;
                file.WaveFormat  = reader.ReadInt16();
                if (file.WaveFormat != 1)
                {
                    throw new Exception("not PCM format!");
                }
                file.Channels       = reader.ReadInt16();
                file.SampleRate     = reader.ReadInt32();
                file.BytesPerSecond = reader.ReadInt32();
                stream.Position    += 2;
                file.SampleBit      = reader.ReadInt16();
                stream.Position     = 36;
                var data = string.Concat(reader.ReadChars(4));
                while (data != "data") //find the start of data chunk
                {
                    stream.Position -= 3;
                    data             = string.Concat(reader.ReadChars(4));
                }
                file.DataSize       = reader.ReadInt32();
                file.DataOffset     = stream.Position;
                file.PixelPerSecond = pixelPerSecond;

                file.ComputeFileInfo();
                file.ReadCacheData(stream);
            }
            return(file);
        }
예제 #4
0
 public static WaveData Read(WavFile file, Stream stream)
 {
     stream.Position = file.DataOffset;
     if(file.Channels == 1)
     {
         switch (file.SampleBit)
         {
             case 8:return Read1Channel(stream, file.SampleNumber, file.MaxWidth,Read8Bit);
             case 16:return Read1Channel(stream, file.SampleNumber, file.MaxWidth,Read16Bit);
             default: return null;
         }
     }
     else
     {
         switch(file.SampleBit)
         {
             case 8: return Read2Channels(stream, file.SampleNumber/2, file.MaxWidth,Read8Bit);
             case 16: return Read2Channels(stream, file.SampleNumber/2, file.MaxWidth,Read16Bit);
             default: return null;
         }
     }
 }
예제 #5
0
 public static WaveData FromCacheFile(WavFile file, string filename)
 {
     return null;
 }
예제 #6
0
        /// <summary>
        /// Read wavfile infomation.
        /// </summary>
        /// <param name="stream">The stream of the file</param>
        /// <returns></returns>
        public static WavFile Read(Stream stream, int pixelPerSecond = 200,string cacheFile = "")
        {
            var file = new WavFile();
            using (var reader = new BinaryReader(stream))
            {
                stream.Position = 0;

                file.FileTag = string.Concat(reader.ReadChars(4));
                if (file.FileTag != "RIFF")
                    throw new Exception("not RIFF file!");
                file.FileLength = reader.ReadInt32();
                stream.Position += 12;
                file.WaveFormat = reader.ReadInt16();
                if (file.WaveFormat != 1)
                    throw new Exception("not PCM format!");
                file.Channels = reader.ReadInt16();
                file.SampleRate = reader.ReadInt32();
                file.BytesPerSecond = reader.ReadInt32();
                stream.Position += 2;
                file.SampleBit = reader.ReadInt16();
                stream.Position = 36;
                var data = string.Concat(reader.ReadChars(4));
                while(data != "data") //find the start of data chunk
                {
                    stream.Position -= 3;
                    data = string.Concat(reader.ReadChars(4));
                }
                file.DataSize = reader.ReadInt32();
                file.DataOffset = stream.Position;
                file.PixelPerSecond = pixelPerSecond;

                file.ComputeFileInfo();
                file.ReadCacheData(stream);
            }
            return file;
        }
예제 #7
0
        public static ImageSource Draw1Channel(WavFile wavFile, WaveStyle style, double startPer,double scale, double width, double height)
        {
            using (var stream = File.Open(wavFile.FileName, FileMode.Open))
            {
                using (var reader = new BinaryReader(stream))
                {

                }
            }
            return null;
        }