annotate hrutil/encode-r.c @ 629:32cc4b709e0e

hrutil: new program gsmhr-encode-r
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 12 Mar 2026 05:59:37 +0000
parents hrutil/encode.c@c53ce88d67a7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
629
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
2 * This file is the main module for gsmhr-encode-r utility. This utility
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
3 * is intended to serve as the "precision" speech encoder for GSM-HR,
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
4 * reading speech input in robe format and emitting GSM-HR output in
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * TW-TS-005 Annex B hex format.
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdint.h>
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdlib.h>
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <string.h>
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <strings.h>
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <unistd.h>
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "../libgsmhr1/tw_gsmhr.h"
629
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
15 #include "../libtest/roberead.h"
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 main(argc, argv)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 char **argv;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 char *infname, *outfname;
629
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
21 FILE *inf, *outf;
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 struct gsmhr_encoder_state *state;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 int16_t pcm[160];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 int16_t prm_out[GSMHR_NUM_PARAMS_ENC];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 int opt, rc, dtx = 0, emit_5993 = 0;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 extern int optind;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 while ((opt = getopt(argc, argv, "dx")) != EOF) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 switch (opt) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 case 'd':
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 dtx = 1;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 continue;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 case 'x':
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 emit_5993 = 1;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 continue;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 default:
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 usage:
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 fprintf(stderr,
629
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
39 "usage: %s [-d] [-x] input.robe output.hex\n",
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 argv[0]);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 if (argc != optind + 2)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 goto usage;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 infname = argv[optind];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 outfname = argv[optind+1];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48
629
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
49 inf = fopen(infname, "r");
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
50 if (!inf) {
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 perror(infname);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 outf = fopen(outfname, "w");
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 if (!outf) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 perror(outfname);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 state = gsmhr_encoder_create(dtx);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 if (!state) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 perror("gsmhr_encoder_create()");
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 for (;;) {
629
32cc4b709e0e hrutil: new program gsmhr-encode-r
Mychaela Falconia <falcon@freecalypso.org>
parents: 628
diff changeset
65 rc = robe_get_pcm_block(inf, pcm);
628
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 if (!rc)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 break;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 gsmhr_encode_frame(state, pcm, prm_out);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 emit_cod_to_tw5b(outf, prm_out, emit_5993);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 fclose(outf);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 exit(0);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 }