소스 검색

Added append, prepend, and split pregap modes to cuebreakpoints.

master
Svend Sorensen 19 년 전
부모
커밋
7ed3a71166
2개의 변경된 파일65개의 추가작업 그리고 15개의 파일을 삭제
  1. +15
    -1
      man/cuebreakpoints.man
  2. +50
    -14
      tools/cuebreakpoints.c

+ 15
- 1
man/cuebreakpoints.man 파일 보기

@@ -19,8 +19,22 @@ print usage information
.B \-i, \--input-format cue|toc
set format of file(s)
.
.TP
.B \--append-gaps
append pregaps to previous track (default)
.
.TP
.B \--prepend-gaps
prefix pregaps to track
.
.TP
.B \--split-gaps
split at beginning and end of pregaps
.
.SH NOTES
The breakpoints are in a format usable by shnsplit (part of the shntool package). A track breakpoint is at index 1.
The breakpoints are in a format usable by shnsplit (part of the shntool package).
.PP
The first track's pregap cannot be appended to the previous track, so it is prefixed to the track in both append and prepend modes. If you want the track without it, use the split mode.
.PP
If no files are specified, stdin is used. If a filename is specified and the format is not specified, the format will be set based on a ".cue" or ".toc" suffix.
.


+ 50
- 14
tools/cuebreakpoints.c 파일 보기

@@ -14,6 +14,8 @@

char *progname;

enum {APPEND, PREPEND, SPLIT};

void usage (int status)
{
if (0 == status) {
@@ -23,6 +25,9 @@ void usage (int status)
OPTIONS\n\
-h, --help print usage\n\
-i, --input-format cue|toc set format of file(s)\n\
--append-gaps append pregaps to previous track (default)\n\
--prepend-gaps prefix pregaps to track\n\
--split-gaps split at beginning and end of pregaps\n\
", stdout);
} else {
fprintf(stderr, "run `%s --help' for usage\n", progname);
@@ -39,27 +44,45 @@ void print_m_ss_ff (long frame)
printf ("%d:%02d.%02d\n", m, s, f);
}

void print_breaks (Cd *cd)
void print_breakpoint (long b)
{
/* do not print zero breakpoints */
if (0 != b)
print_m_ss_ff(b);
}

void print_breaks (Cd *cd, int gaps)
{
int i;
long b;
Track *track;

/* start on track 2 */
for (i = 2; i <= cd_get_ntrack(cd); i++) {
for (i = 1; i <= cd_get_ntrack(cd); i++) {
track = cd_get_track(cd, i);
/* breakpoint is at index 1 */
/* TODO: make option for breakpoint at index 0,
* and option for breakpoints a index 0 and 1
/* when breakpoint is at:
* index 0: gap is prepended to track
* index 1: gap is appended to previous track
*/
b = track_get_start(track) + track_get_index(track, 1) - track_get_zero_pre(track);
/* don't print zero indexes */
if (0 != b)
print_m_ss_ff(b);
b = track_get_start(track);

if (gaps == PREPEND || gaps == SPLIT) {
print_breakpoint(b);
}

if (gaps == APPEND || gaps == SPLIT) {
/* there is no previous track to append the first tracks pregap to */
/* TODO: should first track's pregap be split when appending?
* this could be a suprising default
*/
if (1 < i) {
b += track_get_index(track, 1) - track_get_zero_pre(track);
print_breakpoint(b);
}
}
}
}

int breaks (char *name, int format)
int breaks (char *name, int format, int gaps)
{
Cd *cd = NULL;

@@ -68,7 +91,7 @@ int breaks (char *name, int format)
return -1;
}

print_breaks(cd);
print_breaks(cd, gaps);

return 0;
}
@@ -76,6 +99,7 @@ int breaks (char *name, int format)
int main (int argc, char **argv)
{
int format = UNKNOWN;
int gaps = APPEND;

/* option variables */
char c;
@@ -86,6 +110,9 @@ int main (int argc, char **argv)
static struct option longopts[] = {
{"help", no_argument, NULL, 'h'},
{"input-format", required_argument, NULL, 'i'},
{"append-gaps", no_argument, NULL, 'a'},
{"prepend-gaps", no_argument, NULL, 'p'},
{"split-gaps", no_argument, NULL, 's'},
{NULL, 0, NULL, 0}
};

@@ -105,6 +132,15 @@ int main (int argc, char **argv)
fprintf(stderr, "%s: illegal format `%s'\n", progname, optarg);
usage(1);
break;
case 'a':
gaps = APPEND;
break;
case 'p':
gaps = PREPEND;
break;
case 's':
gaps = SPLIT;
break;
default:
usage(1);
break;
@@ -112,10 +148,10 @@ int main (int argc, char **argv)
}

if (optind == argc) {
breaks("-", format);
breaks("-", format, gaps);
} else {
for (; optind < argc; optind++)
breaks(argv[optind], format);
breaks(argv[optind], format, gaps);
}

return 0;


불러오는 중...
취소
저장