annotate miscutil/pcm16-to-ulaw.c @ 242:f081a6850fb5

libgsmfrp: new refined implementation The previous implementation exhibited the following defects, which are now fixed: 1) The last received valid SID was cached forever for the purpose of handling future invalid SIDs - we could have received some valid SID ages ago, then lots of speech or NO_DATA, and if we then get an invalid SID, we would resurrect the last valid SID from ancient history - a bad design. In our new design, we handle invalid SID based on the current state, much like BFI. 2) GSM 06.11 spec says clearly that after the second lost SID (received BFI=1 && TAF=1 in CN state) we need to gradually decrease the output level, rather than jump directly to emitting silence frames - we previously failed to implement such logic. 3) Per GSM 06.12 section 5.2, Xmaxc should be the same in all 4 subframes in a SID frame. What should we do if we receive an otherwise valid SID frame with different Xmaxc? Our previous approach would replicate this Xmaxc oddity in every subsequent generated CN frame, which is rather bad. In our new design, the very first CN frame (which can be seen as a transformation of the SID frame itself) retains the original 4 distinct Xmaxc, but all subsequent CN frames are based on the Xmaxc from the last subframe of the most recent SID.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 09 May 2023 05:16:31 +0000
parents c7f02428bda6
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,
220
c4c45148cde1 miscutil: new program pcm16-to-ulaw
Mychaela Falconia <falcon@freecalypso.org>
parents: 219
diff changeset
3 * or LE with -l option) and converts it to 8-bit PCM in North American
229
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
4 * mu-law encoding. It is based on the ulaw_compress() function from ITU-T
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
5 * G.191 STL, using the most significant 14 bits of each input linear PCM
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
6 * sample, rather than just 13. A command line option is also provided
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
7 * to truncate each input value to 13 bits prior to mu-law encoding, to
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
8 * replicate the effect of using a table lookup conversion method that
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
9 * only considers the upper 13 bits - specify -t option to select this mode.
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 */
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdio.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <stdint.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include <stdlib.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include <string.h>
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include <strings.h>
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
17 #include <unistd.h>
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18
229
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
19 static unsigned
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
20 ulaw_compress(input)
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
21 unsigned input;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
22 {
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
23 short i; /* aux.var. */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
24 short absno; /* absolute value of linear (input) sample */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
25 short segno; /* segment (Table 2/G711, column 1) */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
26 short low_nibble; /* low nibble of log companded sample */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
27 short high_nibble; /* high nibble of log companded sample */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
28 unsigned output;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
29
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
30 /* -------------------------------------------------------------------- */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
31 /* Input is 14-bit right-justified in this version */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
32 /* Compute absolute value; adjust for easy processing */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
33 /* -------------------------------------------------------------------- */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
34 absno = input >= 0x2000 /* compute 1's complement in case of */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
35 ? (~input & 0x1FFF) + 33 /* negative samples */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
36 : input + 33; /* NB: 33 is the difference value */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
37 /* between the thresholds for */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
38 /* A-law and u-law. */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
39 if (absno > (0x1FFF)) /* limitation to "absno" < 8192 */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
40 absno = (0x1FFF);
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41
229
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
42 /* Determination of sample's segment */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
43 i = absno >> 6;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
44 segno = 1;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
45 while (i != 0) {
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
46 segno++;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
47 i >>= 1;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
48 }
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
49
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
50 /* Mounting the high-nibble of the log-PCM sample */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
51 high_nibble = (0x0008) - segno;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
52
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
53 /* Mounting the low-nibble of the log PCM sample */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
54 low_nibble = (absno >> segno) /* right shift of mantissa and */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
55 &(0x000F); /* masking away leading '1' */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
56 low_nibble = (0x000F) - low_nibble;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
57
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
58 /* Joining the high-nibble and the low-nibble of the log PCM sample */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
59 output = (high_nibble << 4) | low_nibble;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
60
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
61 /* Add sign bit */
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
62 if (input < 0x2000)
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
63 output = output | (0x0080);
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
64
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
65 return output;
f00bf3687286 pcm16-to-ulaw: replace toast table with STL function
Mychaela Falconia <falcon@freecalypso.org>
parents: 220
diff changeset
66 }
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 main(argc, argv)
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 char **argv;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 {
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
71 int opt, little_endian = 0, truncate = 0;
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 char *infname, *outfname;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 FILE *inf, *outf;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 uint8_t inb[2];
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 uint16_t ins;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 int cc;
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
77 extern int optind;
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
79 while ((opt = getopt(argc, argv, "lt")) != EOF) {
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
80 switch (opt) {
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
81 case 'l':
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
82 little_endian = 1;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
83 continue;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
84 case 't':
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
85 truncate = 1;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
86 continue;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
87 default:
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
88 usage:
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
89 fprintf(stderr,
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
90 "usage: %s [-l] [-t] input.pcm16 output.ulaw\n",
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
91 argv[0]);
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
92 exit(1);
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
93 }
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 }
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
95 if (argc != optind + 2)
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
96 goto usage;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
97 infname = argv[optind];
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
98 outfname = argv[optind+1];
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
99
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 inf = fopen(infname, "r");
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 if (!inf) {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 perror(infname);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 exit(1);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 outf = fopen(outfname, "w");
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 if (!outf) {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 perror(outfname);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 exit(1);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 for (;;) {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 cc = fread(inb, 1, 2, inf);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 if (cc <= 0)
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 break;
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 if (cc & 1) {
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 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
116 infname);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 exit(1);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 if (little_endian)
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 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
121 else
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 ins = ((uint16_t) inb[0] << 8) | ((uint16_t) inb[1]);
234
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
123 ins >>= 2;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
124 if (truncate)
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
125 ins &= ~1;
c7f02428bda6 pcm16-to-ulaw: add -t option for 13-bit mode
Mychaela Falconia <falcon@freecalypso.org>
parents: 231
diff changeset
126 putc(ulaw_compress(ins), outf);
219
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 }
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 fclose(outf);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 exit(0);
dc52c3857bf7 miscutil: new program pcm16-to-alaw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 }