Files
questshock/modding/hacked/ss1/content/audio/wav/Save.go
T

36 lines
1.2 KiB
Go

package wav
import (
"encoding/binary"
"io"
)
// Save encodes the provided samples into the given writer.
func Save(writer io.Writer, sampleRate float32, samples []byte) error {
dataSize := uint32(len(samples))
var fmt formatHeader
fmtSize := fmt.size()
contentType := riffContentTypeWave
contentTypeSize := uint32(4)
tagSize := uint32(8)
tagSizes := tagSize * 2
fmt.base.FormatType = waveFormatTypePcm
fmt.base.Channels = 1
fmt.base.SamplesPerSec = uint32(sampleRate)
fmt.base.AvgBytesPerSec = fmt.base.SamplesPerSec
fmt.base.BlockAlign = 1
fmt.extension.BitsPerSample = 8
riffTag := riffChunkTag{ChunkType: riffChunkTypeRiff, Size: tagSizes + contentTypeSize + fmtSize + dataSize}
_ = binary.Write(writer, binary.LittleEndian, &riffTag)
_ = binary.Write(writer, binary.LittleEndian, &contentType)
_ = binary.Write(writer, binary.LittleEndian, &riffChunkTag{ChunkType: riffChunkTypeFmt, Size: fmtSize})
_ = binary.Write(writer, binary.LittleEndian, &fmt.base)
_ = binary.Write(writer, binary.LittleEndian, &fmt.extension)
_ = binary.Write(writer, binary.LittleEndian, &riffChunkTag{ChunkType: riffChunkTypeData, Size: dataSize})
_, err := writer.Write(samples)
return err
}