aboutsummaryrefslogtreecommitdiff
path: root/split.c
diff options
context:
space:
mode:
Diffstat (limited to 'split.c')
-rw-r--r--split.c129
1 files changed, 0 insertions, 129 deletions
diff --git a/split.c b/split.c
deleted file mode 100644
index c78b263..0000000
--- a/split.c
+++ /dev/null
@@ -1,129 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-/* Split.c
- * Splits a raw audio file into segments bounded by the time specified on stdin */
-
-int main(int argc, char **argv)
-{
- FILE *fin = NULL;
- FILE *fout = NULL;
- char *in_fname = NULL;
- char out_fname[] = "track-0000";
- int m = 0;
- int s = 0;
- int frame = 0;
- int index = 0;
- int items = 0;
- int channels = 0;
- int rate = 0;
- int sample_size = 0;
- int i = 0;
- char buffer[10240];
- double start = 0;
- double finish = 0;
- unsigned long start_sample = 0;
- unsigned long finish_sample = 0;
-
-
- /* FIXME Use getopt */
- /* FIXME Replace assertions with useful checks+messages */
- assert(argc == 5);
-
- in_fname = argv[1];
- channels = atoi(argv[2]);
- rate = atoi(argv[3]);
- sample_size = atoi(argv[4]);
-
- assert(channels > 0);
- assert(rate > 0);
- assert(sample_size > 0);
- assert(in_fname != NULL);
-
- /* Open it up */
- if ((fin = fopen(in_fname, "r")) == NULL)
- {
- fprintf(stderr,"Failed to open '%s': ", in_fname);
- perror("fopen");
- return EXIT_FAILURE;
- }
- printf("Opened input file '%s'\n", in_fname);
-
-
- index = 0;
- items = fscanf(stdin, "%d:%d:%d\n", &m, &s, &frame); /* FIXME doesn't check return value */
- start = (double)m*60 + (double)s + ((double)frame)/75;
-
- /* FIXME duplication of code to get mm:ss:ff */
- while ( ( items = fscanf(stdin, "%d:%d:%d\n", &m, &s, &frame) ) )
- {
- index++;
- sprintf(out_fname, "track_%04d", index);
-
- /* Open output file */
- if ((fout = fopen(out_fname, "w")) == NULL)
- {
- fprintf(stderr,"Failed to open '%s': ", out_fname);
- perror("fopen");
- return EXIT_FAILURE;
- }
-
-
- /* EOF means this is the last track; run it to end of input file */
- if (items == EOF)
- {
- finish = -1;
- } else {
- /* Following track starts at end of last */
- if (items != 3)
- {
- fprintf(stderr, "Timestamp #%d malformed\n", index);
- break;
- }
- finish = (double)m*60 + (double)s + ((double)frame)/75;
- }
- fprintf(stderr, "Track %d starts %f s, finishes %f s\n", index, start, finish);
-
- start_sample = start * rate * channels;
- finish_sample = finish * rate * channels;
-
-
- /* Seek to first sample of track */
- fseek(fin, (start_sample * sample_size), SEEK_SET);
-
- if (finish >= 0)
- {
- for (i = (int)start_sample; i < (int)finish_sample; i += items)
- {
- /* FIXME unnecessary call to fwrite with items == 0 possible */
- /* FIXME Handle EOF properly, silly! */
- if ((items = fread(buffer, sample_size, sizeof(buffer)/sample_size, fin)))
- {
- if (feof(fin))
- break;
- fwrite(buffer, items, sample_size, fout);
- }
- }
- } else {
- printf("Running to EOF\n");
- for (i = (int)start_sample; ; i += items)
- {
- /* FIXME unnecessary call to fwrite with items == 0 possible */
- if ((items = fread(buffer, sample_size, sizeof(buffer)/sample_size, fin)))
- {
- if (feof(fin))
- break;
- fwrite(buffer, items, sample_size, fout);
- }
- }
-
- }
- fclose(fout);
- start = finish;
-
- if (finish < 0)
- break;
- }
-}
-