feat: add go-taglib pure Go metadata extractor (#4902)
* feat: implement go-taglib extractor Signed-off-by: Deluan <deluan@navidrome.org> * feat: enhance ID3v2 frame parsing for language-specific lyrics Signed-off-by: Deluan <deluan@navidrome.org> * feat: add support for reading iTunes-specific tags from M4A files Signed-off-by: Deluan <deluan@navidrome.org> * feat: expose BitDepth in AudioProperties struct Signed-off-by: Deluan <deluan@navidrome.org> * feat: enhance WMA tag parsing by adding support for ASF attributes Signed-off-by: Deluan <deluan@navidrome.org> * feat: enhance ID3v2 frame parsing for WAV and AIFF formats to support language codes Signed-off-by: Deluan <deluan@navidrome.org> * chore: usa a ignored go.work for local dependency management * feat: optimize metadata extraction by consolidating file reads and improving tag processing Signed-off-by: Deluan <deluan@navidrome.org> * remove comment Signed-off-by: Deluan <deluan@navidrome.org> * feat: improve language code extraction for lyrics tags in metadata processing Signed-off-by: Deluan <deluan@navidrome.org> * address PR comments Signed-off-by: Deluan <deluan@navidrome.org> * chore: remove outdated comments in gotaglib.go Signed-off-by: Deluan <deluan@navidrome.org> * feat: enhance extractor to utilize filesystem for file handling Signed-off-by: Deluan <deluan@navidrome.org> * chore: update go-taglib dependency version in go.mod and go.sum Signed-off-by: Deluan <deluan@navidrome.org> * feat: make new go-taglib extractor default Signed-off-by: Deluan <deluan@navidrome.org> * chore: formatting Signed-off-by: Deluan <deluan@navidrome.org> --------- Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
@@ -151,11 +151,7 @@ var _ = Describe("Extractor", func() {
|
||||
unsSylt := makeLyrics("xxx", "unspecified SYLT")
|
||||
unsUslt := makeLyrics("xxx", "unspecified")
|
||||
|
||||
// Why is the order inconsistent between runs? Nobody knows
|
||||
Expect(lyrics).To(Or(
|
||||
Equal(model.LyricList{engSylt, engUslt, unsSylt, unsUslt}),
|
||||
Equal(model.LyricList{unsSylt, unsUslt, engSylt, engUslt}),
|
||||
))
|
||||
Expect(lyrics).To(ConsistOf(engSylt, engUslt, unsSylt, unsUslt))
|
||||
})
|
||||
|
||||
DescribeTable("format-specific lyrics", func(file string, isId3 bool) {
|
||||
|
||||
@@ -168,7 +168,7 @@ func parseTIPL(tags map[string][]string) {
|
||||
var _ local.Extractor = (*extractor)(nil)
|
||||
|
||||
func init() {
|
||||
local.RegisterExtractor("taglib", func(_ fs.FS, baseDir string) local.Extractor {
|
||||
local.RegisterExtractor("legacy-taglib", func(_ fs.FS, baseDir string) local.Extractor {
|
||||
// ignores fs, as taglib extractor only works with local files
|
||||
return &extractor{baseDir}
|
||||
})
|
||||
|
||||
@@ -80,12 +80,11 @@ var _ = Describe("Extractor", func() {
|
||||
Expect(err).To(BeNil())
|
||||
Expect(m.Tags).To(HaveKeyWithValue("fbpm", []string{"141.7"}))
|
||||
|
||||
// TabLib 1.12 returns 18, previous versions return 39.
|
||||
// TagLib 1.12 returns 18, previous versions return 39.
|
||||
// See https://github.com/taglib/taglib/commit/2f238921824741b2cfe6fbfbfc9701d9827ab06b
|
||||
Expect(m.AudioProperties.BitRate).To(BeElementOf(18, 19, 39, 40, 43, 49))
|
||||
Expect(m.AudioProperties.Channels).To(BeElementOf(2))
|
||||
Expect(m.AudioProperties.SampleRate).To(BeElementOf(8000))
|
||||
Expect(m.AudioProperties.SampleRate).To(BeElementOf(8000))
|
||||
Expect(m.HasPicture).To(BeTrue())
|
||||
})
|
||||
|
||||
@@ -106,7 +105,7 @@ var _ = Describe("Extractor", func() {
|
||||
|
||||
Expect(m.Tags).To(Or(
|
||||
HaveKeyWithValue("replaygain_album_gain", []string{albumGain}),
|
||||
HaveKeyWithValue("----:com.apple.itunes:replaygain_track_gain", []string{albumGain}),
|
||||
HaveKeyWithValue("----:com.apple.itunes:replaygain_album_gain", []string{albumGain}),
|
||||
))
|
||||
|
||||
Expect(m.Tags).To(Or(
|
||||
|
||||
Reference in New Issue
Block a user