@@ -346,14 +346,16 @@ int info (char *name, int format, int trackno, char *d_template, char *t_templat | |||
ntrack = cd_get_ntrack(cd); | |||
cd_printf(d_template, cd, 0); | |||
if (-1 == trackno) { | |||
cd_printf(d_template, cd, 0); | |||
if (0 == trackno) { | |||
for (trackno = 1; trackno <= ntrack; trackno++) { | |||
cd_printf(t_template, cd, ntrack); | |||
cd_printf(t_template, cd, trackno); | |||
} | |||
} else if (0 < trackno || ntrack >= trackno) { | |||
cd_printf(t_template, cd, ntrack); | |||
} else if (0 == trackno) { | |||
cd_printf(d_template, cd, trackno); | |||
} else if (0 < trackno && ntrack >= trackno) { | |||
cd_printf(t_template, cd, trackno); | |||
} else { | |||
fprintf(stderr, "%s: track number out of range\n", progname); | |||
return -1; | |||
@@ -365,7 +367,7 @@ int info (char *name, int format, int trackno, char *d_template, char *t_templat | |||
int main (int argc, char **argv) | |||
{ | |||
int format = UNKNOWN; | |||
int trackno = 0; /* track number (0 = all tracks) */ | |||
int trackno = -1; /* track number (-1 = unspecified, 0 = disc info) */ | |||
char *d_template = NULL; /* disc template */ | |||
char *t_template = NULL; /* track template */ | |||
/* getopt () variables */ | |||
@@ -0,0 +1,137 @@ | |||
#! /bin/sh | |||
# cuetag - tag files based on cue/toc file information | |||
# uses cueprint output | |||
CUEPRINT=cueprint | |||
cue_file="" | |||
# Vorbis Comments | |||
vorbis() | |||
{ | |||
VORBISCOMMENT=vorbiscomment | |||
# space seperated list of recomended stardard field names | |||
# see http://www.xiph.org/ogg/vorbis/doc/v-comment.html | |||
fields='TITLE VERSION ALBUM TRACKNUMBER ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC' | |||
# fields' corresponding cueprint conversion characters | |||
# seperate alternates with a space | |||
TITLE='%t' | |||
VERSION='' | |||
ALBUM='%T' | |||
TRACKNUMBER='%n' | |||
ARTIST='%c %p' | |||
PERFORMER='%p' | |||
COPYRIGHT='' | |||
LICENSE='' | |||
ORGANIZATION='' | |||
DESCRIPTION='%m' | |||
GENRE='%g' | |||
DATE='' | |||
LOCATION='' | |||
CONTACT='' | |||
ISRC='%i %u' | |||
for field in $fields; do | |||
value="" | |||
for conv in `eval echo \\$$field`; do | |||
value=`$CUEPRINT -n $1 -t "$conv\n" $cue_file` | |||
if [ -n "$value" ]; then | |||
break | |||
fi | |||
done | |||
if [ -n "$value" ]; then | |||
echo $VORBISCOMMENT -t "$field=$value" $2 | |||
fi | |||
done | |||
} | |||
id3() | |||
{ | |||
MP3INFO=mp3info | |||
# space seperated list of ID3 v1.1 tags | |||
# see http://id3lib.sourceforge.net/id3/idev1.html | |||
fields="TITLE ALBUM ARTIST YEAR COMMENT GENRE TRACKNUMBER" | |||
# fields' corresponding cueprint conversion characters | |||
# seperate alternates with a space | |||
TITLE='%t' | |||
ALBUM='%T' | |||
ARTIST='%p' | |||
YEAR='' | |||
COMMENT='%c' | |||
GENRE='%g' | |||
TRACKNUMBER='%n' | |||
for field in $fields; do | |||
value="" | |||
for conv in `eval echo \\$$field`; do | |||
value=`$CUEPRINT -n $1 -t "$conv\n" $cue_file` | |||
if [ -n "$value" ]; then | |||
break | |||
fi | |||
done | |||
if [ -n "$value" ]; then | |||
case $field in | |||
TITLE) | |||
echo $MP3INFO -t "$value" $2 | |||
;; | |||
ARTIST) | |||
echo $MP3INFO -a "$value" $2 | |||
;; | |||
YEAR) | |||
echo $MP3INFO -y "$value" $2 | |||
;; | |||
COMMENT) | |||
echo $MP3INFO -c "$value" $2 | |||
;; | |||
GENRE) | |||
echo $MP3INFO -g "$value" $2 | |||
;; | |||
TRACKNUMBER) | |||
echo $MP3INFO -n "$value" $2 | |||
;; | |||
esac | |||
fi | |||
done | |||
} | |||
main() | |||
{ | |||
cue_file=$1 | |||
shift | |||
ntrack=`cueprint -d '%N' $cue_file` | |||
trackno=1 | |||
if [ $# -ne $ntrack ]; then | |||
echo "Number of files does not match number of tracks." | |||
fi | |||
for file in $@; do | |||
case $file in | |||
*.[Oo][Gg][Gg]) | |||
vorbis $trackno "$file" | |||
;; | |||
*.[Mm][Pp]3) | |||
id3 $trackno "$file" | |||
;; | |||
*) | |||
echo "$file: uknown file type" | |||
;; | |||
esac | |||
trackno=$(($trackno + 1)) | |||
done | |||
} | |||
main "$@" |