init: dec-music 项目初始化
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package decrypt
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"jsuse.com/dev/dec-music/internal/sniff"
|
||||
)
|
||||
|
||||
type rawDecoder struct {
|
||||
rd io.ReadSeeker
|
||||
|
||||
audioExt string
|
||||
}
|
||||
|
||||
func newRawDecoder(p *DecoderParams) Decoder {
|
||||
return &rawDecoder{rd: p.Reader}
|
||||
}
|
||||
|
||||
func (d *rawDecoder) Validate() error {
|
||||
header := make([]byte, 16)
|
||||
if _, err := io.ReadFull(d.rd, header); err != nil {
|
||||
return fmt.Errorf("read file header failed: %v", err)
|
||||
}
|
||||
if _, err := d.rd.Seek(0, io.SeekStart); err != nil {
|
||||
return fmt.Errorf("seek file failed: %v", err)
|
||||
}
|
||||
|
||||
var ok bool
|
||||
d.audioExt, ok = sniff.AudioExtension(header)
|
||||
if !ok {
|
||||
return errors.New("raw: sniff audio type failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *rawDecoder) Read(p []byte) (n int, err error) {
|
||||
return d.rd.Read(p)
|
||||
}
|
||||
|
||||
func init() {
|
||||
RegisterDecoder("mp3", true, newRawDecoder)
|
||||
RegisterDecoder("flac", true, newRawDecoder)
|
||||
RegisterDecoder("ogg", true, newRawDecoder)
|
||||
RegisterDecoder("m4a", true, newRawDecoder)
|
||||
RegisterDecoder("wav", true, newRawDecoder)
|
||||
RegisterDecoder("wma", true, newRawDecoder)
|
||||
RegisterDecoder("aac", true, newRawDecoder)
|
||||
}
|
||||
Reference in New Issue
Block a user