* fix/flac: Actually print relevant incorrect type
`si` will always be `(*meta.StreamInfo)`, the relevant type is
`block.Header.Type` which implements `Stringer`
* Update flac.go
Co-authored-by: Robin <mewmew@users.noreply.github.com>
Co-authored-by: Robin <mewmew@users.noreply.github.com>
* flac: encode frame header
* flac: calculate CRC-8 when encoding frame headers
* flac: fix encoding of frame header
* flac: add preliminary subframe encoder
* flac: fix UTF-8 encoding of frame number
* frame: add sanity check for sample count in decodeLPC
Updates #31.
* flac: update flac encoding API, depricate flac.Encode
Encode has been removed in favour of using NewEncoder.
The Encode function was temporarily added to support
re-encoding FLAC streams to update the metadata, but
it had no support for encoding audio samples.
The added flac.Encoder has support for encoding both
metadata and audio samples. It also does not require
that you first decode a FLAC file to later re-encode
it by calling Encode (as was the previous behaviour).
* flac: add MD5 running hash of unencoded audio samples to StreamInfo
* flac: remove unused encodePadding
Reported by golangci
* flac: fix golangci lint issues
frame/utf8.go:57:6: `decodeUTF8Int` is unused (deadcode)
func decodeUTF8Int(r io.Reader) (n uint64, err error) {
^
internal/utf8/encode.go:32:16: unnecessary conversion (unconvert)
bits = uint64(t2 | (x>>6)&mask2)
^
internal/utf8/encode.go:37:16: unnecessary conversion (unconvert)
bits = uint64(t3 | (x>>(6*2))&mask3)
^
internal/utf8/encode.go:42:16: unnecessary conversion (unconvert)
bits = uint64(t4 | (x>>(6*3))&mask4)
^
* flac: fix golangci lint issues
encode_frame.go:89:1: cyclomatic complexity 52 of func `(*Encoder).encodeFrameHeader` is high (> 30) (gocyclo)
func (enc *Encoder) encodeFrameHeader(w io.Writer, hdr frame.Header) error {
^
internal/utf8/encode.go:66:17: unnecessary conversion (unconvert)
bits := uint64(tx | (x>>uint(6*i))&maskx)
^
encode_subframe.go:105:46: unnecessary conversion (unconvert)
if err := bw.WriteBits(uint64(sample), byte(hdr.BitsPerSample)); err != nil {
^
* flac: clarify that frame.Header.Num is calculated by the encoder
* flac: minor re-phrasing
This has been tested with FLAC files containing
a lot of samples and a small block size, thus
having frame.Num make use of up to four
continuation bytes.
enc.go:178:35: unnecessary conversion (unconvert)
if err := enc.bw.WriteBits(uint64(si.NSamples), 36); err != nil {
^
enc.go:543:34: unnecessary conversion (unconvert)
if _, err := enc.bw.Write([]byte(pic.Data)); err != nil {
^
frame/frame.go:161:17: Error return value of `md5sum.Write` is not checked (errcheck)
md5sum.Write(buf[:1])
^
frame/frame.go:165:17: Error return value of `md5sum.Write` is not checked (errcheck)
md5sum.Write(buf[:2])
^
frame/frame.go:170:17: Error return value of `md5sum.Write` is not checked (errcheck)
md5sum.Write(buf[:])
^
Updates #25.
* Change signature to flacSignature
In order to disambiguate the introduction of the ID3v2 signature.
* Add check flac files containing ID3v2 data
* Implement skipId3v2
Note: a new import for decoding synchronized integers from ID3v2 headers
was introduced.
* Add error checking on the r.Discard calls
* Fix comments
* Use limited scope for error handling
* Capitalize ID in skipID3v2
* Fix comments
* Add testcase for skipping id3 data