private static string FormatChunk(HeaderChunk chunk) { var chunkDivision = ""; var div = chunk.TickDivision; switch ((div & 0x8000) >> 15) { case 0: chunkDivision += (div & 0x7FFF) + " ticks per quarter note\n\n"; break; case 1: chunkDivision += (div & 0x7F00) + " frames per second, " + (div & 0xFF) + " ticks per frame\n\n"; break; default: chunkDivision += ""; break; } return("Header Chunk. There are " + chunk.TrackCount + "Track Chunks\n" + chunkDivision); }
public static MidiData Parse(FileStream inputFileStream) { var inputBinaryReader = new BinaryReader(inputFileStream); // Order of ReadBytes() ist critical! var headerChunkId = StringEncoder.GetString(inputBinaryReader.ReadBytes(4)); var headerChunkSize = BitConverter.ToInt32(inputBinaryReader.ReadBytes(4).Reverse().ToArray(), 0); var headerChunkData = inputBinaryReader.ReadBytes(headerChunkSize); var formatType = BitConverter.ToUInt16(headerChunkData.Take(2).Reverse().ToArray(), 0); var numberOfTracks = BitConverter.ToUInt16(headerChunkData.Skip(2).Take(2).Reverse().ToArray(), 0); var timeDivision = BitConverter.ToUInt16(headerChunkData.Skip(4).Take(2).Reverse().ToArray(), 0); var headerChunk = new HeaderChunk(formatType, timeDivision) { ChunkId = headerChunkId }; var tracks = Enumerable.Range(0, numberOfTracks).Select(trackNumber => { // ReSharper disable once UnusedVariable var trackChunkId = StringEncoder.GetString(inputBinaryReader.ReadBytes(4)); var trackChunkSize = BitConverter.ToInt32(inputBinaryReader.ReadBytes(4).Reverse().ToArray(), 0); var trackChunkData = inputBinaryReader.ReadBytes(trackChunkSize); return(Tuple.Create(trackChunkSize, trackChunkData)); }).ToList() .Select(rawTrack => new TrackChunk(ParseEvents(rawTrack.Item2.ToList(), rawTrack.Item1))).ToList(); return(new MidiData(headerChunk, tracks)); }
// private int width; // private int height; public void Write(int width1, int height1, Stream outputStream, Color[] colors) { width = width1; height = height1; colorData = colors; // switch (texture2D.Format) // { // case SurfaceFormat.Color: // texture2D.GetData(colorData); // // GetColorData(texture2D); outputStream.Write(HeaderChunk.PngSignature, 0, HeaderChunk.PngSignature.Length); var buffer1 = new HeaderChunk { Width = (uint)width1, Height = (uint)height1, BitDepth = 8, ColorType = colorType, CompressionMethod = 0, FilterMethod = 0, InterlaceMethod = 0 }.Encode(); outputStream.Write(buffer1, 0, buffer1.Length); var buffer2 = EncodePixelData(); var memoryStream = new MemoryStream(); try { using (var zlibStream = new ZlibStream(new MemoryStream(buffer2), CompressionMode.Compress)) { zlibStream.CopyTo(memoryStream); } } catch (Exception ex) { throw new Exception("An error occurred during DEFLATE compression.", ex); } var dataChunk = new DataChunk { Data = memoryStream.ToArray() }; var buffer3 = dataChunk.Encode(); outputStream.Write(buffer3, 0, buffer3.Length); var buffer4 = new EndChunk().Encode(); outputStream.Write(buffer4, 0, buffer4.Length); }
public void ValidMIDIHeaderParsed() { uint chunkId = 0x4D_54_68_64; uint chunkSize = 0x00_00_00_06; ushort formatType = 0x00_00; ushort trackCount = 0x00_01; ushort timeDivision = 0x00_80; byte[] headerBytes = ToMidiHeaderBytes(chunkId, chunkSize, formatType, trackCount, timeDivision); (ReportMessage report, HeaderChunk parsed) = HeaderChunk.FromBytes(headerBytes); Assert.IsFalse(report.IsError, "Header chunk parsing error: '{0}'", report.Message); Assert.AreEqual(new HeaderChunk(0, 1, 128), parsed); }
private void ProcessChunk(byte[] chunkBytes) { var chunkTypeString = PngChunk.GetChunkTypeString(chunkBytes.Skip(4).Take(4).ToArray()); if (!(chunkTypeString == "IHDR")) { if (!(chunkTypeString == "PLTE")) { if (!(chunkTypeString == "tRNS")) { if (!(chunkTypeString == "IDAT")) { return; } var dataChunk = new DataChunk(); dataChunk.Decode(chunkBytes); dataChunks.Add(dataChunk); } else { var transparencyChunk = new TransparencyChunk(); transparencyChunk.Decode(chunkBytes); palette.AddAlphaToColors(transparencyChunk.PaletteTransparencies); } } else { var paletteChunk = new PaletteChunk(); paletteChunk.Decode(chunkBytes); palette = paletteChunk.Palette; chunks.Add(paletteChunk); } } else { var headerChunk = new HeaderChunk(); headerChunk.Decode(chunkBytes); width = (int)headerChunk.Width; height = (int)headerChunk.Height; bitsPerSample = headerChunk.BitDepth; colorType = headerChunk.ColorType; chunks.Add(headerChunk); } }
public MidiData(HeaderChunk header, List <TrackChunk> tracks) { Header = header; Tracks = tracks; }