annotate miscutil/pcm16-check13.c @ 234:c7f02428bda6

pcm16-to-ulaw: add -t option for 13-bit mode
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 07 May 2023 21:56:09 +0000
parents 6555dae764b3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This program reads a 16-bit PCM recording in raw format (robe by default,
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
3 * or LE with -l option) and checks whether or not every sample fits into
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
4 * left-justified 13 bits, with the 3 least significant bits of every 16-bit
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
5 * sample cleared.
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdint.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdlib.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <string.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <strings.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 main(argc, argv)
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 char **argv;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 int little_endian;
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
18 char *infname;
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
19 FILE *inf;
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
20 unsigned sample_count;
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 uint8_t inb[2];
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
22 uint16_t ins, lowbits;
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 int cc;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
25 if (argc == 2 && argv[1][0] != '-') {
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 little_endian = 0;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 infname = argv[1];
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
28 } else if (argc == 3 && !strcmp(argv[1], "-l")) {
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 little_endian = 1;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 infname = argv[2];
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 } else {
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
32 fprintf(stderr, "usage: %s [-l] input.pcm16\n", argv[0]);
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 exit(1);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 inf = fopen(infname, "r");
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 if (!inf) {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 perror(infname);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 exit(1);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 }
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
40 for (sample_count = 0; ; sample_count++) {
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 cc = fread(inb, 1, 2, inf);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 if (cc <= 0)
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 break;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 if (cc & 1) {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 fprintf(stderr, "error: %s has odd number of bytes\n",
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 infname);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 exit(1);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 if (little_endian)
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 ins = ((uint16_t) inb[1] << 8) | ((uint16_t) inb[0]);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 else
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 ins = ((uint16_t) inb[0] << 8) | ((uint16_t) inb[1]);
221
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
53 lowbits = ins & 7;
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
54 if (lowbits) {
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
55 fprintf(stderr,
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
56 "check13 fail: %s sample #%u low 3 bits are %u\n",
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
57 infname, sample_count, lowbits);
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
58 exit(1);
6555dae764b3 miscutil: new program pcm16-check13
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
59 }
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 exit(0);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 }