head 1.2; access; symbols pkgsrc-2013Q2:1.2.0.54 pkgsrc-2013Q2-base:1.2 pkgsrc-2012Q4:1.2.0.52 pkgsrc-2012Q4-base:1.2 pkgsrc-2011Q4:1.2.0.50 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q2:1.2.0.48 pkgsrc-2011Q2-base:1.2 pkgsrc-2009Q4:1.2.0.46 pkgsrc-2009Q4-base:1.2 pkgsrc-2008Q4:1.2.0.44 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.42 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.40 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.38 pkgsrc-2008Q2-base:1.2 pkgsrc-2008Q1:1.2.0.36 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.34 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.32 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.30 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.28 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.26 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.24 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.22 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.20 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.18 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.2.0.16 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.14 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.12 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.10 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.2.0.8 pkgsrc-2004Q3-base:1.2 pkgsrc-2004Q2:1.2.0.6 pkgsrc-2004Q2-base:1.2 pkgsrc-2004Q1:1.2.0.4 pkgsrc-2004Q1-base:1.2 pkgsrc-2003Q4:1.2.0.2 pkgsrc-2003Q4-base:1.2 buildlink2-base:1.2 netbsd-1-5-RELEASE:1.1 netbsd-1-4-PATCH003:1.1 netbsd-1-4-PATCH002:1.1 comdex-fall-1999:1.1 netbsd-1-4-PATCH001:1.1; locks; strict; comment @# @; 1.2 date 2000.12.17.23.41.18; author wiz; state dead; branches; next 1.1; 1.1 date 99.06.10.00.16.25; author hubertf; state Exp; branches; next ; desc @@ 1.2 log @Move lots of packages to new time category; fix links; add time subcategory to main Makefile. @ text @$NetBSD: patch-ab,v 1.1 1999/06/10 00:16:25 hubertf Exp $ --- sys/NetBSD/audio.c.orig Sun May 23 10:29:13 1999 +++ sys/NetBSD/audio.c Sun May 23 10:55:39 1999 @@@@ -0,0 +1,298 @@@@ +/* + * NetBSD $B%5%&%s%I=hM}(B + */ + +/* + * Copyright (c) 1994 Kazuhiko Ishii. + * Copyright (c) 1995 Masanobu Saitoh. + * + * $BK\%=%U%H%&%'%"$N%=!<%9$d%P%$%J%j$r:FG[I[$9$k>l9g$O!"r7o$r=er7o$G$9!#(B + * 2. $BK\%=%U%H%&%'%"$N0lIt$^$?$OA4It$rCx:n8"l9g$O!";vA0$KCx:n8"&MQ$K;HMQ$9$k>l9g(B($B6bA,E*Mx1W$rF@@$k>l9g(B)$B$O!";vA0$K(B + * $BCx:n8"l9g!"4pK\E*$KM-=~$H$J$j$^$9!#(B + * 6. $BK\%=%U%H%&%'%"$rMxMQ$9$k$3$H$K$h$C$FH/@@8$7$?$$$+$J$kB;32$b!"Cx:n8"(B + * $Bl9g$O!";HMQ8"$,$J$$$b(B + * $B$N$H$7$^$9!#(B + * 7. $B!H(BEmi Clock$B!I$N>&I8$*$h$SK\%=%U%H%&%'%"$N2hA|$d%G%6%$%s$K4X$9$kCx:n(B + * $B8"$O!"(BMotosoft $B$3$H!HK\(B $B=SLi!I;a$,M-$7$^$9!#(B + * 8. $B!H(BEmi Clock$B!I$N>&I8$*$h$S2hA|$d%G%6%$%s$O!"(BX11$BHG(B Emi Clock $B3+H/$N$?(B + * $B$a!"(BMotosoft $B$h$j!H8E>l(B $B@@59T!I$X8D?ME*$K%i%$%;%s%96!M?$5$l$F$^$9!#(B + * $BBh;0l$KL5CG$G!"K\%=%U%H%&%'%"$N2hA|%G!<%?$rFssoundBParam)); + if ((cacheBufferPtr->soundLength = S_AuFileHeader(soundFile, + &(cacheBufferPtr->soundBParam))) < 0) { + close(soundFile); + return SOUND_FILE_INVALID; + } + cacheBufferPtr->soundCacheBuffer = + (char *)XtMalloc(cacheBufferPtr->soundLength); + read(soundFile, cacheBufferPtr->soundCacheBuffer, + cacheBufferPtr->soundLength); + close(soundFile); + return SOUND_NO_ERROR; +} + + +/* + * $B%-%c%C%7%e2=$5$l$?%5%&%s%I$N:F@@8(B + */ +static int +S_PlayCacheSound(cacheBufferPtr) +SoundCacheBuffer *cacheBufferPtr; +{ + int tmpfd; + if ((tmpfd = open(AUDIO_DEVICE, O_WRONLY)) < 0) { + if (errno == EBUSY) + return SOUND_DEVICE_BUSY; + return SOUND_DEVICE_ERROR; + } + AudioDevice = tmpfd; + ioctl(AudioDevice, AUDIO_GETINFO, &AudioSaveConfig); + /* $B%*!<%G%#%*%U%!%$%k$K9g$o$;$F%G%P%$%9$r%;%C%H$9$k(B + $B%G%P%$%9L$%5%]!<%H$N7A<0$N%*!<%G%#%*%U%!%$%k$O%(%i!<(B */ + if (ioctl(AudioDevice, AUDIO_SETINFO, + &(cacheBufferPtr->soundBParam)) < 0) { + close(AudioDevice); + return SOUND_DEVICE_ERROR; + } + /* $B%*!<%G%#%*%G%P%$%9$r%N%s%V%m%C%-%s%0%b!<%I$K@@_Dj(B */ + fcntl(AudioDevice, F_SETFL, fcntl(AudioDevice, F_GETFL, 0) | O_NDELAY); + SoundBufPtr = cacheBufferPtr->soundCacheBuffer; + SoundLeft = cacheBufferPtr->soundLength; + SoundPlayed = 0; + SoundTimeBytes = (cacheBufferPtr->soundBParam.play.precision / 8) * + cacheBufferPtr->soundBParam.play.channels * + cacheBufferPtr->soundBParam.play.sample_rate; + signal(SIGALRM, S_PlayInterval); + gettimeofday(&SoundStart, NULL); + S_PlayInterval(); + return SOUND_NO_ERROR; +} + + +/* + * $B%-%c%C%7%e2=$5$l$?%5%&%s%I$N3+J|(B + */ +static void +S_FreeCacheSound(cacheBufferPtr) +SoundCacheBuffer *cacheBufferPtr; +{ + XtFree(cacheBufferPtr->soundCacheBuffer); +} + + +/* + * $B%5%&%s%I4D6-$N8e;OKv(B + */ +static void +S_SoundEnvDispose() +{ + /* $B2?$b$7$J$$(B */ +} + +/* + * SIGALRM$B$G8F$P$l$k4X?t(B + */ +static void +S_PlayInterval() +{ + int nbytes, timer; + struct itimerval t; + struct timeval now; + + if (SoundLeft > 0) { + if ((nbytes = write(AudioDevice, SoundBufPtr, SoundLeft)) > 0) { + SoundPlayed += nbytes; + SoundLeft -= nbytes; + SoundBufPtr += nbytes; + timer = ((double)SoundPlayed / (double)SoundTimeBytes) + * 1000000; + gettimeofday(&now, NULL); + timer -= (now.tv_sec - SoundStart.tv_sec) * 1000000 + + now.tv_usec - SoundStart.tv_usec; + if (timer <= 0) + timer = 1; + } else { + timer = 1; + if (nbytes < 0 && errno != EBUSY) + SoundLeft = 0; + } + t.it_interval.tv_sec = 0; + t.it_interval.tv_usec = 0; + t.it_value.tv_sec = timer / 1000000; + t.it_value.tv_usec = timer % 1000000; + setitimer(ITIMER_REAL, &t, NULL); + } else { + if (close(AudioDevice) == -1) + perror("nazo\n"); + if (SoundTmpBuffer != NULL) { + XtFree(SoundTmpBuffer); + SoundTmpBuffer = NULL; + } + signal(SIGALRM, SIG_IGN); + } +} + +#if BYTE_ORDER == LITTLE_ENDIAN +# define BSWAP32(x) x = bswap32(x) +#endif +#if BYTE_ORDER == BIG_ENDIAN +# define BSWAP32(x) +#endif +#if BYTE_ORDER == PDP_ENDIAN +# error lose. +#endif + +/* + * .au$B%U%!%$%k$N%X%C%@@>pJs$rJV$94X?t(B + * $B%U%!%$%k0LCV$O%G!<%?It$N@@hF,$K%;%C%H$5$l$k!#(B + */ +static int +S_AuFileHeader(file, audio) +int file; +audio_info_t *audio; +{ + static int formattable[] = { + 0, 0, /* Not defined */ + AUDIO_ENCODING_ULAW, 8, /* 8-bit ISDN u-law */ + AUDIO_ENCODING_LINEAR, 8, /* 8-bit linear PCM */ + AUDIO_ENCODING_LINEAR, 16, /* 16-bit linear PCM */ + AUDIO_ENCODING_LINEAR, 24, /* 24-bit linear PCM */ + AUDIO_ENCODING_LINEAR, 32 /* 32-bit linear PCM */ + }; + + long magic, pos, size, format, rate, chan; + struct stat st; + + read(file, &magic, sizeof(long)); + BSWAP32(magic); + if (magic != AUDIOMAGICNUMBER) + return -1; + read(file, &pos, sizeof(long)); + BSWAP32(pos); + read(file, &size, sizeof(long)); + BSWAP32(size); + read(file, &format, sizeof(long)); + BSWAP32(format); + read(file, &rate, sizeof(long)); + BSWAP32(rate); + read(file, &chan, sizeof(long)); + BSWAP32(chan); + if (format < 1 || format > 5) + return -1; + format = format * 2; + audio->play.encoding = formattable[format]; + audio->play.precision = formattable[format + 1]; + audio->play.sample_rate = rate; + audio->play.channels = chan; + lseek(file, pos, SEEK_SET); + fstat(file, &st); + return st.st_size - pos; +} @ 1.1 log @Add sound Submitted in pr 7744 by Minoura Makoto @ text @d1 1 a1 1 $NetBSD$ d48 1 a48 1 +rcsId(audioId, "$Id: audio.c,v 1.5 1994/05/31 06:28:21 masa-k Rel $") @