new utility for playing sound files
authorkstailey <kstailey@openbsd.org>
Thu, 2 Jan 1997 22:12:26 +0000 (22:12 +0000)
committerkstailey <kstailey@openbsd.org>
Thu, 2 Jan 1997 22:12:26 +0000 (22:12 +0000)
usr.bin/Makefile
usr.bin/aucat/Makefile [new file with mode: 0644]
usr.bin/aucat/aucat.1 [new file with mode: 0644]
usr.bin/aucat/aucat.c [new file with mode: 0644]

index 4f24a4a..c64e0fc 100644 (file)
@@ -1,13 +1,13 @@
-#      $OpenBSD: Makefile,v 1.34 1996/12/23 22:56:50 rahnds Exp $
+#      $OpenBSD: Makefile,v 1.35 1997/01/02 22:12:26 kstailey Exp $
 #      $NetBSD: Makefile,v 1.62 1996/03/10 05:45:43 thorpej Exp $
 #      from: @(#)Makefile      5.8.1.1 (Berkeley) 5/8/91
 
 .include <bsd.own.mk>
 
-SUBDIR=        apply apropos arch asa at awk banner basename bdes biff cal calendar \
-       cap_mkdb cdio checknr chflags chpass cksum cmp col colcrt colrm \
-       column comm compile_et compress cpp crontab ctags cut dirname du \
-       elf2olf encrypt env error expand false file file2c find finger fmt \
+SUBDIR= apply apropos arch asa at aucat awk banner basename bdes biff cal \
+       calendar cap_mkdb cdio checknr chflags chpass cksum cmp col colcrt \
+       colrm column comm compile_et compress cpp crontab ctags cut dirname \
+       du elf2olf encrypt env error expand false file file2c find finger fmt \
        fold from fsplit fstat ftp gencat getconf getopt head hexdump id \
        indent \
        info_mkdb ipcrm ipcs join jot kdump ktrace lam last lastcomm leave \
diff --git a/usr.bin/aucat/Makefile b/usr.bin/aucat/Makefile
new file mode 100644 (file)
index 0000000..c798320
--- /dev/null
@@ -0,0 +1,5 @@
+#      $OpenBSD: Makefile,v 1.1 1997/01/02 22:12:26 kstailey Exp $
+
+PROG=  aucat
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/aucat/aucat.1 b/usr.bin/aucat/aucat.1
new file mode 100644 (file)
index 0000000..2963229
--- /dev/null
@@ -0,0 +1,62 @@
+.\"    $OpenBSD: aucat.1,v 1.1 1997/01/02 22:12:27 kstailey Exp $
+.\"
+.\" Copyright (c) 1997 Kenneth Stailey.  All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"    This product includes software developed by the University of
+.\"    California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"
+.Dd Jan 2, 1997
+.Dt AUCAT 1
+.Os OpenBSD 2.0
+.Sh NAME
+.Nm aucat
+.Nd concatenate and play audio files 
+.Sh SYNOPSIS
+.Nm aucat
+.Op Ar
+.Sh DESCRIPTION
+The
+.Nm aucat
+utility reads files sequentially, writing them to /dev/audio.
+The
+.Ar file
+operands are processed in command line order.  If a Sun .au header is
+detected it is skipped over and not copied to /dev/audio otherwise the
+entire file is copied to /dev/audio.
+.Pp
+The
+.Nm aucat
+utility exits 0 on success, and >0 if an error occurs.
+.Sh HISTORY
+A
+.Nm
+utility appeared in OpenBSD 2.0
diff --git a/usr.bin/aucat/aucat.c b/usr.bin/aucat/aucat.c
new file mode 100644 (file)
index 0000000..2864b0c
--- /dev/null
@@ -0,0 +1,98 @@
+/*     $OpenBSD: aucat.c,v 1.1 1997/01/02 22:12:27 kstailey Exp $      */
+/*
+ * Copyright (c) 1997 Kenneth Stailey.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by Kenneth Stailey.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <machine/endian.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+
+/* 
+ * aucat: concatinate and play Sun 8-bit .au files
+ */
+
+/* function playfile: given a file which is positioned at the beginning
+ * of what is assumed to be an .au data stream copy it out to the audio
+ * device.  Return 0 on sucess, -1 on failure.
+ */
+int
+playfile(int fd)
+{
+  static int afd = -1;
+  int rd;
+  char buf[5120];
+
+  if (afd == -1)
+    if ((afd = open("/dev/audio", O_WRONLY)) < 0) {
+      perror("open /dev/audio");
+      return(-1);
+    }
+  while ((rd = read(fd, buf, sizeof(buf))) > 0) {
+    write(afd, buf, rd);
+    if (rd < sizeof(buf))
+      break;
+  }
+  
+  return (0);
+}
+
+int
+main(int argc, char **argv)
+{
+  int fd;
+  int argcInc = 0;             /* incrementing version of argc */
+  unsigned long data;
+  char magic[5];
+
+  while (--argc) {
+    ++argcInc;
+    if ((fd = open(argv[argcInc], O_RDONLY)) < 0) {
+      perror("open file");
+      exit(1);
+    }
+
+    read(fd, magic, 4);
+    magic[4] = '\0';
+    if (strcmp(magic, ".snd")) {
+      /* not an .au file, bad header.  Assume raw audio data since that's
+       * what /dev/audio generates by default.
+       */
+      lseek(fd, 0, SEEK_SET);
+    } else {
+      read(fd, &data, sizeof(data));
+      if (BYTE_ORDER != BIG_ENDIAN)
+       data = htonl(data);
+      lseek(fd, (off_t)data, SEEK_SET);
+    }
+    if (playfile(fd) < 0)
+      exit(1);
+  }
+  exit(0);
+}