/// <summary> /// construct audio file /// passing in audio size and id3 length tag (if any) to help with bitrate calculations /// </summary> /// <param name="sourceBuffer"></param> /// <param name="id3DurationTag"></param> public AudioBuffer(byte[] sourceBuffer, TimeSpan?id3DurationTag) : base(AudioFrameFactory.CreateFrame(sourceBuffer), id3DurationTag) { _sourceBuffer = sourceBuffer; CheckConsistency(); }
private static AudioFrame ReadFirstFrame(FileInfo sourceFileInfo, UInt32 audioStart, UInt32 audioNumBytes) { using (FileStream stream = sourceFileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.Write)) { stream.Seek(audioStart, SeekOrigin.Begin); // read a base level mp3 frame header // if it can't even do that right, just fail the call. return(AudioFrameFactory.CreateFrame(stream, audioNumBytes)); } }
/// <summary> /// Count frames and bytes of file to see who's telling porkies /// </summary> public void ScanWholeFile() { _audioStats._numFrames = 0; _audioStats._numBytes = 0; using (Stream stream = OpenAudioStream()) { uint payloadStart = (uint)stream.Position; try { while (true) { uint pos = (uint)stream.Position; uint used = pos - payloadStart; uint remainingBytes = NumPayloadBytes - used; AudioFrame frame = AudioFrameFactory.CreateFrame(stream, remainingBytes); if (frame == null) { break; } ++_audioStats._numFrames; _audioStats._numBytes += frame.FrameLengthInBytes; //Trace.WriteLine(string.Format("frame {0} ({1} bytes) found at {2}", // _audioStats._numFrames, // frame.Header.FrameLengthInBytes, // stream.Position - frame.Header.FrameLengthInBytes)); } } catch (Exception e) { _hasInconsistencies = true; Trace.WriteLine(e.Message); } } }