Alsa dmix, softvol, és alsaequal

 ( gergov | 2012. február 6., hétfő - 23:05 )

Második hangkártyát szerettem volna beállítani, úgy, hogy a címben említett dolgok mindegyike működjön.
Van egy ilyen konfig fájlom:

ctl.equal {
  type equal;
}

pcm.swmixer {
    type dmix
    ipc_key 1234
    slave {
        pcm "hw:1,0"
        period_size 1024
        buffer_size 4096
        rate 96000
    }
}

pcm.plugequal {
  type equal;
  slave.pcm "plug:pcm.swmixer"
}

pcm.!default {
    type            softvol
    slave {
        pcm        "plug:plugequal"
    }
    control {
        name        "Masteraudigy"
        card        1
    }
}

Nem tudom, követtem-e el hibát, de tény, hogy ez így működik, csakhogy az xmms-en kívül semmi nem hajlandó a default eszközt default eszköznek felismerni.
(Szerk: vagyis a vlc és az mplayer akad fenn rajta, úgy tűnik az Adobe flash is jó helyre küldi a hangot.)

Aztán van egy másik változatom is:

ctl.equal {
  type equal;
}

pcm.swmixer {
    type dmix
    ipc_key 1234
    slave {
        pcm "hw:1,0"
        period_size 1024
        buffer_size 4096
        rate 96000
    }
}

pcm.plugequal {
  type equal;
  slave.pcm "plug:pcm.swmixer"
}

pcm.relay{
    type            softvol
    slave {
        pcm        "plug:plugequal"
    }
    control {
        name        "Masteraudigy"
        card        1
    }
}

pcm.!default {
  type plug;
  slave{
	pcm "relay"
  }
}

Ettől bármelyik program, ami alsa-val szeretne hangot lejátszani, egész egyszerűen segfaultol.
Ha a softvol előtt keresztülküldöm még egy sample rate konverzión is, akkor ugyanúgy nem ismerik fel a programok default eszköznek, mint az első konfiggal, de itt legalább még a hangminőség is romlik.

Aztán van egy harmadik is:

ctl.equal {
  type equal;
}

pcm.swmixer {
    type dmix
    ipc_key 1234
    slave {
        pcm "hw:1,0"
        period_size 1024
        buffer_size 4096
        rate 96000
    }
}

pcm.plugequal {
  type equal;
  slave.pcm "plug:pcm.swmixer"
}

pcm.!default {
  type plug;
  slave{
	pcm "plug:plugequal"
  }
}

Ez működik, minden program felismeri defaultnak, viszont nincs szoftveres hangerőszabályozás.

Mit rontok el? Hogyan lehetne megoldani?
Előre is köszi és bocsi a kissé hosszú topicindítóért!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ok. Megoldódott.
Az swmixerből kivettem a 96 kHz-es beállítást. Így a sample rate az alapértelmezett 48 kHz. Mivel úgysincs túl sok 96k-s zeném, ezzel együtt tudok élni.
Amit nem igazán értek, hogy az mplayer és a vlc miért önállósította magát és kezdte használni a másik hangkártyát, ahelyett, hogy adott volna valami hibaüzenetet.

A "kártyán" (Sound Blaster X-Fi Surround 5.1 Pro) egyébként van egy hangerőszabályzó gomb is, illetve járt hozzá egy távirányító, amiket szintén sikerült életrekeltenem.
ALSA WIKI-ből, fórumokról és innen-onnan összeszedett megoldás, ha érdekel valakit:

Állítólag legalább 1.0.24-es ALSA kell hozzá. Nálam 1.0.25 van fenn, tehát azzal biztosan működik.
Továbbá kell lirc. Telepítéskor a konfigurálásnál Remote Controlnak a Creative USB receiver-t kell kiválasztani, IR Transmitternek None-t.
A /etc/lirc/hardware.conf REMOTE_DRIVER értékét "alsa_usb"-re kell átírni.
Így a lirc már kezeli, a beérkező eseményekre pedig mindenki ízlése szerint reagálhat. Én például szintén a WIKI-ről irexec-et állítotam be:

.lircrc tartalma:

# $HOME/.lircrc
#S51 Volume Knob
begin
 prog = irexec
 remote = RM-1500
 button = vol-
 repeat = 1
 config = amixer -c Pro sset Masteraudigy 1- 
end

begin
 prog = irexec
 remote = RM-1500
 button = mute
 repeat = 1
 config = if [ `amixer -c Pro sget Masteraudigy|grep "Front Left:"|awk '{print $3}'` -gt 0 ]; then alsactl store -f ~/.asound.state; amixer -c Pro sset Masteraudigy 0; amixer -c Pro sset 'Power LED' off; else alsactl restore -f ~/.asound.state; amixer -c Pro sset 'Power LED' on;  fi 
end

begin
 prog = irexec
 remote = RM-1500
 button = vol+
 repeat = 1
 config = amixer -c Pro sset Masteraudigy 1+ 
end

Ha nagyon unatkozok, majd még hozzáírok annyit, hogy a távirányítóval lehessen XMMS-t vezérelni.