riffbin

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 2, 2022 License: MIT Imports: 5 Imported by: 2

README

github.com/karupanerura/riffbin Go Reference codecov.io

Go module implementing for RIFF binary format.

Features

  • Construct RIFF data structure
  • Write RIFF data structure
    • Can write RIFF data from io.Reader
  • Parse RIFF binary to data structure

Motivation

There has never been a library that can be used without pre-determining the binary size in Go.

Examples

Example1: write WAVE file

_, err := riffbin.NewCompletedChunkWriter(w).Write(&riffbin.RIFFChunk{
	FormType: [4]byte{'W', 'A', 'V', 'E'},
	Payload: []riffbin.Chunk{
		&riffbin.CompletedSubChunk{
			ID: [4]byte{'f', 'm', 't', ' '},
			Payload: []byte{
				0x01, 0x00, // Compression Code (Linear PCM)
				0x01, 0x00, // Number of channels (Monoral)
				0x44, 0xAC, 0x00, 0x00, // Sample rate (44.1Hz)
				0x10, 0xB1, 0x02, 0x00, // Average bytes per second (44.1Hz/Monoral)
				0x01, 0x00, // Block align (8bit/Monoral)
				0x08, 0x00, // Significant bits per sample (8bit)
			},
		},
		// very short sin wave
		&riffbin.CompletedSubChunk{
			ID:		 [4]byte{'d', 'a', 't', 'a'},
			Payload: []byte{0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77},
		},
	},
})

Example2: write WAVE file from io.Reader

w, err := riffbin.NewIncompleteChunkWriter(f)
if err != nil {
	panic(err)
}

_, err = w.Write(&riffbin.RIFFChunk{
	FormType: [4]byte{'W', 'A', 'V', 'E'},
	Payload: []riffbin.Chunk{
		&riffbin.CompletedSubChunk{
			ID: [4]byte{'f', 'm', 't', ' '},
			Payload: []byte{
				0x01, 0x00, // Compression Code (Linear PCM)
				0x01, 0x00, // Number of channels (Monoral)
				0x44, 0xAC, 0x00, 0x00, // Sample rate (44.1Hz)
				0x10, 0xB1, 0x02, 0x00, // Average bytes per second (44.1Hz/Monoral)
				0x01, 0x00, // Block align (8bit/Monoral)
				0x08, 0x00, // Significant bits per sample (8bit)
			},
		},
		riffbin.NewIncompleteSubChunk([4]byte{'d', 'a', 't', 'a'}, r),
	},
})

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	// ErrInvalidFormat is an error for invalid RIFF file format.
	ErrInvalidFormat = errors.New("invlaid format")
)
View Source
var ErrUnexpectedIncompleteChunk = errors.New("unexpected incomplete chunk")

Functions

This section is empty.

Types

type Chunk

type Chunk interface {
	// ID is the chunk ID. this must be 4 byte and must not be modified.
	ChunkID() []byte

	// HeaderSize is byte lenght of the chunk header.
	HeaderSize() uint32

	// BodySize is byte lenght of the chunk body.
	BodySize() uint32
}

Chunk is a chunk of RIFF spec

type ChunkWriter

type ChunkWriter interface {
	// Write writes the RIFF message to the underlying data stream.
	// It returns the number of bytes written and any error encountered that caused the write to stop early. (same as Write of io.Writer)
	Write(*RIFFChunk) (int64, error)
}

ChunkWriter is a interface for RIFF chunk writer.

type CompletedChunkWriter

type CompletedChunkWriter struct {
	// contains filtered or unexported fields
}

CompletedChunkWriter is a RIFF chunk writer for the completed chunk.

func NewCompletedChunkWriter

func NewCompletedChunkWriter(w io.Writer) *CompletedChunkWriter

func (*CompletedChunkWriter) Write

func (w *CompletedChunkWriter) Write(c *RIFFChunk) (int64, error)

Write writes the RIFF message to the underlying data stream. It returns the number of bytes written and any error encountered that caused the write to stop early. (same as Write of io.Writer)

Example
package main

import (
	"encoding/base64"
	"os"

	"github.com/karupanerura/riffbin"
)

