pkgsrc/audio/cmp3/patches/patch-ac
2007-02-16 14:54:16 +00:00

149 lines
3.6 KiB
Text

$NetBSD: patch-ac,v 1.3 2007/02/16 14:54:16 joerg Exp $
--- cmp3volume.c.orig 2001-07-01 04:38:08.000000000 +0000
+++ cmp3volume.c
@@ -3,8 +3,8 @@
*/
#include "cmp3funcs.h"
-#if defined(__FreeBSD__)
-#include <machine/soundcard.h>
+#if defined(__NetBSD__)
+#include <sys/audioio.h>
#else
#include<sys/soundcard.h>
#endif
@@ -16,6 +16,63 @@ static int mixernum,
* Initialize volume control
* Returns: nothing
****************************************************************************/
+#if defined(__NetBSD__)
+
+int device_id;
+mixer_ctrl_t *m, *values;
+
+extern void initvol()
+{
+ int i, ndev;
+ char *mixer_device;
+ mixer_devinfo_t dinfo, *infos;
+
+ mixer_device = getenv("MIXERDEVICE");
+ if (mixer_device == NULL)
+ mixer_device = "/dev/mixer0";
+
+ if ((mixernum=open(mixer_device, O_RDWR)) < 0) {
+ fprintf(stderr, "open mixer device: %s", strerror(errno));
+ enditall(SIGSEGV);
+ }
+
+ for (ndev = 0; ; ndev++) {
+ dinfo.index = ndev;
+ if (ioctl(mixernum, AUDIO_MIXER_DEVINFO, &dinfo) < 0)
+ break;
+ }
+ infos = calloc(ndev, sizeof *infos);
+ values = calloc(ndev, sizeof *values);
+
+ for (i = 0; i < ndev; i++) {
+ infos[i].index = i;
+ ioctl(mixernum, AUDIO_MIXER_DEVINFO, &infos[i]);
+ }
+
+ for (i = 0; i < ndev; i++) {
+ if (infos[i].type == AUDIO_MIXER_VALUE) {
+ values[i].dev = i;
+ values[i].type = infos[i].type;
+ }
+ if (strcmp(infos[i].label.name, AudioNdac) == 0) {
+ device_id = i;
+ break;
+ }
+ }
+
+ values[device_id].un.value.num_channels = 2;
+
+ m = &values[device_id];
+ ioctl(mixernum, AUDIO_MIXER_READ, m);
+ vol = m->un.value.level[0] * 100 / AUDIO_MAX_GAIN;
+ mvprintw(3,COLS/2-1,"-");
+ mvprintw(LINES-7,COLS/2-1,"-");
+ mvprintw((LINES-8)-(vol*(LINES-12)/100),COLS/2-1,"*");
+ return;
+}
+
+#else
+
extern void initvol()
{
if ((mixernum=open("/dev/mixer", O_RDWR)) < 0) {
@@ -30,6 +87,8 @@ extern void initvol()
return;
}
+#endif
+
extern void endvol()
{
close(mixernum);
@@ -61,6 +120,23 @@ extern void volclean()
* Although I hate users in general, we should probably do it.
* Returns: nothing
****************************************************************************/
+#if defined(__NetBSD__)
+
+extern void volup()
+{
+ mvprintw((LINES-8)-(vol*(LINES-12)/100),COLS/2-1," ");
+ vol += 3;
+ if (vol > 100)
+ vol = 100;
+ m = &values[device_id];
+ ioctl(mixernum, AUDIO_MIXER_WRITE, m);
+ m->un.value.level[0] = m->un.value.level[1] = vol * AUDIO_MAX_GAIN / 100;
+ mvprintw((LINES-8)-(vol*(LINES-12)/100), COLS/2-1, "*");
+ return;
+}
+
+#else
+
extern void volup()
{
int i;
@@ -75,10 +151,29 @@ extern void volup()
return;
}
+#endif
+
/****************************************************************************
* It's too loud junior, turn it down!
* Returns: nothing
****************************************************************************/
+#if defined(__NetBSD__)
+
+extern void voldown()
+{
+ mvprintw((LINES-8)-(vol*(LINES-12)/100),COLS/2-1," ");
+ vol -= 3;
+ if (vol < 0)
+ vol = 0;
+ m = &values[device_id];
+ ioctl(mixernum, AUDIO_MIXER_WRITE, m);
+ m->un.value.level[0] = m->un.value.level[1] = vol * AUDIO_MAX_GAIN / 100;
+ mvprintw((LINES-8)-(vol*(LINES-12)/100), COLS/2-1, "*");
+ return;
+}
+
+#else
+
extern void voldown()
{
int i;
@@ -93,4 +188,6 @@ extern void voldown()
return;
}
+#endif
+
/* EOF */