annotate hrutil/encode.c @ 628:c53ce88d67a7

hrutil: new program gsmhr-encode
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 12 Mar 2026 05:49:23 +0000
parents
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 /*
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This file is the main module for gsmhr-encode utility. This utility
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * is intended to serve as the "user-friendly" speech encoder for GSM-HR,
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * reading speech input in WAV format and emitting GSM-HR output in
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"
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include "../libtest/wavreader.h"
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include "../libtest/wavrdhelp.h"
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 main(argc, argv)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 char **argv;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 char *infname, *outfname;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 void *wav;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 FILE *outf;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 struct gsmhr_encoder_state *state;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 int16_t pcm[160];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 int16_t prm_out[GSMHR_NUM_PARAMS_ENC];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 int opt, rc, dtx = 0, emit_5993 = 0;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 extern int optind;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 while ((opt = getopt(argc, argv, "dx")) != EOF) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 switch (opt) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 case 'd':
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 dtx = 1;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 continue;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 case 'x':
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 emit_5993 = 1;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 continue;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 default:
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 usage:
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 fprintf(stderr,
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 "usage: %s [-d] [-x] input.wav output.hex\n",
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 argv[0]);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 if (argc != optind + 2)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 goto usage;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 infname = argv[optind];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 outfname = argv[optind+1];
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 wav = wav_read_open(infname);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 if (!wav) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 perror(infname);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 rc = wavrd_check_header(wav, infname);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 if (rc < 0)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 exit(1); /* error msg already printed */
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 outf = fopen(outfname, "w");
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 if (!outf) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 perror(outfname);
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 state = gsmhr_encoder_create(dtx);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 if (!state) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 perror("gsmhr_encoder_create()");
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 exit(1);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 for (;;) {
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 rc = wavrd_get_pcm_block(wav, pcm);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 if (!rc)
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 break;
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 gsmhr_encode_frame(state, pcm, prm_out);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 emit_cod_to_tw5b(outf, prm_out, emit_5993);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 }
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 fclose(outf);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 exit(0);
c53ce88d67a7 hrutil: new program gsmhr-encode
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 }