changeset 91:bbb28d5447f9

trau-parse AMR: extract and print speech parameters
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 05 Mar 2025 02:03:48 +0000
parents 31e17dd64fc1
children 761650771e51
files trau-decode/parse-amr.c
diffstat 1 files changed, 99 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/trau-decode/parse-amr.c	Wed Mar 05 00:40:43 2025 +0000
+++ b/trau-decode/parse-amr.c	Wed Mar 05 02:03:48 2025 +0000
@@ -33,6 +33,40 @@
 	"Sid_Bad", "Sid_Update", "Onset", "Sid_First"
 };
 
+static const uint8_t params_lsf_475_515[] = {8, 8, 7, 0};
+static const uint8_t params_lsf_59_67_74_102[] = {8, 9, 9, 0};
+static const uint8_t params_lsf_795[] = {9, 9, 9, 0};
+static const uint8_t params_lsf_122[] = {7, 8, 9, 8, 6, 0};
+
+static const uint8_t params_475_sf1[]  = {8, 7, 2, 8, 0};
+static const uint8_t params_475_sf3[]  = {4, 7, 2, 8, 0};
+static const uint8_t params_475_sf24[] = {4, 7, 2, 0};
+
+static const uint8_t params_515_sf1[]   = {8, 7, 2, 6, 0};
+static const uint8_t params_515_sf234[] = {4, 7, 2, 6, 0};
+
+static const uint8_t params_59_sf13[] = {8, 9, 2, 6, 0};
+static const uint8_t params_59_sf24[] = {4, 9, 2, 6, 0};
+
+static const uint8_t params_67_sf13[] = {8, 11, 3, 7, 0};
+static const uint8_t params_67_sf24[] = {4, 11, 3, 7, 0};
+
+static const uint8_t params_74_sf13[] = {8, 13, 4, 7, 0};
+static const uint8_t params_74_sf24[] = {5, 13, 4, 7, 0};
+
+static const uint8_t params_795_sf13[] = {8, 13, 4, 4, 5, 0};
+static const uint8_t params_795_sf24[] = {6, 13, 4, 4, 5, 0};
+
+static const uint8_t params_102_sf13[] = {8, 1, 1, 1, 1, 10, 10, 7, 7, 0};
+static const uint8_t params_102_sf24[] = {5, 1, 1, 1, 1, 10, 10, 7, 7, 0};
+
+static const uint8_t params_122_sf13[] =
+	{9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, 0};
+static const uint8_t params_122_sf24[] =
+	{6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, 0};
+
+static const uint8_t params_sid[] = {3, 8, 9, 9, 6, 0};
+
 static unsigned
 bits_to_num(bits, nbits)
 	ubit_t *bits;
@@ -52,6 +86,31 @@
 }
 
 static void
+print_generic_params(bits, ltab)
+	ubit_t *bits;
+	uint8_t *ltab;
+{
+	uint8_t *tp;
+	unsigned n, p;
+
+	for (tp = ltab; n = *tp; tp++) {
+		p = bits_to_num(bits, n);
+		bits += n;
+		printf(" %u", p);
+	}
+}
+
+static void
+print_speech_params(bits, ltab)
+	ubit_t *bits;
+	uint8_t *ltab;
+{
+	fputs("   ", stdout);
+	print_generic_params(bits, ltab);
+	putchar('\n');
+}
+
+static void
 decode_mode_0(c_bits, d_bits)
 	ubit_t *c_bits, *d_bits;
 {
@@ -78,6 +137,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 44, params_lsf_475_515);
+	print_speech_params(d_bits + 67, params_475_sf1);
+	print_speech_params(d_bits + 95, params_475_sf24);
+	print_speech_params(d_bits + 111, params_475_sf3);
+	print_speech_params(d_bits + 135, params_475_sf24);
 }
 
 static void
@@ -110,6 +174,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 46, params_lsf_475_515);
+	print_speech_params(d_bits + 69, params_515_sf1);
+	print_speech_params(d_bits + 95, params_515_sf234);
+	print_speech_params(d_bits + 117, params_515_sf234);
+	print_speech_params(d_bits + 139, params_515_sf234);
 }
 
 static void
@@ -142,6 +211,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 41, params_lsf_59_67_74_102);
+	print_speech_params(d_bits + 67, params_59_sf13);
+	print_speech_params(d_bits + 95, params_59_sf24);
+	print_speech_params(d_bits + 119, params_59_sf13);
+	print_speech_params(d_bits + 147, params_59_sf24);
 }
 
 static void
@@ -176,6 +250,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 37, params_lsf_59_67_74_102);
+	print_speech_params(d_bits + 63, params_67_sf13);
+	print_speech_params(d_bits + 95, params_67_sf24);
+	print_speech_params(d_bits + 123, params_67_sf13);
+	print_speech_params(d_bits + 155, params_67_sf24);
 }
 
 static void
@@ -213,6 +292,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 34, params_lsf_59_67_74_102);
+	print_speech_params(d_bits + 60, params_74_sf13);
+	print_speech_params(d_bits + 95, params_74_sf24);
+	print_speech_params(d_bits + 127, params_74_sf13);
+	print_speech_params(d_bits + 162, params_74_sf24);
 }
 
 static void
@@ -249,6 +333,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 31, params_lsf_795);
+	print_speech_params(d_bits + 58, params_795_sf13);
+	print_speech_params(d_bits + 95, params_795_sf24);
+	print_speech_params(d_bits + 130, params_795_sf13);
+	print_speech_params(d_bits + 167, params_795_sf24);
 }
 
 static void
@@ -286,6 +375,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits + 20, params_lsf_59_67_74_102);
+	print_speech_params(d_bits + 46, params_102_sf13);
+	print_speech_params(d_bits + 95, params_102_sf24);
+	print_speech_params(d_bits + 141, params_102_sf13);
+	print_speech_params(d_bits + 190, params_102_sf24);
 }
 
 static void
@@ -319,6 +413,11 @@
 		crc3 ? "bad" : "good", crc4 ? "bad" : "good");
 	if (crc1)
 		saved_mode_valid = 0;
+	print_speech_params(d_bits, params_lsf_122);
+	print_speech_params(d_bits + 38, params_122_sf13);
+	print_speech_params(d_bits + 94, params_122_sf24);
+	print_speech_params(d_bits + 147, params_122_sf13);
+	print_speech_params(d_bits + 203, params_122_sf24);
 }
 
 static void (*per_mode_decode[8])() = {