示例#1
0
        // ---------------------------------------------------------------------------

        private bool HeaderIsValid(WAVRecord WAVData)
        {
            bool result = true;

            // Header validation
            if (!Utils.StringEqualsArr("RIFF", WAVData.RIFFHeader))
            {
                result = false;
            }
            if (!Utils.StringEqualsArr("WAVE", WAVData.WAVEHeader))
            {
                result = false;
            }
            if (!Utils.StringEqualsArr("fmt ", WAVData.FormatHeader))
            {
                result = false;
            }
            if ((WAVData.ChannelNumber != WAV_CM_MONO) &&
                (WAVData.ChannelNumber != WAV_CM_STEREO))
            {
                result = false;
            }

            return(result);
        }
示例#2
0
        // ********************* Auxiliary functions & voids ********************

        private bool ReadWAV(String FileName, ref WAVRecord WAVData)
        {
            bool         result     = true;
            FileStream   fs         = null;
            BinaryReader SourceFile = null;

            try
            {
                // Set read-access and open file
                fs         = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                SourceFile = new BinaryReader(fs);

                // Read header
                WAVData.RIFFHeader     = SourceFile.ReadChars(WAVData.RIFFHeader.Length);
                WAVData.FileSize       = SourceFile.ReadInt32();
                WAVData.WAVEHeader     = SourceFile.ReadChars(WAVData.WAVEHeader.Length);
                WAVData.FormatHeader   = SourceFile.ReadChars(WAVData.FormatHeader.Length);
                WAVData.FormatSize     = SourceFile.ReadInt32();
                WAVData.FormatID       = SourceFile.ReadUInt16();
                WAVData.ChannelNumber  = SourceFile.ReadUInt16();
                WAVData.SampleRate     = SourceFile.ReadInt32();
                WAVData.BytesPerSecond = SourceFile.ReadInt32();
                WAVData.BlockAlign     = SourceFile.ReadUInt16();
                WAVData.BitsPerSample  = SourceFile.ReadUInt16();
                WAVData.DataHeader     = SourceFile.ReadChars(WAVData.DataHeader.Length);

                // Read number of samples if exists
                if (!Utils.StringEqualsArr(DATA_CHUNK, WAVData.DataHeader))
                {
                    SourceFile.BaseStream.Seek(WAVData.FormatSize + 28, SeekOrigin.Begin);
                    WAVData.SampleNumber = SourceFile.ReadInt32();
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                result = false;
            }
            if (SourceFile != null)
            {
                SourceFile.Close();
            }
            if (fs != null)
            {
                fs.Close();
            }

            return(result);
        }
示例#3
0
        // ---------------------------------------------------------------------------

        public bool ReadFromFile(String FileName)
        {
            WAVRecord WAVData = new WAVRecord();

            // Reset and load header data from file to variable
            FResetData();
            WAVData.Reset();

            bool result = ReadWAV(FileName, ref WAVData);

            // Process data if loaded and header valid
            if ((result) && (HeaderIsValid(WAVData)))
            {
                FValid = true;
                // Fill properties with header data
                FFormatID       = WAVData.FormatID;
                FChannelNumber  = (byte)WAVData.ChannelNumber;
                FSampleRate     = (uint)WAVData.SampleRate;
                FBytesPerSecond = (uint)WAVData.BytesPerSecond;
                FBlockAlign     = WAVData.BlockAlign;
                FBitsPerSample  = (byte)WAVData.BitsPerSample;
                FSampleNumber   = WAVData.SampleNumber;
                if (Utils.StringEqualsArr(DATA_CHUNK, WAVData.DataHeader))
                {
                    FHeaderSize = 44;
                }
                else
                {
                    FHeaderSize = (ushort)(WAVData.FormatSize + 40);
                }
                FFileSize = (uint)WAVData.FileSize + 8;
                if (FHeaderSize > FFileSize)
                {
                    FHeaderSize = (ushort)FFileSize;
                }
            }
            return(result);
        }
示例#4
0
		// ---------------------------------------------------------------------------

		public bool ReadFromFile(String FileName)
		{
			WAVRecord WAVData = new WAVRecord();

			// Reset and load header data from file to variable
			FResetData();
			WAVData.Reset();
  
			bool result = ReadWAV(FileName, ref WAVData);
			// Process data if loaded and header valid
			if ( (result) && (HeaderIsValid(WAVData)) )
			{
				FValid = true;
				// Fill properties with header data
				FFormatID = WAVData.FormatID;
				FChannelNumber = (byte)WAVData.ChannelNumber;
				FSampleRate = (uint)WAVData.SampleRate;
				FBytesPerSecond = (uint)WAVData.BytesPerSecond;
				FBlockAlign = WAVData.BlockAlign;
				FBitsPerSample = (byte)WAVData.BitsPerSample;
				FSampleNumber = WAVData.SampleNumber;
				if ( Utils.StringEqualsArr(DATA_CHUNK, WAVData.DataHeader) ) FHeaderSize = 44;
				else FHeaderSize = (ushort)(WAVData.FormatSize + 40);
				FFileSize = (uint)WAVData.FileSize + 8;
				if (FHeaderSize > FFileSize) FHeaderSize = (ushort)FFileSize;
			}
			return result;
		}
示例#5
0
		// ---------------------------------------------------------------------------

		private bool HeaderIsValid(WAVRecord WAVData)
		{
			bool result = true;
			// Header validation
			if (! Utils.StringEqualsArr("RIFF",WAVData.RIFFHeader)) result = false;
			if (! Utils.StringEqualsArr("WAVE",WAVData.WAVEHeader)) result = false;
			if (! Utils.StringEqualsArr("fmt ",WAVData.FormatHeader)) result = false;
			if ( (WAVData.ChannelNumber != WAV_CM_MONO) &&
				(WAVData.ChannelNumber != WAV_CM_STEREO) ) result = false;

			return result;
		}
示例#6
0
		// ********************* Auxiliary functions & voids ********************

		private bool ReadWAV(String FileName, ref WAVRecord WAVData)
		{
			bool result = true;
			FileStream fs = null;
			BinaryReader SourceFile = null;

			try
			{
				// Set read-access and open file
				fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
				SourceFile = new BinaryReader(fs);
    
				// Read header		
				WAVData.RIFFHeader = SourceFile.ReadChars(WAVData.RIFFHeader.Length);
				WAVData.FileSize = SourceFile.ReadInt32();
				WAVData.WAVEHeader = SourceFile.ReadChars(WAVData.WAVEHeader.Length);
				WAVData.FormatHeader = SourceFile.ReadChars(WAVData.FormatHeader.Length);
				WAVData.FormatSize = SourceFile.ReadInt32();
				WAVData.FormatID = SourceFile.ReadUInt16();
				WAVData.ChannelNumber = SourceFile.ReadUInt16();
				WAVData.SampleRate = SourceFile.ReadInt32();
				WAVData.BytesPerSecond = SourceFile.ReadInt32();
				WAVData.BlockAlign = SourceFile.ReadUInt16();
				WAVData.BitsPerSample = SourceFile.ReadUInt16();
				WAVData.DataHeader = SourceFile.ReadChars(WAVData.DataHeader.Length);

				// Read number of samples if exists
				if ( ! Utils.StringEqualsArr(DATA_CHUNK,WAVData.DataHeader))
				{
					SourceFile.BaseStream.Seek(WAVData.FormatSize + 28, SeekOrigin.Begin);
					WAVData.SampleNumber = SourceFile.ReadInt32();
				}
			} 
			catch (Exception e) 
			{
				System.Console.WriteLine(e.StackTrace);
				result = false;
			}
			if (SourceFile != null) SourceFile.Close();
			if (fs != null) fs.Close();

			return result;
		}