factor id3 a bit
parent
e986a60487
commit
16d3562b23
|
@ -4,12 +4,11 @@ USING: sequences io io.encodings.binary io.files io.pathnames
|
||||||
strings kernel math io.mmap io.mmap.uchar accessors syntax
|
strings kernel math io.mmap io.mmap.uchar accessors syntax
|
||||||
combinators math.ranges unicode.categories byte-arrays
|
combinators math.ranges unicode.categories byte-arrays
|
||||||
io.encodings.string io.encodings.utf8 assocs math.parser
|
io.encodings.string io.encodings.utf8 assocs math.parser
|
||||||
combinators.short-circuit ;
|
combinators.short-circuit fry ;
|
||||||
IN: id3
|
IN: id3
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
! genres
|
|
||||||
CONSTANT: genres
|
CONSTANT: genres
|
||||||
H{
|
H{
|
||||||
{ 0 "Blues" }
|
{ 0 "Blues" }
|
||||||
|
@ -233,16 +232,19 @@ TUPLE: id3-info title artist album year comment genre ;
|
||||||
: drop-header ( mmap -- seq1 seq2 )
|
: drop-header ( mmap -- seq1 seq2 )
|
||||||
dup 10 tail-slice swap ;
|
dup 10 tail-slice swap ;
|
||||||
|
|
||||||
|
: frame-tag ( frame string -- tag/f )
|
||||||
|
'[ frame-id>> _ = ] find nip ; inline
|
||||||
|
|
||||||
: parse-frames ( id3v2-info -- id3-info )
|
: parse-frames ( id3v2-info -- id3-info )
|
||||||
[ <id3-info> ] dip frames>>
|
[ <id3-info> ] dip frames>>
|
||||||
{
|
{
|
||||||
[ [ frame-id>> "TIT2" = ] find nip [ data>> >>title ] when* ]
|
[ "TIT2" frame-tag [ data>> >>title ] when* ]
|
||||||
[ [ frame-id>> "TALB" = ] find nip [ data>> >>album ] when* ]
|
[ "TALB" frame-tag [ data>> >>album ] when* ]
|
||||||
[ [ frame-id>> "TPE1" = ] find nip [ data>> >>artist ] when* ]
|
[ "TPE1" frame-tag [ data>> >>artist ] when* ]
|
||||||
[ [ frame-id>> "TCON" = ] find nip [ data>> [ [ digit? ] filter string>number ] keep swap [ genres at nip ] when*
|
[ "TCON" frame-tag [ data>> [ [ digit? ] filter string>number ] keep swap [ genres at nip ] when*
|
||||||
>>genre ] when* ]
|
>>genre ] when* ]
|
||||||
[ [ frame-id>> "COMM" = ] find nip [ data>> >>comment ] when* ]
|
[ "COMM" frame-tag [ data>> >>comment ] when* ]
|
||||||
[ [ frame-id>> "TYER" = ] find nip [ data>> >>year ] when* ]
|
[ "TYER" frame-tag [ data>> >>year ] when* ]
|
||||||
} cleave ;
|
} cleave ;
|
||||||
|
|
||||||
: read-v2-tag-data ( seq -- id3-info )
|
: read-v2-tag-data ( seq -- id3-info )
|
||||||
|
|
Loading…
Reference in New Issue