func main() {
	encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
	_, err := riffbin.NewCompletedChunkWriter(encoder).Write(&riffbin.RIFFChunk{
		FormType: [4]byte{'W', 'A', 'V', 'E'},
		Payload: []riffbin.Chunk{
			&riffbin.CompletedSubChunk{
				ID: [4]byte{'f', 'm', 't', ' '},
				Payload: []byte{
					0x01, 0x00, // Compression Code (Linear PCM)
					0x01, 0x00, // Number of channels (Monoral)
					0x44, 0xAC, 0x00, 0x00, // Sample rate (44.1Hz)
					0x44, 0xAC, 0x00, 0x00, // Average bytes per second (44.1Hz/Monoral)
					0x01, 0x00, // Block align (8bit/Monoral)
					0x08, 0x00, // Significant bits per sample (8bit)
				},
			},
			// very short sin wave
			&riffbin.CompletedSubChunk{
				ID:      [4]byte{'d', 'a', 't', 'a'},
				Payload: []byte{0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77, 0x7f, 0x87, 0x8f, 0x97, 0x9f, 0xa6, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd0, 0xd6, 0xdc, 0xe1, 0xe6, 0xeb, 0xef, 0xf2, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf2, 0xef, 0xeb, 0xe6, 0xe1, 0xdc, 0xd6, 0xd0, 0xca, 0xc3, 0xbc, 0xb5, 0xae, 0xa6, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x77, 0x6f, 0x67, 0x5f, 0x58, 0x50, 0x49, 0x42, 0x3b, 0x34, 0x2e, 0x28, 0x22, 0x1d, 0x18, 0x13, 0x0f, 0x0c, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0c, 0x0f, 0x13, 0x18, 0x1d, 0x22, 0x28, 0x2e, 0x34, 0x3b, 0x42, 0x49, 0x50, 0x58, 0x5f, 0x67, 0x6f, 0x77},
			},
		},
	})
	if err != nil {
		panic(err)
	}

	err = encoder.Close()
	if err != nil {
		panic(err)
	}

}
Output:
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

type CompletedSubChunk

type CompletedSubChunk struct {
	ID      [idBytes]byte
	Payload []byte
}

CompletedSubChunk is a fixed size sub-chunk.

func (*CompletedSubChunk) BodySize

func (c *CompletedSubChunk) BodySize() uint32

func (*CompletedSubChunk) ChunkID

func (c *CompletedSubChunk) ChunkID() []byte

func (*CompletedSubChunk) HeaderSize

func (c *CompletedSubChunk) HeaderSize() uint32

type IncompleteChunkWriter

type IncompleteChunkWriter struct {
	// contains filtered or unexported fields
}

IncompleteChunkWriter is a RIFF chunk writer for the incomplete chunk.

func NewIncompleteChunkWriter

func NewIncompleteChunkWriter(w io.WriteSeeker) (*IncompleteChunkWriter, error)

NewIncompleteChunkWriter creates a new IncompleteChunkWriter.

func (*IncompleteChunkWriter) Write

func (w *IncompleteChunkWriter) Write(c *RIFFChunk) (n int64, err error)

Write writes the RIFF message to the underlying data stream, and re-write the bytes of the all chunk headers size to fix incomplete body bytes by random write. It returns the number of bytes written and any error encountered that caused the write to stop early. (same as Write of io.Writer)

Example
package main

import (
	"io"
	"math"
	"os"
	"os/exec"
	"runtime"

	"github.com/karupanerura/riffbin"
)

type callbackReader func([]byte) (int, error)

func (r callbackReader) Read(p []byte) (int, error) {
	return r(p)
}

