FreeCalypso > hg > gsm-codec-lib
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 |
| 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 } |
