FreeCalypso > hg > gsm-codec-lib
diff libtest/wavrdhelp.c @ 13:30d1d0a705c0
libtest: add WAV reader helper functions
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 20 Nov 2022 01:34:57 +0000 |
parents | |
children |
line wrap: on
line diff
--- /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; +}