diff --git a/internal/collect/collection.go b/internal/collect/collection.go index 5a844da..44f0f2c 100644 --- a/internal/collect/collection.go +++ b/internal/collect/collection.go @@ -233,6 +233,7 @@ func (c *Collection) SymlinkKeys() (err error) { if len(c.Keys) < 1 { return errors.New("no known keys") } + dst := util.APath(config.Output+"Key", config.Relative) err = os.MkdirAll(dst, os.ModePerm) if err != nil && !os.IsNotExist(err) { @@ -244,7 +245,20 @@ func (c *Collection) SymlinkKeys() (err error) { if err != nil && !os.IsExist(err) { return } + samploop: for _, s := range ss { + for _, st := range s.Type { + if st != TypeOneShot { + continue + } + oskeypath := keypath + "OneShots/" + err = os.MkdirAll(keypath, os.ModePerm) + if err != nil && !os.IsExist(err) { + return + } + go link(s, oskeypath) + continue samploop + } go link(s, keypath) } } diff --git a/internal/collect/parse.go b/internal/collect/parse.go index 79b49ac..bb0f1bf 100644 --- a/internal/collect/parse.go +++ b/internal/collect/parse.go @@ -127,7 +127,19 @@ func (s *Sample) ParseFilename() { var fallback = "" var keyFound = false - for _, opiece := range guessSeperator(s.Name) { + roots := []string{"C", "D", "E", "F", "G", "A", "B"} + + opieces := guessSeperator(s.Name) + for _, opiece := range opieces { + opiece = strings.TrimSuffix(opiece, ".wav") + for _, r := range roots { + if strings.TrimSpace(opiece) == r { + fallback = opiece + } + } + } + + for _, opiece := range opieces { opiece = strings.TrimSuffix(opiece, ".wav") log.Trace().Msgf("parse %s, piece: %s", s.Name, opiece) piece := strings.ToLower(opiece) @@ -145,17 +157,10 @@ func (s *Sample) ParseFilename() { } spl := strings.Split(opiece, "") - if len(spl) < 1 || len(spl) > 6 { + if len(spl) > 6 || len(spl) == 0 { continue } - roots := []string{"C", "D", "E", "F", "G", "A", "B"} - for _, r := range roots { - if opiece == r { - fallback = opiece - } - } - // if our fragment starts with a known root note, then try to parse the fragment, else dip-set. switch spl[0] { case "C", "D", "E", "F", "G", "A", "B": @@ -183,6 +188,7 @@ func (s *Sample) ParseFilename() { if !keyFound && fallback != "" { log.Warn().Msgf("using fallback key for %s: %s", s.Name, fallback) s.Key = key.Of(fallback) + go Library.IngestKey(s) } } @@ -208,7 +214,7 @@ func readWAV(s *Sample) error { return fmt.Errorf("failed to get duration for %s: %s", s.Name, err.Error()) } - if s.Duration < 2*time.Second { + if s.Duration != 0 && s.Duration < 2*time.Second { s.Type = append(s.Type, TypeOneShot) var newTypes []SampleType for _, t := range s.Type { @@ -251,10 +257,10 @@ func Process(entry fs.DirEntry, dir string) (s *Sample, err error) { } case "wav": if !config.SkipWavDecode { - err = readWAV(s) - } - if err != nil { - log.Warn().Str("caller", s.Name).Msgf("failed to parse wav data") + wavErr := readWAV(s) + if wavErr != nil { + log.Debug().Err(wavErr).Caller().Str("caller", s.Name).Msgf("failed to parse wav data") + } } s.ParseFilename() default: