38 lines
699 B
Go
38 lines
699 B
Go
package metadata
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"time"
|
|
)
|
|
|
|
//https://www.liquisearch.com/cddb/example_calculation_of_a_cddb1_freedb_disc_id
|
|
|
|
type CDDB1 uint32
|
|
|
|
func (c CDDB1) GetStartTimeChecksum() int {
|
|
return int((c >> 24) & 0xFF)
|
|
}
|
|
|
|
func (c CDDB1) GetDuration() time.Duration {
|
|
return time.Second * time.Duration((c>>8)&0xFFFF)
|
|
}
|
|
|
|
func (c CDDB1) GetTrackNumber() int {
|
|
return int(c & 0xFF)
|
|
}
|
|
|
|
func NewCDDB1FromString(cddb1 string) CDDB1 {
|
|
b, err := hex.DecodeString(cddb1)
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return CDDB1(binary.BigEndian.Uint32(b))
|
|
}
|
|
|
|
func (c CDDB1) String() string {
|
|
b := make([]byte, 4)
|
|
binary.BigEndian.PutUint32(b, uint32(c))
|
|
return hex.EncodeToString(b)
|
|
}
|