alsa-project / alsa-lib

The Advanced Linux Sound Architecture (ALSA) - library
GNU Lesser General Public License v2.1
357 stars 176 forks source link

Sound Blaster Audigy Rx (SB1550) surround71 - side speakers have output, but not from side channels (6 & 7) #267

Closed ESSEMDEE closed 1 year ago

ESSEMDEE commented 2 years ago

In short, Side Left speaker seems to always output the same as Front Left, and the same for Side Right acting as a duplicate of Front Right.

I am not sure if there is a setting somewhere that I am not seeing, or if this is a driver issue, or what, but even with speaker-test or routing via ttable in asound.conf, channels 6 and 7 seem like dummy outputs to nowhere — though the side speaker connections do have output, albeit always the same as that of the front speakers.

mpv reports requesting 2 channels and getting 8, but still, using --af=channelmap="0-6|1-7|" results in silence, whereas otherwise, the side speakers mirror the output of the front.

Should it make a difference, I am running a live USB of Debian 11.4 Standard. The kernel is version 5.10.16, I believe.

ESSEMDEE commented 2 years ago

Here is the output from amixer scontents after a fresh boot: amixer scontents (fresh boot).txt

Here is the output after I made a couple of tweaks via alsamixer: amixer scontents (modified).txt

And in case more detailed is helpful, the output from amixer contents: amixer contents (modified).txt

I am not sure what other information might be useful, but here is the cards output from lspci -vvv: lspci.txt

Let me know if any other uploads and/or information is needed.

Pulseaudio is not installed, and I do not see any sort of configuration files for alsa in /etc or the user's home directory...

amixer is version 1.2.4.

ESSEMDEE commented 1 year ago

Here is what I get from aplay --dump-hw-params: aplay --dump-hw-params.txt

Trying mpv --audio-device=alsa/"hw:0,3" --audio-channels=16, I get the same general error about not being able to set the access type. (I presume that neither aplay nor mpv support noninterleaved access modes?)

I configured a PCM device using the plug plugin as follows: /etc/asound.conf.txt (Appended the .txt file extension for uploading here.)

However, although mpv manages to open the device without issue, even with a combination of --audio-channels=1, --af=channelmap="0-0|", and/or --alsa-ignore-chmap, output seems to be going to all speakers (some at full volume, some at half), even if set channels 1 through 15 in the ttable from 1 to 0! (The ttable seems to have no effect on output.)

I am baffled by what could be performing this up-mixing... Is there anything else that I should check or try before testing with a different distribution or version?

perexg commented 1 year ago

Use speaker-test utility to test all channels. If somethings does not work, it's most probably a driver issue.

ESSEMDEE commented 1 year ago

Use speaker-test utility to test all channels. If somethings does not work, it's most probably a driver issue.

As mentioned in my first post, I had been using speaker-test (albeit to test surround71, not direct hardware access, since attempts at that had failed with eight channels). But now that I know that the card needs sixteen channels for direct access, I will try speaker-test again this evening, and report back.

ESSEMDEE commented 1 year ago

_speaker-test -D"hw:0,3" -r48000 -c16 -f60 -FS16LE -tsine -l1 -S100 results in this: speaker-test-hw.txt Seems like speaker-test cannot handle noninterleaved access modes, either?

Changing the -D parameter to "plughw:0,3" or the PCM defined in the asound.conf posted earlier (both provide identical output), I receive the mess of results as outlined below.

LINE_OUT_1 FRONT_LEFT = 2.041V (0-FL and 8-CH9) FRONT_RIGHT = 2.021V (1-FR and 9-CH10)

LINE_OUT_2 REAR_LEFT = 2.034V (0-FL and 2-RL) REAR_RIGHT = 2.031V (1-FR and 3-RR) SIDE_RIGHT = 2.029V (1-FR and 9-CH10)

LINE_OUT_3 CENTER = 1.021V (0-FL and 1-FR) and 2.016V (6-SL) LFE = 1.028V (0-FL and 1-FR) and 2.031V (7-SR) SIDE_LEFT = 2.019V (0-FL and 8-CH9)

The names in parenthesis are abbreviations of those displayed by speaker-test. As you can see, there are eight channels with output, but for many of them, that output is seen across multiple speaker connections.

Bold text is the correct (or workable) output, provided the interference (mixing) of the other channels were not at play.

perexg commented 1 year ago

If my memory is right for this old piece of hw, you're trying to use the PCM device which connects to the EFX. Use "Multichannel PCM Send Routing" control to set the proper configuration (amixer contents and amixer set iface=PCM,name="Multichannel PCM Send Routing" ...array...).

Anyway this device was not intended for the standard use. You should use the standard plug:surround71 PCM where the routing should be correct.

perexg commented 1 year ago

And if the routing is not correct for plug:surround71 then you can try another by changing https://github.com/alsa-project/alsa-lib/blob/master/src/conf/cards/Audigy2.conf#L184 .

ESSEMDEE commented 1 year ago

And if the routing is not correct for plug:surround71 then you can try another by changing https://github.com/alsa-project/alsa-lib/blob/master/src/conf/cards/Audigy2.conf#L184 .

Thanks, I will give all of that a try.

As for the Audigy2.conf file, is there a reason that pcm.rear is missing the "EMU10K1 PCM Send Routing" present for the front, center_lfe, and side PCM interfaces? Could that be the issue?

perexg commented 1 year ago

I think that the default routing settings is for rear. So it's not required to change it.

ESSEMDEE commented 1 year ago

plug:surround71 provides the same results as surround71, save for the latter not accepting sixteen channels, only eight.

By modifying /usr/share/alsa/cards/Audigy2.conf and changing pcm.side's "EMU10K1 PCM Send Routing" values from 14 and 15 to 0 and 1 or 8 and 9, respectively, I can get the side channels to output during speaker-test, but the front channels seem to also be controlled by these same two pairs of values, with results like those seen with my speaker-test -D"plughw:0,3" attempt.

Actually, this apparent correspondence between 0<->8 and 1<->9 also can be seen in my results from the other day, in Line Out 2's Side Right and Line Out 3's Side Left readings.

What more can you tell me about these "EMU10K1 PCM Send Routing" value parameters? What range of values can be accepted, and why do the same eight values seem to be repeated three times for each PCM configuration?

And what about the "EMU10K1 PCM Send Volume" values?

perexg commented 1 year ago

It seems that the driver initialization code requires more work:

I am afraid, it's out of scope of the alsa-lib package to resolve this. You may enter a bug to kernel's bugzilla: https://bugzilla.kernel.org (Audio group), but we do not have active emu10k1/emu10k2 developers at this time. Also, most of information was gathered using the reverse engineering for this hw. Creative Labs does not co-operate with us.