2
2
3
3
import tagpy
4
4
import tagpy .id3v2
5
+ import tagpy .ogg .flac
5
6
from torchaudio .io import StreamWriter , CodecConfig
6
7
import stembox
7
8
import torch
@@ -27,29 +28,34 @@ def _extract_cover(f):
27
28
covers = []
28
29
if hasattr (tag , "covers" ):
29
30
covers = tag .covers
31
+ elif hasattr (tag , "pictureList" ):
32
+ covers = tag .pictureList ()
30
33
elif hasattr (f , "ID3v2Tag" ):
31
34
covers = [
32
35
a
33
36
for a in f .ID3v2Tag ().frameList ()
34
37
if isinstance (a , tagpy .id3v2 .AttachedPictureFrame )
35
38
]
36
-
37
39
if covers :
38
40
cover = covers [0 ]
39
41
fmt = tagpy .mp4 .CoverArtFormats .Unknown
40
42
if isinstance (cover , tagpy .mp4 .CoverArt ):
41
43
return cover
44
+ data = None
45
+ if isinstance (cover , tagpy .ogg .flac .Picture ):
46
+ data = cover .data ()
42
47
else :
43
- mime = cover .mimeType ().lower ().strip ()
44
- if "image/jpeg" :
45
- fmt = tagpy .mp4 .CoverArtFormats .JPEG
46
- elif "image/png" :
47
- fmt = tagpy .mp4 .CoverArtFormats .PNG
48
- elif "image/bmp" :
49
- fmt = tagpy .mp4 .CoverArtFormats .BMP
50
- elif "image/gif" :
51
- fmt = tagpy .mp4 .CoverArtFormats .GIF
52
- return tagpy .mp4 .CoverArt (fmt , cover .picture ())
48
+ data = cover .picture ()
49
+ mime = cover .mimeType ().lower ().strip ()
50
+ if "image/jpeg" :
51
+ fmt = tagpy .mp4 .CoverArtFormats .JPEG
52
+ elif "image/png" :
53
+ fmt = tagpy .mp4 .CoverArtFormats .PNG
54
+ elif "image/bmp" :
55
+ fmt = tagpy .mp4 .CoverArtFormats .BMP
56
+ elif "image/gif" :
57
+ fmt = tagpy .mp4 .CoverArtFormats .GIF
58
+ return tagpy .mp4 .CoverArt (fmt , data )
53
59
54
60
55
61
class NIStemFile :
@@ -118,6 +124,20 @@ def write(self, original, stems):
118
124
progress .finish ()
119
125
120
126
def update_metadata (self , src , ** stem_metadata ):
127
+ # FIXME generating metadata atom after the file tags
128
+ with stembox .Stem (self .__path ) as f :
129
+ f .stems = [
130
+ dict (
131
+ color = stem_metadata .get (
132
+ f"stem_{ i + 1 } _color" ,
133
+ )
134
+ or self .STEM_DEFAULT_COLOR [i ],
135
+ name = stem_metadata .get (f"stem_{ i + 1 } _label" )
136
+ or self .STEM_DEFAULT_LABEL [i ].title (),
137
+ )
138
+ for i in range (4 )
139
+ ]
140
+
121
141
src = tagpy .FileRef (src )
122
142
dst = tagpy .FileRef (self .__path )
123
143
@@ -132,16 +152,3 @@ def update_metadata(self, src, **stem_metadata):
132
152
c .append (cover )
133
153
dst_tag .covers = c
134
154
dst .save ()
135
-
136
- with stembox .Stem (self .__path ) as f :
137
- f .stems = [
138
- dict (
139
- color = stem_metadata .get (
140
- f"stem_{ i + 1 } _color" ,
141
- )
142
- or self .STEM_DEFAULT_COLOR [i ],
143
- name = stem_metadata .get (f"stem_{ i + 1 } _label" )
144
- or self .STEM_DEFAULT_LABEL [i ].title (),
145
- )
146
- for i in range (4 )
147
- ]
0 commit comments