package mainimport ( "fmt" "git.sr.ht/~ft/cue")type Track struct { Number int `json:"number,omitempty"` DiskNumber int `json:"diskNumber,omitempty"` TotalTracks *int `json:"totalTracks"` TotalDisks int `json:"totalDisks,omitempty"` Composer string `json:"composer,omitempty"` Performer string `json:"performer,omitempty"` SongWriter string `json:"songWriter,omitempty"` Album string `json:"album,omitempty"` Title string `json:"title,omitempty"` Genre string `json:"genre,omitempty"` Date string `json:"date,omitempty"` StartAtSample int `json:"firstSample"` EndAtSample int `json:"lastSample,omitempty"`}func indexTimeToSample(sampleRate int, t *cue.Time) int { return (t.Min*60+t.Sec)*sampleRate + sampleRate/75*t.Frames}func (t *Track) Artist() string { switch { case t.Composer != "": return t.Composer case t.SongWriter != "": return t.SongWriter case t.Performer != "": return t.Performer default: return "Unknown Artist" }}func (t *Track) SetIndexes(sampleRate int, indexes []*cue.Index) error { // INDEX 01 defines the beginning of this track for _, i := range indexes { if i.Number == 1 { t.StartAtSample = indexTimeToSample(sampleRate, i.Time) return nil } } return fmt.Errorf("track number %d doesn't have INDEX 01", t.Number)}func (t *Track) SetNextIndexes(sampleRate int, indexes []*cue.Index) { // INDEX 00 of the next track will indicate the end of this track // no INDEX 00 found? the end is the beginning of the next track for _, i := range indexes { if i.Number == 0 { t.EndAtSample = indexTimeToSample(sampleRate, i.Time) return } else if i.Number == 1 && t.EndAtSample == 0 { t.EndAtSample = indexTimeToSample(sampleRate, i.Time) } }}
package main
import (
"fmt"
"git.sr.ht/~ft/cue"
)
type Track struct {
Number int `json:"number,omitempty"`
DiskNumber int `json:"diskNumber,omitempty"`
TotalTracks *int `json:"totalTracks"`
TotalDisks int `json:"totalDisks,omitempty"`
Composer string `json:"composer,omitempty"`
Performer string `json:"performer,omitempty"`
SongWriter string `json:"songWriter,omitempty"`
Album string `json:"album,omitempty"`
Title string `json:"title,omitempty"`
Genre string `json:"genre,omitempty"`
Date string `json:"date,omitempty"`
StartAtSample int `json:"firstSample"`
EndAtSample int `json:"lastSample,omitempty"`
}
func indexTimeToSample(sampleRate int, t *cue.Time) int {
return (t.Min*60+t.Sec)*sampleRate + sampleRate/75*t.Frames
}
func (t *Track) Artist() string {
switch {
case t.Composer != "":
return t.Composer
case t.SongWriter != "":
return t.SongWriter
case t.Performer != "":
return t.Performer
default:
return "Unknown Artist"
}
}
func (t *Track) SetIndexes(sampleRate int, indexes []*cue.Index) error {
// INDEX 01 defines the beginning of this track
for _, i := range indexes {
if i.Number == 1 {
t.StartAtSample = indexTimeToSample(sampleRate, i.Time)
return nil
}
}
return fmt.Errorf("track number %d doesn't have INDEX 01", t.Number)
}
func (t *Track) SetNextIndexes(sampleRate int, indexes []*cue.Index) {
// INDEX 00 of the next track will indicate the end of this track
// no INDEX 00 found? the end is the beginning of the next track
for _, i := range indexes {
if i.Number == 0 {
t.EndAtSample = indexTimeToSample(sampleRate, i.Time)
return
} else if i.Number == 1 && t.EndAtSample == 0 {
t.EndAtSample = indexTimeToSample(sampleRate, i.Time)
}
}
}