From 1d8e6258e8a1d9e7b7c0801cf1a36a1e5620f4ef Mon Sep 17 00:00:00 2001 From: kstailey Date: Thu, 2 Jan 1997 22:12:26 +0000 Subject: [PATCH] new utility for playing sound files --- usr.bin/Makefile | 10 ++--- usr.bin/aucat/Makefile | 5 +++ usr.bin/aucat/aucat.1 | 62 ++++++++++++++++++++++++++ usr.bin/aucat/aucat.c | 98 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 170 insertions(+), 5 deletions(-) create mode 100644 usr.bin/aucat/Makefile create mode 100644 usr.bin/aucat/aucat.1 create mode 100644 usr.bin/aucat/aucat.c diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 4f24a4a3c7f..c64e0fc426d 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -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 -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 index 00000000000..c798320824a --- /dev/null +++ b/usr.bin/aucat/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 1997/01/02 22:12:26 kstailey Exp $ + +PROG= aucat + +.include diff --git a/usr.bin/aucat/aucat.1 b/usr.bin/aucat/aucat.1 new file mode 100644 index 00000000000..29632292b48 --- /dev/null +++ b/usr.bin/aucat/aucat.1 @@ -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 index 00000000000..2864b0c59cf --- /dev/null +++ b/usr.bin/aucat/aucat.c @@ -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 +#include +#include +#include +#include + +/* + * 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); +} -- 2.20.1