public static Stream CreateFauxStream( uint fileSignature, uint fileFrameCount, uint pingMode, uint beamCount, uint sampleCount, uint framesToAdd) { // Not especially efficient with value types, but we don't normally use the header // types this way. ArisFileHeader hdr = new ArisFileHeader(); hdr.Version = fileSignature; hdr.FrameCount = fileFrameCount; hdr.NumRawBeams = beamCount; hdr.SamplesPerChannel = sampleCount; return(CreateStreamFromFileHeader(ref hdr, pingMode, framesToAdd)); }
public void CheckFileForProblems_AllZeroFileHeader() { var emptyFileHdr = new ArisFileHeader(); var bytes = StructToBytes(ref emptyFileHdr); var(fstream, path) = CreateTestFile(); using (var file = fstream) { Assert.AreEqual(0L, fstream.Length); fstream.Write(bytes, 0, bytes.Length); } MatchVoid(CheckFileForProblems(path), onOk: actual => Assert.Fail("Cannot succeed if we can't verify signature, etc."), onError: msg => Assert.IsTrue(true)); }
public static Stream CreateStreamFromFileHeader( ref ArisFileHeader fileHdr, uint pingMode, uint framesToAdd) { var fileHdrSize = Marshal.SizeOf <ArisFileHeader>(); var sampleDataSize = fileHdr.NumRawBeams * fileHdr.SamplesPerChannel; var frameSize = sampleDataSize + Marshal.SizeOf <ArisFrameHeader>(); var totalSize = (int)(fileHdrSize + (framesToAdd * frameSize)); var stream = new MemoryStream(); var hdrBuf = StructToBytes(ref fileHdr); stream.Write(hdrBuf, 0, hdrBuf.Length); var sampleData = new byte[sampleDataSize]; var frameHdr = new ArisFrameHeader(); frameHdr.Version = ArisFrameHeader.ArisFrameSignature; frameHdr.SamplesPerBeam = fileHdr.SamplesPerChannel; frameHdr.PingMode = pingMode; var fi = 0u; var framesLeft = framesToAdd; while (framesLeft > 0) { frameHdr.FrameIndex = fi; var frameHdrBytes = StructToBytes(ref frameHdr); stream.Write(frameHdrBytes, 0, frameHdrBytes.Length); stream.Write(sampleData, 0, sampleData.Length); --framesLeft; ++fi; } return(stream); }