private static void WriteSamplerChunk(BinaryWriter writer, WavWriterLoopPoint[] loopPoints) { const int samplerDataCount = 0; if (loopPoints == null) { loopPoints = new WavWriterLoopPoint[0]; } writer.Write(Encoding.ASCII.GetBytes("smpl")); writer.Write(36 + loopPoints.Length * 24 + samplerDataCount); //0x04 size writer.Write(0); //0x08 manufacturer writer.Write(0); //0x0c product writer.Write(0); //0x10 sample period writer.Write(0); //0x14 midi unity note writer.Write(0); //0x18 midi pitch fraction writer.Write(0); //0x1c smpte format writer.Write(0); //0x20 smpte offset writer.Write(loopPoints.Length); //number of sample loops writer.Write(samplerDataCount); //sampler data - byte count that will follow this chunk (including the entire sample loop list) foreach (var loopPoint in loopPoints) { WriteSamplerChunk_WriteLoop(writer, loopPoint); } }
private static void WriteSamplerChunk_WriteLoop(BinaryWriter writer, WavWriterLoopPoint wavWriterLoopPoint) { writer.Write(0); //id writer.Write(0); //type, 0 = forward(normal) writer.Write(wavWriterLoopPoint.StartSample); writer.Write(wavWriterLoopPoint.EndSample); writer.Write(0); //fraction writer.Write(0); //loop count, 0 = infinite }