Update RawDecoder & Support `.kwm` as `.aac`

This commit is contained in:
Emmm Monster 2021-05-23 19:59:29 +08:00
parent c836ac7cb5
commit 15e340eac4
No known key found for this signature in database
GPG Key ID: C98279C83FB50DB9
4 changed files with 29 additions and 19 deletions

View File

@ -1,17 +1,24 @@
package common package common
import "errors"
type RawDecoder struct { type RawDecoder struct {
file []byte file []byte
audioExt string audioExt string
} }
//goland:noinspection GoUnusedExportedFunction
func NewRawDecoder(file []byte) Decoder { func NewRawDecoder(file []byte) Decoder {
return &RawDecoder{file: file} return &RawDecoder{file: file}
} }
func (d RawDecoder) Validate() error { func (d *RawDecoder) Validate() error {
return nil for ext, sniffer := range snifferRegistry {
if sniffer(d.file) {
d.audioExt = ext
return nil
}
}
return errors.New("audio doesn't recognized")
} }
func (d RawDecoder) Decode() error { func (d RawDecoder) Decode() error {
@ -27,21 +34,19 @@ func (d RawDecoder) GetAudioData() []byte {
} }
func (d RawDecoder) GetAudioExt() string { func (d RawDecoder) GetAudioExt() string {
return "." + d.audioExt return d.audioExt
} }
func (d RawDecoder) GetMeta() Meta { func (d RawDecoder) GetMeta() Meta {
return nil return nil
} }
func DecoderFuncWithExt(ext string) NewDecoderFunc {
return func(file []byte) Decoder {
return &RawDecoder{file: file, audioExt: ext}
}
}
func init() { func init() {
/*RegisterDecoder("mp3", DecoderFuncWithExt("mp3")) RegisterDecoder("mp3", NewRawDecoder)
RegisterDecoder("flac", DecoderFuncWithExt("flac")) RegisterDecoder("flac", NewRawDecoder)
RegisterDecoder("wav", DecoderFuncWithExt("wav")) RegisterDecoder("ogg", NewRawDecoder)
RegisterDecoder("ogg", DecoderFuncWithExt("ogg")) RegisterDecoder("m4a", NewRawDecoder)
RegisterDecoder("m4a", DecoderFuncWithExt("m4a"))*/ RegisterDecoder("wav", NewRawDecoder)
RegisterDecoder("wma", NewRawDecoder)
RegisterDecoder("aac", NewRawDecoder)
} }

View File

@ -5,12 +5,13 @@ import "bytes"
type Sniffer func(header []byte) bool type Sniffer func(header []byte) bool
var snifferRegistry = map[string]Sniffer{ var snifferRegistry = map[string]Sniffer{
".m4a": SnifferM4A, ".mp3": SnifferMP3,
".ogg": SnifferOGG,
".flac": SnifferFLAC, ".flac": SnifferFLAC,
".ogg": SnifferOGG,
".m4a": SnifferM4A,
".wav": SnifferWAV, ".wav": SnifferWAV,
".wma": SnifferWMA, ".wma": SnifferWMA,
".mp3": SnifferMP3, ".aac": SnifferAAC,
} }
func SniffAll(header []byte) (string, bool) { func SniffAll(header []byte) (string, bool) {
@ -42,3 +43,6 @@ func SnifferWAV(header []byte) bool {
func SnifferWMA(header []byte) bool { func SnifferWMA(header []byte) bool {
return bytes.HasPrefix(header, []byte("\x30\x26\xb2\x75\x8e\x66\xcf\x11\xa6\xd9\x00\xaa\x00\x62\xce\x6c")) return bytes.HasPrefix(header, []byte("\x30\x26\xb2\x75\x8e\x66\xcf\x11\xa6\xd9\x00\xaa\x00\x62\xce\x6c"))
} }
func SnifferAAC(header []byte) bool {
return bytes.HasPrefix(header, []byte{0xFF, 0xF1})
}

View File

@ -125,4 +125,5 @@ func padOrTruncate(raw string, length int) string {
func init() { func init() {
// Kuwo Mp3/Flac // Kuwo Mp3/Flac
common.RegisterDecoder("kwm", NewDecoder) common.RegisterDecoder("kwm", NewDecoder)
common.RegisterDecoder("kwm", common.NewRawDecoder)
} }

View File

@ -73,7 +73,7 @@ func init() {
common.RegisterDecoder("tm2", DecoderFuncWithExt("m4a")) common.RegisterDecoder("tm2", DecoderFuncWithExt("m4a"))
common.RegisterDecoder("tm6", DecoderFuncWithExt("m4a")) common.RegisterDecoder("tm6", DecoderFuncWithExt("m4a"))
// QQ Music IOS Mp3 // QQ Music IOS Mp3
common.RegisterDecoder("tm0", common.DecoderFuncWithExt("mp3")) common.RegisterDecoder("tm0", common.NewRawDecoder)
common.RegisterDecoder("tm3", common.DecoderFuncWithExt("mp3")) common.RegisterDecoder("tm3", common.NewRawDecoder)
} }