Add Decoder Registry
Add Raw Decoder
This commit is contained in:
parent
1aa5731225
commit
d5031e1935
12
algo/common/dispatch.go
Normal file
12
algo/common/dispatch.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
type NewDecoderFunc func([]byte) Decoder
|
||||||
|
|
||||||
|
var decoderRegistry = make(map[string][]NewDecoderFunc)
|
||||||
|
|
||||||
|
func RegisterDecoder(ext string, dispatchFunc NewDecoderFunc) {
|
||||||
|
decoderRegistry[ext] = append(decoderRegistry[ext], dispatchFunc)
|
||||||
|
}
|
||||||
|
func GetDecoder(ext string) []NewDecoderFunc {
|
||||||
|
return decoderRegistry[ext]
|
||||||
|
}
|
41
algo/common/raw.go
Normal file
41
algo/common/raw.go
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
type RawDecoder struct {
|
||||||
|
file []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRawDecoder(file []byte) Decoder {
|
||||||
|
return &RawDecoder{file: file}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d RawDecoder) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d RawDecoder) Decode() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d RawDecoder) GetCoverImage() []byte {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d RawDecoder) GetAudioData() []byte {
|
||||||
|
return d.file
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d RawDecoder) GetAudioExt() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d RawDecoder) GetMeta() Meta {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
RegisterDecoder("mp3", NewRawDecoder)
|
||||||
|
RegisterDecoder("flac", NewRawDecoder)
|
||||||
|
RegisterDecoder("wav", NewRawDecoder)
|
||||||
|
RegisterDecoder("ogg", NewRawDecoder)
|
||||||
|
RegisterDecoder("m4a", NewRawDecoder)
|
||||||
|
}
|
@ -25,7 +25,7 @@ type Decoder struct {
|
|||||||
audio []byte
|
audio []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDecoder(file []byte) *Decoder {
|
func NewDecoder(file []byte) common.Decoder {
|
||||||
return &Decoder{
|
return &Decoder{
|
||||||
file: file,
|
file: file,
|
||||||
}
|
}
|
||||||
@ -89,3 +89,10 @@ func (d *Decoder) Decode() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func init() {
|
||||||
|
// Kugou
|
||||||
|
common.RegisterDecoder("kgm", NewDecoder)
|
||||||
|
common.RegisterDecoder("kgma", NewDecoder)
|
||||||
|
// Viper
|
||||||
|
common.RegisterDecoder("vpr", NewDecoder)
|
||||||
|
}
|
||||||
|
@ -48,7 +48,7 @@ func (d *Decoder) GetMeta() common.Meta {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDecoder(data []byte) *Decoder {
|
func NewDecoder(data []byte) common.Decoder {
|
||||||
//todo: Notice the input data will be changed for now
|
//todo: Notice the input data will be changed for now
|
||||||
return &Decoder{file: data}
|
return &Decoder{file: data}
|
||||||
}
|
}
|
||||||
@ -123,3 +123,8 @@ func padOrTruncate(raw string, length int) string {
|
|||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Kuwo Mp3/Flac
|
||||||
|
common.RegisterDecoder("kwm", NewDecoder)
|
||||||
|
}
|
||||||
|
@ -26,7 +26,7 @@ var (
|
|||||||
0x5C, 0x5D, 0x26, 0x30, 0x55, 0x3C, 0x27, 0x28}
|
0x5C, 0x5D, 0x26, 0x30, 0x55, 0x3C, 0x27, 0x28}
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewDecoder(data []byte) *Decoder {
|
func NewDecoder(data []byte) common.Decoder {
|
||||||
return &Decoder{
|
return &Decoder{
|
||||||
file: data,
|
file: data,
|
||||||
fileLen: uint32(len(data)),
|
fileLen: uint32(len(data)),
|
||||||
@ -255,3 +255,8 @@ func (d Decoder) GetCoverImage() []byte {
|
|||||||
func (d Decoder) GetMeta() common.Meta {
|
func (d Decoder) GetMeta() common.Meta {
|
||||||
return d.meta
|
return d.meta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Netease Mp3/Flac
|
||||||
|
common.RegisterDecoder("ncm", NewDecoder)
|
||||||
|
}
|
||||||
|
@ -22,15 +22,15 @@ type Decoder struct {
|
|||||||
audio []byte
|
audio []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDefaultDecoder(data []byte) *Decoder {
|
func NewDefaultDecoder(data []byte) common.Decoder {
|
||||||
return &Decoder{file: data, mask: getDefaultMask()}
|
return &Decoder{file: data, mask: getDefaultMask()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMflac256Decoder(data []byte) *Decoder {
|
func NewMflac256Decoder(data []byte) common.Decoder {
|
||||||
return &Decoder{file: data, maskDetector: detectMflac256Mask, audioExt: "flac"}
|
return &Decoder{file: data, maskDetector: detectMflac256Mask, audioExt: "flac"}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMgg256Decoder(data []byte) *Decoder {
|
func NewMgg256Decoder(data []byte) common.Decoder {
|
||||||
return &Decoder{file: data, maskDetector: detectMgg256Mask, audioExt: "ogg"}
|
return &Decoder{file: data, maskDetector: detectMgg256Mask, audioExt: "ogg"}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,3 +94,25 @@ func (d Decoder) GetAudioExt() string {
|
|||||||
func (d Decoder) GetMeta() common.Meta {
|
func (d Decoder) GetMeta() common.Meta {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
common.RegisterDecoder("qmc3", NewDefaultDecoder) //QQ Music Mp3
|
||||||
|
common.RegisterDecoder("qmc2", NewDefaultDecoder) //QQ Music Ogg
|
||||||
|
common.RegisterDecoder("qmc0", NewDefaultDecoder) //QQ Music Mp3
|
||||||
|
common.RegisterDecoder("qmcflac", NewDefaultDecoder) //QQ Music Flac
|
||||||
|
common.RegisterDecoder("qmcogg", NewDefaultDecoder) //QQ Music Ogg
|
||||||
|
common.RegisterDecoder("tkm", NewDefaultDecoder) //QQ Music Accompaniment M4a
|
||||||
|
|
||||||
|
common.RegisterDecoder("bkcmp3", NewDefaultDecoder) //Moo Music Mp3
|
||||||
|
common.RegisterDecoder("bkcflac", NewDefaultDecoder) //Moo Music Flac
|
||||||
|
|
||||||
|
common.RegisterDecoder("666c6163", NewDefaultDecoder) //QQ Music Weiyun Flac
|
||||||
|
common.RegisterDecoder("6d7033", NewDefaultDecoder) //QQ Music Weiyun Mp3
|
||||||
|
common.RegisterDecoder("6f6767", NewDefaultDecoder) //QQ Music Weiyun Ogg
|
||||||
|
common.RegisterDecoder("6d3461", NewDefaultDecoder) //QQ Music Weiyun M4a
|
||||||
|
common.RegisterDecoder("776176", NewDefaultDecoder) //QQ Music Weiyun Wav
|
||||||
|
|
||||||
|
common.RegisterDecoder("mgg", NewMgg256Decoder) //QQ Music Weiyun Wav
|
||||||
|
common.RegisterDecoder("mflac", NewMflac256Decoder) //QQ Music Weiyun Wav
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -32,10 +32,6 @@ func (d *Decoder) GetMeta() common.Meta {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDecoder(data []byte) *Decoder {
|
|
||||||
return &Decoder{file: data}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Decoder) Validate() error {
|
func (d *Decoder) Validate() error {
|
||||||
if len(d.file) < 8 {
|
if len(d.file) < 8 {
|
||||||
return errors.New("invalid file size")
|
return errors.New("invalid file size")
|
||||||
@ -57,3 +53,17 @@ func (d *Decoder) Decode() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewDecoder(data []byte) common.Decoder {
|
||||||
|
return &Decoder{file: data}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// QQ Music IOS M4a
|
||||||
|
common.RegisterDecoder("tm2", NewDecoder)
|
||||||
|
common.RegisterDecoder("tm6", NewDecoder)
|
||||||
|
// QQ Music IOS Mp3
|
||||||
|
common.RegisterDecoder("tm0", common.NewRawDecoder)
|
||||||
|
common.RegisterDecoder("tm3", common.NewRawDecoder)
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -45,7 +45,7 @@ func (d *Decoder) GetMeta() common.Meta {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDecoder(data []byte) *Decoder {
|
func NewDecoder(data []byte) common.Decoder {
|
||||||
return &Decoder{file: data}
|
return &Decoder{file: data}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,3 +84,13 @@ func (d *Decoder) Decode() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func init() {
|
||||||
|
// Xiami Wav/M4a/Mp3/Flac
|
||||||
|
common.RegisterDecoder("xm", NewDecoder)
|
||||||
|
// Xiami Typed Format
|
||||||
|
// todo: Init With Type
|
||||||
|
common.RegisterDecoder("wav", NewDecoder)
|
||||||
|
common.RegisterDecoder("mp3", NewDecoder)
|
||||||
|
common.RegisterDecoder("flac", NewDecoder)
|
||||||
|
common.RegisterDecoder("m4a", NewDecoder)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user