FreeCalypso > hg > gsm-codec-lib
annotate hrutil/decode.c @ 607:cdf3f5c618b8
hrutil: new program gsmhr-decode
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 05 Dec 2025 02:43:19 +0000 |
| parents | frtest/decode-tw5.c@f9eefb61fb2f |
| children |
| rev | line source |
|---|---|
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
2 * This file is the main module for gsmhr-decode utility. This utility |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
3 * is intended to serve as the "user-friendly" decoder for GSM-HR encoded |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
4 * speech, reading TW-TS-005 Annex B as input and emitting playable WAV |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
5 * as output. |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdio.h> |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdint.h> |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
11 #include "../libgsmhr1/tw_gsmhr.h" |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
12 #include "../libtest/tw5reader.h" |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "../libtest/wavwriter.h" |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include "../libtest/pcmwrite.h" |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 main(argc, argv) |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 char **argv; |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 { |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
19 FILE *hexf; |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 void *wav; |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
21 unsigned lineno; |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
22 struct gsmhr_decoder_state *state; |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
23 uint8_t frame[TWTS005_MAX_FRAME]; |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
24 unsigned frame_len; |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
25 int16_t params[GSMHR_NUM_PARAMS_DEC]; |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 int16_t pcm[160]; |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
27 int rc; |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 if (argc != 3) { |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
30 fprintf(stderr, "usage: %s input.hex output.wav\n", argv[0]); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
33 hexf = fopen(argv[1], "r"); |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
34 if (!hexf) { |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 perror(argv[1]); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 } |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
38 lineno = 0; |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 wav = wav_write_open(argv[2], 8000, 16, 1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 if (!wav) { |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 perror(argv[2]); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 } |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
44 state = gsmhr_decoder_create(); |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
45 if (!state) { |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
46 fprintf(stderr, "gsmhr_decoder_create() failed!\n"); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 } |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 for (;;) { |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
50 rc = twts005_read_frame(hexf, &lineno, frame, &frame_len); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 if (rc < 0) { |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
52 fprintf(stderr, "%s line %u: not valid TW-TS-005\n", |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
53 argv[1], lineno); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 } |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 if (!rc) |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 break; |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
58 rc = gsmhr_rtp_in_direct(frame, frame_len, params); |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
59 if (rc < 0) { |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
60 fprintf(stderr, |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
61 "%s line %u: not a valid GSM-HR frame\n", |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
62 argv[1], lineno); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
65 gsmhr_decode_frame(state, params, pcm); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 write_pcm_to_wav(wav, pcm); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 } |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 wav_write_close(wav); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 exit(0); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 } |
