factor id3 a bit

db4
Doug Coleman 2009-02-26 18:03:15 -06:00
parent e986a60487
commit 16d3562b23
1 changed files with 11 additions and 9 deletions

View File

@ -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 )