comparison miscutil/wav2raw.c @ 142:578fdedf4327

pcm16-wav2raw utility written
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 14 Dec 2022 06:45:17 +0000
parents
children
comparison
equal deleted inserted replaced
141:c1dc094f0821 142:578fdedf4327
1 /*
2 * This program reads a 16-bit linear PCM speech recording in WAV format
3 * and converts it to raw format, either BE or LE.
4 */
5
6 #include <stdio.h>
7 #include <stdint.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <strings.h>
11 #include "../libtest/wavreader.h"
12 #include "../libtest/wavrdhelp.h"
13
14 main(argc, argv)
15 char **argv;
16 {
17 int big_endian;
18 void *wav;
19 FILE *outf;
20 int16_t pcm[160], samp;
21 uint8_t bytes[320], *dp;
22 int cc, rc, i;
23
24 if (argc != 4) {
25 usage: fprintf(stderr, "usage: %s input.wav output.raw be|le\n",
26 argv[0]);
27 exit(1);
28 }
29 if (!strcmp(argv[3], "be"))
30 big_endian = 1;
31 else if (!strcmp(argv[3], "le"))
32 big_endian = 0;
33 else
34 goto usage;
35 wav = wav_read_open(argv[1]);
36 if (!wav) {
37 perror(argv[1]);
38 exit(1);
39 }
40 rc = wavrd_check_header(wav, argv[1]);
41 if (rc < 0)
42 exit(1); /* error msg already printed */
43 outf = fopen(argv[2], "w");
44 if (!outf) {
45 perror(argv[2]);
46 exit(1);
47 }
48 for (;;) {
49 cc = wavrd_get_pcm_block(wav, pcm);
50 if (!cc)
51 break;
52 dp = bytes;
53 for (i = 0; i < cc; i++) {
54 samp = pcm[i];
55 if (big_endian) {
56 *dp++ = (samp >> 8) & 0xFF;
57 *dp++ = samp & 0xFF;
58 } else {
59 *dp++ = samp & 0xFF;
60 *dp++ = (samp >> 8) & 0xFF;
61 }
62 }
63 fwrite(bytes, 2, cc, outf);
64 }
65 fclose(outf);
66 exit(0);
67 }