update pkg wave

This commit is contained in:
Markus Tzoe 2017-07-25 19:54:02 +08:00
parent a5d7aea48e
commit f05a80459e
3 changed files with 11 additions and 12 deletions

View file

@ -39,8 +39,8 @@ func Decompress(infile io.ReadWriteSeeker, outfile io.WriteSeeker, passwd string
}
smpSize := info.nch * ((info.bps + 7) / 8)
dataSize := info.samples * smpSize
waveHdr := wave.NewHeader(dataSize, info.nch, info.sps, info.bps, smpSize)
if err = waveHdr.Write(outfile, dataSize); err != nil {
waveHdr := wave.NewHeader(dataSize, uint16(info.nch), info.sps, uint16(info.bps), uint16(smpSize))
if err = waveHdr.Write(outfile); err != nil {
return
}
bufSize := pcmBufferLength * smpSize

View file

@ -54,7 +54,7 @@ type ExtHeader struct {
} // WaveSubformat
}
func NewHeader(dataSize, nch, sps, bps, smpSize uint32) *Header {
func NewHeader(dataSize uint32, nch uint16, sps uint32, bps uint16, smpSize uint16) *Header {
return &Header{
ChunkId: magicRiff,
ChunkSize: dataSize + 36,
@ -62,11 +62,11 @@ func NewHeader(dataSize, nch, sps, bps, smpSize uint32) *Header {
SubchunkId: magicFormat,
SubchunkSize: 16,
AudioFormat: 1,
NumChannels: uint16(nch),
NumChannels: nch,
SampleRate: sps,
ByteRate: sps * smpSize,
BlockAlign: uint16(smpSize),
BitsPerSample: uint16(bps),
ByteRate: sps * uint32(smpSize),
BlockAlign: smpSize,
BitsPerSample: bps,
}
}
@ -157,7 +157,7 @@ func (w *Header) Read(fd io.ReadSeeker) (subchunkSize uint32, err error) {
return
}
func (w *Header) Write(fd io.Writer, size uint32) (err error) {
func (w *Header) Write(fd io.Writer) (err error) {
var writeLen int
// Write WAVE header
if writeLen, err = fd.Write(w.Bytes()); err != nil {
@ -167,7 +167,7 @@ func (w *Header) Write(fd io.Writer, size uint32) (err error) {
return
}
// Write Subchunk header
subchunkHdr := SubchunkHeader{magicChunk, size}
subchunkHdr := SubchunkHeader{magicChunk, w.ChunkSize - 36}
if writeLen, err = fd.Write(subchunkHdr.Bytes()); err != nil {
return
} else if writeLen != int(unsafe.Sizeof(subchunkHdr)) {

View file

@ -9,7 +9,6 @@ import (
var wavSlice = []byte{0x52, 0x49, 0x46, 0x46, 0x98, 0x03, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74, 0x20,
0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x44, 0xac, 0x00, 0x00, 0x10, 0xb1, 0x02, 0x00,
0x04, 0x00, 0x10, 0x00}
var wavSize = uint32(0x0374)
func TestReadHeader(t *testing.T) {
t.Parallel()
@ -22,7 +21,7 @@ func TestReadHeader(t *testing.T) {
if size, err := wav.Read(file); err != nil {
t.Error(err)
} else {
if bytes.Compare(wavSlice, wav.Bytes()) != 0 || size != wavSize {
if bytes.Compare(wavSlice, wav.Bytes()) != 0 || size != wav.ChunkSize-36 {
t.Error("Header::Read fail")
}
}
@ -39,7 +38,7 @@ func TestWriteHeader(t *testing.T) {
defer os.Remove(filename)
wav := Header{}
copy(wav.Bytes(), wavSlice)
if err = wav.Write(file, wavSize); err != nil {
if err = wav.Write(file); err != nil {
t.Error(err)
}
}