changeset 13:30d1d0a705c0

libtest: add WAV reader helper functions
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 20 Nov 2022 01:34:57 +0000
parents f88817a233fb
children 69ed7af28473
files libtest/Makefile libtest/wavrdhelp.c libtest/wavrdhelp.h
diffstat 3 files changed, 70 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libtest/Makefile	Sun Nov 20 00:44:26 2022 +0000
+++ b/libtest/Makefile	Sun Nov 20 01:34:57 2022 +0000
@@ -1,6 +1,6 @@
 CC=	gcc
 CFLAGS=	-O2
-OBJS=	binreader.o pcmwrite.o wavreader.o wavwriter.o
+OBJS=	binreader.o pcmwrite.o wavrdhelp.o wavreader.o wavwriter.o
 LIB=	libtest.a
 
 all:	${LIB}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtest/wavrdhelp.c	Sun Nov 20 01:34:57 2022 +0000
@@ -0,0 +1,61 @@
+/*
+ * In this module we implement our helper functions
+ * on top of the basic WAV reader.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include "wavreader.h"
+#include "wavrdhelp.h"
+
+int wavrd_check_header(void *wav, const char *filename)
+{
+	int format, sampleRate, channels, bitsPerSample;
+
+	if (!wav_get_header(wav, &format, &channels, &sampleRate,
+	    &bitsPerSample, NULL)) {
+		fprintf(stderr, "error: %s is not a valid WAV file\n",
+			filename);
+		return -1;
+	}
+	if (format != 1) {
+		fprintf(stderr, "error: %s has unsupported WAV format %d\n",
+			filename, format);
+		return -1;
+	}
+	if (bitsPerSample != 16) {
+		fprintf(stderr,
+			"error: %s has unsupported WAV sample depth %d\n",
+			filename, bitsPerSample);
+		return -1;
+	}
+	if (channels != 1) {
+		fprintf(stderr, "error: %s has %d channels, need 1\n",
+			filename, channels);
+		return -1;
+	}
+	if (sampleRate != 8000) {
+		fprintf(stderr,
+			"error: %s has %d Hz sample rate, need 8000 Hz\n",
+			filename, sampleRate);
+		return -1;
+	}
+	return 0;
+}
+
+int wavrd_get_pcm_block(void *wav, int16_t *pcm)
+{
+	uint8_t bytes[320], *dp;
+	int cc, i;
+
+	cc = wav_read_data(wav, bytes, 320);
+	cc >>= 1;
+	dp = bytes;
+	for (i = 0; i < cc; i++) {
+		pcm[i] = dp[0] | (dp[1] << 8);
+		dp += 2;
+	}
+	while (i < 160)
+		pcm[i++] = 0;
+	return cc;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtest/wavrdhelp.h	Sun Nov 20 01:34:57 2022 +0000
@@ -0,0 +1,8 @@
+/*
+ * We implement a couple of helper functions on top of the WAV reader
+ * which we've lifted out of opencore-amrnb test code; this header file
+ * provides prototype declarations for these functions.
+ */
+
+extern int wavrd_check_header(void *wav, const char *filename);
+extern int wavrd_get_pcm_block(void *wav, int16_t *pcmbuf);