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

65 lines
1.5 KiB
Go

package voc
import (
"bytes"
"encoding/binary"
"io"
)
// Save encodes the provided samples into the given writer.
func Save(writer io.Writer, sampleRate float32, samples []byte) error {
err := writeHeader(writer)
if err != nil {
return err
}
err = writeBasicSoundData(writer, sampleRate, samples)
if err != nil {
return err
}
err = writeEndOfFile(writer)
return err
}
func writeHeader(writer io.Writer) error {
version := baseVersion
_, err := writer.Write(bytes.NewBufferString(FileHeader).Bytes())
if err != nil {
return err
}
err = binary.Write(writer, binary.LittleEndian, standardHeaderSize)
if err != nil {
return err
}
err = binary.Write(writer, binary.LittleEndian, baseVersion)
if err != nil {
return err
}
return binary.Write(writer, binary.LittleEndian, (^version)+versionCheckValue)
}
func writeBlockHeader(writer io.Writer, block blockType, dataBytes int) error {
_, err := writer.Write([]byte{byte(block), byte(dataBytes), byte(dataBytes >> 8), byte(dataBytes >> 16)})
return err
}
func writeBasicSoundData(writer io.Writer, sampleRate float32, samples []byte) error {
sampleType := byte(0)
err := writeBlockHeader(writer, soundData, len(samples)+2)
if err != nil {
return err
}
_, err = writer.Write([]byte{sampleRateToDivisor(sampleRate), sampleType})
if err != nil {
return err
}
_, err = writer.Write(samples)
return err
}
func writeEndOfFile(writer io.Writer) error {
_, err := writer.Write([]byte{byte(terminator)})
return err
}