func main() {
	f, err := os.CreateTemp("", "riffbin")
	if err != nil {
		panic(err)
	}
	defer os.Remove(f.Name())

	w, err := riffbin.NewIncompleteChunkWriter(f)
	if err != nil {
		panic(err)
	}

	_, err = w.Write(&riffbin.RIFFChunk{
		FormType: [4]byte{'W', 'A', 'V', 'E'},
		Payload: []riffbin.Chunk{
			&riffbin.CompletedSubChunk{
				ID: [4]byte{'f', 'm', 't', ' '},
				Payload: []byte{
					0x01, 0x00, // Compression Code (Linear PCM)
					0x01, 0x00, // Number of channels (Monoral)
					0x44, 0xAC, 0x00, 0x00, // Sample rate (44.1Hz)
					0x44, 0xAC, 0x00, 0x00, // Average bytes per second (44.1Hz/Monoral)
					0x01, 0x00, // Block align (8bit/Monoral)
					0x08, 0x00, // Significant bits per sample (8bit)
				},
			},
			// sin wave
			riffbin.NewIncompleteSubChunk([4]byte{'d', 'a', 't', 'a'}, callbackReader(func() func(p []byte) (n int, err error) {
				max := 1000 * int(math.Ceil(44100/440))
				i := 0
				return func(p []byte) (n int, err error) {
					for n < len(p) && i < max {
						p[n] = byte(math.Floor((float64(i) / float64(max)) * 255.0 * (1.0 + math.Sin(2.0*math.Pi*float64(i)/(44100/440))) / 2.0))
						n++
						i++
					}
					if n == 0 {
						err = io.EOF
					}
					return
				}
			}())),
		},
	})
	if err != nil {
		panic(err)
	}

	// preview on macOS
	if os.Getenv("DEBUG_TEST_PLAY") != "" && runtime.GOOS == "darwin" {
		err = exec.Command("afplay", f.Name()).Run()
		if err != nil {
			panic(err)
		}
	}

}

type IncompleteSubChunk

type IncompleteSubChunk struct {
	// contains filtered or unexported fields
}

IncompleteSubChunk is a stream sub-chunk.

func NewIncompleteSubChunk

func NewIncompleteSubChunk(id [idBytes]byte, r io.Reader) *IncompleteSubChunk

func (*IncompleteSubChunk) BodySize

func (c *IncompleteSubChunk) BodySize() uint32

func (*IncompleteSubChunk) ChunkID

func (c *IncompleteSubChunk) ChunkID() []byte

func (*IncompleteSubChunk) HeaderSize

func (c *IncompleteSubChunk) HeaderSize() uint32

type ListChunk

type ListChunk struct {
	ListType [typeBytes]byte
	Payload  []Chunk
}

ListChunk is a LIST chunk.

func (*ListChunk) BodySize

func (c *ListChunk) BodySize() (size uint32)

func (*ListChunk) ChunkID

func (c *ListChunk) ChunkID() []byte

func (*ListChunk) HeaderSize

func (c *ListChunk) HeaderSize() uint32

type RIFFChunk

type RIFFChunk struct {
	FormType [typeBytes]byte
	Payload  []Chunk
}

RIFFChunk is a RIFF chunk. This is must be the root chunk.

func ReadFull

func ReadFull(r io.Reader) (*RIFFChunk, error)
Example
package main

import (
	"encoding/base64"
	"fmt"
	"strings"

	"github.com/karupanerura/riffbin"
)

func main() {
	const binary = "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"
	decoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(binary))
	riffChunk, err := riffbin.ReadFull(decoder)
	if err != nil {
		return
		panic(err)
	}

	fmt.Printf("ID = %q\n", string(riffChunk.ChunkID()))
	fmt.Printf("Size = %d\n", riffChunk.BodySize())
	for i, p := range riffChunk.Payload {
		fmt.Printf("[%d]ID = %q\n", i, string(p.ChunkID()))
		fmt.Printf("[%d]Size = %d\n", i, p.BodySize())
	}

}
Output:
ID = "RIFF"
Size = 2036
[0]ID = "fmt "
[0]Size = 16
[1]ID = "data"
[1]Size = 2000

func (*RIFFChunk) BodySize

func (c *RIFFChunk) BodySize() (size uint32)

func (*RIFFChunk) ChunkID

func (c *RIFFChunk) ChunkID() []byte

func (*RIFFChunk) HeaderSize

func (c *RIFFChunk) HeaderSize() uint32

Directories

Path Synopsis
cmd
riffdump command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL