Module Name: src
Committed By: nat
Date: Sun May 28 21:15:58 UTC 2017
Modified Files:
src/sys/dev: audiobell.c
Log Message:
Set the gain of play back, rather than altering the generated wave by a
factor of volume.
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/audiobell.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/audiobell.c
diff -u src/sys/dev/audiobell.c:1.18 src/sys/dev/audiobell.c:1.19
--- src/sys/dev/audiobell.c:1.18 Sat May 27 12:04:44 2017
+++ src/sys/dev/audiobell.c Sun May 28 21:15:58 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: audiobell.c,v 1.18 2017/05/27 12:04:44 nat Exp $ */
+/* $NetBSD: audiobell.c,v 1.19 2017/05/28 21:15:58 nat Exp $ */
/*
@@ -32,7 +32,7 @@
*/
#include <sys/types.h>
-__KERNEL_RCSID(0, "$NetBSD: audiobell.c,v 1.18 2017/05/27 12:04:44 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audiobell.c,v 1.19 2017/05/28 21:15:58 nat Exp $");
#include <sys/audioio.h>
#include <sys/conf.h>
@@ -57,13 +57,12 @@ __KERNEL_RCSID(0, "$NetBSD: audiobell.c,
#define BELL_SHIFT 19
static inline void
-audiobell_expandwave(int16_t *buf, int volume)
+audiobell_expandwave(int16_t *buf)
{
u_int i;
- KASSERT(volume >= 0 && volume <= 100);
for (i = 0; i < __arraycount(sinewave); i++)
- buf[i] = (int32_t)sinewave[i] * (int32_t)volume / 100;
+ buf[i] = sinewave[i];
for (i = __arraycount(sinewave); i < __arraycount(sinewave) * 2; i++)
buf[i] = buf[__arraycount(sinewave) * 2 - i - 1];
for (i = __arraycount(sinewave) * 2; i < __arraycount(sinewave) * 4; i++)
@@ -82,7 +81,7 @@ audiobell_synthesize(int16_t *buf, u_int
wave = malloc(sizeof(sinewave) * 4, M_TEMP, M_WAITOK);
if (wave == NULL) return -1;
- audiobell_expandwave(wave, volume);
+ audiobell_expandwave(wave);
pitch = pitch * ((sizeof(sinewave) * 4) << BELL_SHIFT) /
BELL_SAMPLE_RATE / 2;
period = period * BELL_SAMPLE_RATE / 1000 / 2;
@@ -107,6 +106,8 @@ audiobell(void *v, u_int pitch, u_int pe
struct file *fp;
int size, len;
+ KASSERT(volume <= 100);
+
fp = NULL;
dev_t audio = AUDIO_DEVICE | device_unit((device_t)v);
@@ -124,6 +125,7 @@ audiobell(void *v, u_int pitch, u_int pe
ai.play.sample_rate = BELL_SAMPLE_RATE;
ai.play.precision = 16;
+ ai.play.gain = 255 * 100 / volume;
#if BYTE_ORDER == LITTLE_ENDIAN
ai.play.encoding = AUDIO_ENCODING_SLINEAR_LE;