comparison pcm-study/pcm16-frag-extr.c @ 17:ab18adf989e3 default tip

pcm-study: new program pcm16-frag-extr
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 29 Oct 2024 00:32:33 +0000
parents pcm-study/pcm-frag-extr.c@b5e73d5ebcd1
children
comparison
equal deleted inserted replaced
16:1bc144545563 17:ab18adf989e3
1 /*
2 * This program extracts a fragment of some N 160-sample frames from a PCM16
3 * recording file, starting at an arbitrary offset that may not be frame-
4 * aligned, and saves this fragment to a new binary file.
5 */
6
7 #include <stdio.h>
8 #include <stdint.h>
9 #include <stdlib.h>
10
11 main(argc, argv)
12 char **argv;
13 {
14 FILE *inf, *outf;
15 u_long start_offset;
16 unsigned n, nframes;
17 uint8_t buf[320];
18 int cc;
19
20 if (argc != 5) {
21 fprintf(stderr,
22 "usage: %s pcm-src-file start-offset N-frames pcm-out-file\n",
23 argv[0]);
24 exit(1);
25 }
26 inf = fopen(argv[1], "r");
27 if (!inf) {
28 perror(argv[1]);
29 exit(1);
30 }
31 start_offset = strtoul(argv[2], 0, 0);
32 fseek(inf, start_offset, SEEK_SET);
33 nframes = strtoul(argv[3], 0, 0);
34 outf = fopen(argv[4], "w");
35 if (!outf) {
36 perror(argv[4]);
37 exit(1);
38 }
39 for (n = 0; n < nframes; n++) {
40 cc = fread(buf, 2, 160, inf);
41 if (cc > 0)
42 fwrite(buf, 2, cc, outf);
43 if (cc < 160) {
44 fprintf(stderr, "warning: short read from %s\n",
45 argv[1]);
46 break;
47 }
48 }
49 exit(0);
50 }