* [PATCH] Audigy + FX8010 capture (hw:x,2) - again
@ 2004-06-28 7:00 Peter Zubaj
2004-07-14 5:45 ` Lee Revell
0 siblings, 1 reply; 2+ messages in thread
From: Peter Zubaj @ 2004-06-28 7:00 UTC (permalink / raw)
To: alsa-devel
[-- Attachment #1: Type: TEXT/plain, Size: 778 bytes --]
Hi,
This patch fixes capture problems from hw:x,2 on Audigy. It is same as
previous, because it can be applied cleanly against CVS (I tested
version from 23.06.2004) and hope it is still true for current CVS.
I tested 4 channel recrding and it was OK.
hw:x,2 records outputs from FX8010 (not FX buses)
Using "EFX voices mask" you can set channels what you want record.
use alsactl store to store config
edit this config (set true for needed channel for "EFX voices mask"
control) - I recorded channels 8,9,14,15 (front and rear output).
use alsactl restore to restore config
Looks like channel count must be power of 2 (1, 2, 4, 8, ...).
Peter Zubaj
____________________________________
http://www.pobox.sk/ - najvacsi slovensky freemail
[-- Attachment #2: efx_capture_audigy.diff --]
[-- Type: APPLICATION/octet-stream, Size: 5274 bytes --]
diff -r -u o/alsa-kernel/pci/emu10k1/emupcm.c n/alsa-kernel/pci/emu10k1/emupcm.c
--- o/alsa-kernel/pci/emu10k1/emupcm.c 2004-03-06 17:51:30.000000000 +0100
+++ n/alsa-kernel/pci/emu10k1/emupcm.c 2004-06-20 14:05:17.000000000 +0200
@@ -452,7 +452,11 @@
snd_emu10k1_ptr_write(emu, ADCCR, 0, 0);
break;
case CAPTURE_EFX:
- snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
+ if (emu->audigy) {
+ snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0);
+ snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0);
+ } else
+ snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
break;
default:
break;
@@ -618,7 +622,11 @@
snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val);
break;
case CAPTURE_EFX:
- snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val);
+ if (emu->audigy) {
+ snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val);
+ snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2);
+ } else
+ snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val);
break;
default:
break;
@@ -637,7 +645,11 @@
snd_emu10k1_ptr_write(emu, ADCCR, 0, 0);
break;
case CAPTURE_EFX:
- snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
+ if (emu->audigy) {
+ snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0);
+ snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0);
+ } else
+ snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
break;
default:
break;
diff -r -u o/alsa-kernel/pci/emu10k1/emuproc.c n/alsa-kernel/pci/emu10k1/emuproc.c
--- o/alsa-kernel/pci/emu10k1/emuproc.c 2004-03-02 16:32:37.000000000 +0100
+++ n/alsa-kernel/pci/emu10k1/emuproc.c 2004-06-20 14:48:47.000000000 +0200
@@ -71,31 +71,32 @@
static void snd_emu10k1_proc_read(snd_info_entry_t *entry,
snd_info_buffer_t * buffer)
{
- static char *outputs[32] = {
- /* 00 */ "PCM Left",
- /* 01 */ "PCM Right",
- /* 02 */ "PCM Surround Left",
- /* 03 */ "PCM Surround Right",
- /* 04 */ "MIDI Left",
- /* 05 */ "MIDI Right",
- /* 06 */ "PCM Center",
- /* 07 */ "PCM LFE",
- /* 08 */ "???",
- /* 09 */ "???",
- /* 10 */ "???",
- /* 11 */ "???",
- /* 12 */ "MIDI Reverb",
- /* 13 */ "MIDI Chorus",
- /* 14 */ "???",
+ /* FIXME - output names are in emufx.c too */
+ static char *creative_outs[32] = {
+ /* 00 */ "AC97 Left",
+ /* 01 */ "AC97 Right",
+ /* 02 */ "Optical IEC958 Left",
+ /* 03 */ "Optical IEC958 Right",
+ /* 04 */ "Center",
+ /* 05 */ "LFE",
+ /* 06 */ "Headphone Left",
+ /* 07 */ "Headphone Right",
+ /* 08 */ "Surround Left",
+ /* 09 */ "Surround Right",
+ /* 10 */ "PCM Capture Left",
+ /* 11 */ "PCM Capture Right",
+ /* 12 */ "MIC Capture",
+ /* 13 */ "AC97 Surround Left",
+ /* 14 */ "AC97 Surround Right",
/* 15 */ "???",
/* 16 */ "???",
- /* 17 */ "???",
- /* 18 */ "ADC Left / CDROM S/PDIF Left",
- /* 19 */ "ADC Right / CDROM S/PDIF Right",
- /* 20 */ "MIC / Zoom Video Left",
- /* 21 */ "Zoom Video Right",
- /* 22 */ "S/PDIF Left",
- /* 23 */ "S/PDIF Right",
+ /* 17 */ "Analog Center",
+ /* 18 */ "Analog LFE",
+ /* 19 */ "???",
+ /* 20 */ "???",
+ /* 21 */ "???",
+ /* 22 */ "???",
+ /* 23 */ "???",
/* 24 */ "???",
/* 25 */ "???",
/* 26 */ "???",
@@ -105,9 +106,78 @@
/* 30 */ "???",
/* 31 */ "???"
};
+
+ static char *audigy_outs[64] = {
+ /* 00 */ "Digital Front Left",
+ /* 01 */ "Digital Front Right",
+ /* 02 */ "Digital Center",
+ /* 03 */ "Digital LEF",
+ /* 04 */ "Headphone Left",
+ /* 05 */ "Headphone Right",
+ /* 06 */ "Digital Rear Left",
+ /* 07 */ "Digital Rear Right",
+ /* 08 */ "Front Left",
+ /* 09 */ "Front Right",
+ /* 10 */ "Center",
+ /* 11 */ "LFE",
+ /* 12 */ "???",
+ /* 13 */ "???",
+ /* 14 */ "Rear Left",
+ /* 15 */ "Rear Right",
+ /* 16 */ "AC97 Front Left",
+ /* 17 */ "AC97 Front Right",
+ /* 18 */ "ADC Caputre Left",
+ /* 19 */ "ADC Capture Right",
+ /* 20 */ "???",
+ /* 21 */ "???",
+ /* 22 */ "???",
+ /* 23 */ "???",
+ /* 24 */ "???",
+ /* 25 */ "???",
+ /* 26 */ "???",
+ /* 27 */ "???",
+ /* 28 */ "???",
+ /* 29 */ "???",
+ /* 30 */ "???",
+ /* 31 */ "???",
+ /* 32 */ "???",
+ /* 33 */ "???",
+ /* 34 */ "???",
+ /* 35 */ "???",
+ /* 36 */ "???",
+ /* 37 */ "???",
+ /* 38 */ "???",
+ /* 39 */ "???",
+ /* 40 */ "???",
+ /* 41 */ "???",
+ /* 42 */ "???",
+ /* 43 */ "???",
+ /* 44 */ "???",
+ /* 45 */ "???",
+ /* 46 */ "???",
+ /* 47 */ "???",
+ /* 48 */ "???",
+ /* 49 */ "???",
+ /* 50 */ "???",
+ /* 51 */ "???",
+ /* 52 */ "???",
+ /* 53 */ "???",
+ /* 54 */ "???",
+ /* 55 */ "???",
+ /* 56 */ "???",
+ /* 57 */ "???",
+ /* 58 */ "???",
+ /* 59 */ "???",
+ /* 60 */ "???",
+ /* 61 */ "???",
+ /* 62 */ "???",
+ /* 33 */ "???"
+ };
+
emu10k1_t *emu = snd_magic_cast(emu10k1_t, entry->private_data, return);
unsigned int val;
int nefx = emu->audigy ? 64 : 32;
+ char **outputs = emu->audigy ? audigy_outs : creative_outs;
int idx;
snd_iprintf(buffer, "EMU10K1\n\n");
@@ -135,7 +205,7 @@
snd_iprintf(buffer, "\nCaptured FX Outputs :\n");
for (idx = 0; idx < nefx; idx++) {
if (emu->efx_voices_mask[idx/32] & (1 << (idx%32)))
- snd_iprintf(buffer, " Output %02i [%s]\n", idx, outputs[idx%32]);
+ snd_iprintf(buffer, " Output %02i [%s]\n", idx, outputs[idx]);
}
snd_iprintf(buffer, "\nAll FX Outputs :\n");
for (idx = 0; idx < 32; idx++)
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] Audigy + FX8010 capture (hw:x,2) - again
2004-06-28 7:00 [PATCH] Audigy + FX8010 capture (hw:x,2) - again Peter Zubaj
@ 2004-07-14 5:45 ` Lee Revell
0 siblings, 0 replies; 2+ messages in thread
From: Lee Revell @ 2004-07-14 5:45 UTC (permalink / raw)
To: Peter Zubaj; +Cc: alsa-devel
On Mon, 2004-06-28 at 03:00, Peter Zubaj wrote:
> Hi,
>
> This patch fixes capture problems from hw:x,2 on Audigy. It is same as
> previous, because it can be applied cleanly against CVS (I tested
> version from 23.06.2004) and hope it is still true for current CVS.
>
> I tested 4 channel recrding and it was OK.
>
> hw:x,2 records outputs from FX8010 (not FX buses)
>
> Using "EFX voices mask" you can set channels what you want record.
>
> use alsactl store to store config
> edit this config (set true for needed channel for "EFX voices mask"
> control) - I recorded channels 8,9,14,15 (front and rear output).
> use alsactl restore to restore config
>
> Looks like channel count must be power of 2 (1, 2, 4, 8, ...).
>
8 channel recording seems to work as well. I get an error with 16.
What happens with the capture buffer interrupts when you double the
number of channels, using the same period size? The FX capture buffer
does not seem to be per-channel.
Lee
-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
digital self defense, top technical experts, no vendor pitches,
unmatched networking opportunities. Visit www.blackhat.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-07-14 5:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-28 7:00 [PATCH] Audigy + FX8010 capture (hw:x,2) - again Peter Zubaj
2004-07-14 5:45 ` Lee Revell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.