*** empty log message ***
This commit is contained in:
96
sys/amiga/cvtsnd.c
Normal file
96
sys/amiga/cvtsnd.c
Normal file
@@ -0,0 +1,96 @@
|
||||
/* SCCS Id: @(#)cvtsnd.c 3.2 95/09/10 */
|
||||
/* Copyright (c) 1995, Andrew Church, Olney, Maryland */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct {
|
||||
short namelen;
|
||||
char name[62];
|
||||
char misc[64]; /* rest of MacBinary header */
|
||||
long FORM;
|
||||
long flen;
|
||||
long AIFF;
|
||||
long SSND;
|
||||
long sndlen;
|
||||
} AIFF;
|
||||
|
||||
typedef struct {
|
||||
char FORM[4];
|
||||
long flen;
|
||||
char _8SVX[4];
|
||||
char VHDR[4];
|
||||
long vhlen;
|
||||
long oneshot, repeat;
|
||||
long samples; /* 'samplesPerHiCycle' in the docs - usually 32, so
|
||||
* we'll use that */
|
||||
short freq;
|
||||
char octaves, compress;
|
||||
long volume;
|
||||
char NAME[4];
|
||||
long nlen; /* should be 64; see name[] comment */
|
||||
char name[64]; /* for simplicity, i.e. just fwrite() entiree header */
|
||||
char BODY[4];
|
||||
long blen;
|
||||
} IFF;
|
||||
|
||||
|
||||
main(int ac, char **av)
|
||||
{
|
||||
FILE *in, *out;
|
||||
AIFF aiff;
|
||||
IFF iff;
|
||||
static char buf[16384];
|
||||
long n, len;
|
||||
|
||||
if (ac != 3) {
|
||||
fprintf(stderr, "Usage: %s input-file output-file\n", av[0]);
|
||||
exit(20);
|
||||
}
|
||||
if (!(in = fopen(av[1], "r"))) {
|
||||
fprintf(stderr, "Can't open input file\n");
|
||||
exit(20);
|
||||
}
|
||||
if (!(out = fopen(av[2], "w"))) {
|
||||
fprintf(stderr, "Can't open output file\n");
|
||||
exit(20);
|
||||
}
|
||||
|
||||
fread(&aiff, sizeof(aiff), 1, in);
|
||||
memcpy(iff.FORM, "FORM", 4);
|
||||
iff.flen = sizeof(iff) + aiff.sndlen - 8;
|
||||
memcpy(iff._8SVX, "8SVX", 4);
|
||||
memcpy(iff.VHDR, "VHDR", 4);
|
||||
iff.vhlen = 20;
|
||||
iff.oneshot = aiff.sndlen;
|
||||
iff.repeat = 0;
|
||||
iff.samples = 32;
|
||||
iff.freq = 22000;
|
||||
iff.octaves = 1;
|
||||
iff.compress= 0;
|
||||
iff.volume = 0x10000;
|
||||
memcpy(iff.NAME, "NAME", 4);
|
||||
iff.nlen = 64;
|
||||
strncpy(iff.name, aiff.name, 62); iff.name[aiff.namelen] = 0;
|
||||
memcpy(iff.BODY, "BODY", 4);
|
||||
iff.blen = aiff.sndlen;
|
||||
fwrite(&iff, sizeof(iff), 1, out);
|
||||
len = aiff.sndlen;
|
||||
do {
|
||||
if (len >= sizeof(buf))
|
||||
n = fread(buf, 1, sizeof(buf), in);
|
||||
else
|
||||
n = fread(buf, 1, len, in);
|
||||
if (n) {
|
||||
fwrite(buf, 1, n, out);
|
||||
len -= n;
|
||||
}
|
||||
} while (len && n);
|
||||
|
||||
if (len)
|
||||
fprintf(stderr, "Warning: %ld bytes of sample missing\n", len);
|
||||
fclose(in); fclose(out);
|
||||
exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user