summaryrefslogtreecommitdiffstats
path: root/mpeglib/lib/tplay/au.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mpeglib/lib/tplay/au.cpp')
-rw-r--r--mpeglib/lib/tplay/au.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/mpeglib/lib/tplay/au.cpp b/mpeglib/lib/tplay/au.cpp
new file mode 100644
index 00000000..8880515f
--- /dev/null
+++ b/mpeglib/lib/tplay/au.cpp
@@ -0,0 +1,100 @@
+/*
+ * tplay - buffered audio player
+ *
+ * (c) 1997 ilkka karvinen <ik@iki.fi>
+ *
+ * Copyright under the GNU GENERAL PUBLIC LICENSE
+ * (see the file COPYING in this directory)
+ *
+ *
+ * SunOS audio file header functions.
+ * Reference: http://www.wotsit.org
+ */
+
+#include "tplayfunctions.h"
+
+/* read_au returns zero if Sun audio file format is found. */
+int read_au(struct info_struct* info,char * buffer) {
+ DWORD magic, start, end, encoding, speed, channels;
+ int bits;
+
+
+ /* If '.snd'-header exits, this should be an au-file */
+ magic = read_big_endian_long(buffer);
+ if (magic != SUN_MAGIC)
+ return (1);
+
+ start = read_big_endian_long(buffer + 0x04);
+ end = read_big_endian_long(buffer + 0x08);
+ encoding = read_big_endian_long(buffer + 0x0C);
+ speed = read_big_endian_long(buffer + 0x10);
+ channels = read_big_endian_long(buffer + 0x14);
+
+#ifdef DEBUG
+ printf("Sun audio file.\nspeed: %ld, start: %ld, end: %ld, \
+encoding: %X, channels: %ld\n",
+ speed, start, end, encoding, channels);
+ fflush(stdout);
+#endif
+
+ bits = DEFAULT_BITS;
+ switch (encoding) {
+ case 1:
+ die("8-bit ISDN u-law Sun audio file not supported");
+ break;
+ case 2:
+ bits = 8;
+ break;
+ case 3:
+ bits = 16;
+ break;
+ case 4:
+ die("24-bit linear PCM Sun audio file not supported");
+ break;
+ case 5:
+ die("32-bit linear PCM Sun audio file not supported");
+ break;
+ case 6:
+ die("32-bit IEEE floating point Sun audio file not supported");
+ break;
+ case 7:
+ die("64-bit IEEE floating point Sun audio file not supported");
+ break;
+ case 23:
+ die("8-bit ISDN u-law compressed(G.721 ADPCM) Sun audio file \
+not supported");
+ break;
+ default:
+ errdie("Unknown Sun audio file");
+ break;
+ }
+
+ info->filetype = SUN_FILE;
+
+ /* Set audio parameters */
+ info->speed = (int) speed;
+ info->bits = bits;
+ info->channels = (int) channels;
+
+ if (info->verbose) {
+ printf("Sun audio file: %ld samples/s, %d bits, %d channel(s).\n",
+ info->speed, info->bits, info->channels);
+ /*
+ if ((comment_size = start - SUN_HDRSIZE) > 0) {
+ printf("Header info: ");
+ for (i = 0; i < comment_size; i++)
+ nice_fputc((int) buffer[SUN_HDRSIZE + i], stdout);
+ printf("\n");
+ }
+ */
+ }
+
+ /* Move data to start from the beginning of the buffer. */
+ /* This is to ensure the correct behaviour of rounding when 16bits */
+ /* and/or stereo sample is to be played. */
+ memmove(buffer, buffer + (start + 1), info->blocksize - start - 1);
+
+ info->headerskip = (int) (start + 1);
+
+ return (0);
+}