Zvuk v OS Linux

Poznámka: Jedná se subjektivní názor Petra Soukupa, problémy se týkají především kvality vstupu pro mikrofon.

Obecně se zvukové karty počítačů na bázi PC, to je jedna velká potíž. Často mají velké množství různých hýbátek, šoupátek a přepínačů, že by se v tom nejeden uživatel ztratil. Ale pokud chci zprovoznit mikrofon, tak aby jeho kvalita alespoň ušla, bývá to často až nemožné.

Máte-li tu smůlu, a vstup pro mikrofon vaší integrované zvukové karty jedno velké šumítko. (a nebo např. funguje-li zvuková karta jen někdy a to ještě pochybně), jsou zde dvě možnosti

  • koupit další nějakou zvukovou kartu - nevýhoda, musím rozdělat počítač a naskočí mi dalších „tisíc“ šoupátek
  • koupit USB sluchátka - jen o málo dražší než běžná sluchátka, problém krásně vyřeší. Bohužel ne každá USB sluchátka fungují bez ovladače (myslím defaultní ovladač už přítomen) a dobře. Kvalita mikrofonu bývá velmi dobrá i u tak levných zařízení jako je „mluvící myš
  • koupit USB převodník objednat se dá rovnou z Číny - mohu použít běžná sluchátka nebo reproduktory. Nevýhoda snad jen obsazený USB port

Jaké jsou další výhody USB řešení? USB je možné „přesměrovat“ přímo do virtuálu (např. používáte-li virtualbox). Velice snadno se přenáší!

<iframe width="1033" height="635" src="http://www.youtube.com/embed/wWzOqADBpY8?hl=cs&fs=1" frameborder="0" allowfullscreen></iframe>

Bohužel místy je zvuk trochu posunut od toho, co vidíte, zvláště když vykládám o usb sluchátkách šidítkách, co mají usb napájení jen jako napájení, na monitoru jsou pravá usb sluchátkách.

Výběr defaultní zvukové karty

Defaultní zvukovou kartu můžeme určit obsahem souboru /etc/asound.conf. Nemáte-li takový soubor, vytvořte jej jako root.

# tohle je co ma hrat
pcm.!default {
  type plug
  slave {
    pcm "hw:1,0" # použij kartu číslo 1 (je počítáno od nuly viz. cat /proc/asound/cards)
  }
}

# tohle je default pro alsamixer
ctl.!default {
  type hw
  card 1   # použij kartu číslo 1
}

jiná lepší možnost, karty identifikujeme podle názvu:

# http://kubuntuforums.net/forums/index.php?topic=3106282.0
# jméno karty je cat /proc/asound/cards v těch hranatejch, tak pak napíšeme za slovo card.
pcm.!default {
    type hw
#    card Audio
    card default
}
ctl.!default {
    type hw
#    card Audio
    card default
}

Zjevně tento konfigurační soubor vypadá podivně. Jak vyzkoušíme že opravdu funguje? Není nic třeba restartovat, začne po chvíli fungovat sám. Zkusíme pak spustit alsamixer, ano zvuková karta kterou uvidíme hned po spuštění, je právě ta kterou jsme zadali v našem konfiguračním souboru jak card. (seznam „karet“ zjistíte např. pomocí cat /proc/asound/cards viz níže)

Také můžeme zkusit spustit aplay. Flashplayer je aplikace zlobivá a nemusí brát na tohle nastavení zřetel. Ale může.

A nyní náš krátký příběh.

Máme počítač s OS Debian distribuce squeeze, kde je integrovaná zvuková karta s ovladačem (modulem do jádra) s názvem snd_hda_intel Ta bohužel spíše nefunguje než funguje. Koupili jsme si proto usb sluchátka, konkrétně tahle. Aplikace, kde je možné nastavit zvukové zařízení, jako např. Skype, náhle začala bez potíží fungovat, ale jak to vysvětlit těm, u kterých se to nastavit nedá? Jako např. flashplayer?

Nevím, jaké je nejsprávnější řešení, já popíši moji cestu. Má domněnka byla, že když nějak znefunkčním integrovanou zvukovou kartu, stane se defaultní karta ta přes USB. Zabanoval jsem tedy modul jádra snd_hda_intel

vim /etc/modprobe.d/blacklist.conf
# na konec jsem přidal 
blacklist snd_hda_intel

Jestli je po restartu modul stále přítomen, je možné zjistit pomocí příkazu lsmod. Modul už tam nebyl, ale bohužel jsem si nepomohl. Příkaz

cat /proc/asound/cards
arecord -l  # vypíše karty, co mají vstup - mikrofon
aplay -l  # vypíše karty, co mají výstup - je možné tam něco přehrát.

již sice přestal problémovou integrovanou kartu uvádět. USB zařízení stále uvádělo pod číslem 1, nultá a hlavní zvuková karta neobsazen. A co více. příkaz

alsamixer
# cannot open mixer: No such device

nyní vypisuje jen „cannot open mixer“ soubor nenalezen a najde nastavovat ani jediné šoupátko našeho fungujícího USB zařízení. Nebudu to již dále natahovat. Aby se USB zvukové zařízení stalo hlavním, je třeba v souboru /etc/modprobe.d/alsa-base.conf zakomentovat následující řádek.

# Keep snd-usb-audio from beeing loaded as first soundcard
#options snd-usb-audio index=-2

Pak už jen stačí jen pomocí příkazu

alsa reload

odstranit a znovu nahrát zvukové moduly do jádra, a vše již funguje.

Jaké moduly do jádra vyžaduje naše zvuková karta, zjistíme příkazem

cat /proc/asound/cards
cat /proc/asound/modules

Pokud máte dvě zvukové karty a chcete si vybrat defaultní, můžete vybrat defaulatní pomocí zapsání do souboru alsa-base.conf např totohole.

## Creative
alias snd-card-0 snd-ca0106
options snd-ca0106 index=0
## On-board
alias snd-card-1 snd-atiixp
options snd-atiixp index=1

Defaultní je ta s index=0

Vysvětlení mých potíží? Nějakému vývojáři debianu se nejspíš nelíbil fakt, že jeho usb zařízení se po startu hlásí jako defaultní možnost a tak pomocí options snd-usb-audio index=-2 v alsa-base.conf tuto možnost potlačil. Pokud tohle chceme, musíme ono potlačení zakomentovat.

Zařízení zaneprázdněno - Device or resource busy

Po spuštení mplayer mujfilm.avi se zobrazilo následující:

[AO_ALSA] alsa-lib: pcm_hw.c:1293:(snd_pcm_hw_open) open '/dev/snd/pcmC0D0p' failed (-16): Device or resource busy
[AO_ALSA] Playback open error: Device or resource busy
Failed to initialize audio driver 'alsa'
Could not open/initialize audio device -> no sound.

Pravděpodobně je zvukové zařízení zaneprázdněno, protože jej používá jiná aplikace s výhradními právy. Která konkrétně aplikace to je, zjistíme pomocí příkazu lsof. Příkaz lsof vypíše seznam aplikací, které mají otevřeny tento soubor (tohle zvukové zařízení).

lsof /dev/snd/pcmC0D0p
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chromium 1578 xsouku04  mem    CHR  116,6          7458 /dev/snd/pcmC0D0p
chromium 1578 xsouku04   27r   CHR  116,6      0t0 7458 /dev/snd/pcmC0D0p

Pokud žádný takový program není, program nevrátí nic. (vrátí prázdno)

V našem případě vidíme, že zvukovou kartu si uzmul webový prohlížeč chromium. Ve skutečnosti to byl flashplayer uvnitř chromium. Pokud chromium vypneme, problému se zbavíme.

Ubuntu?

V ubuntu se údajně mění defaultní zvuková karta pomocí

sudo asoundconf list
# abychom věděli co je k dispozici
sudo asoundconf set-default-card Live

Pozor, kreténi to z nejnovějších verzí oddělali, takže nyní je to opravdový ubuntu chaos

Archlinux

Kvalitní poznámky ve wiki mohou pomoci i uživatelům jiných distribucí, než je arch.

https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture

asoundconf-gtk

Jakou aplikaci ?

Nyjí již máte kvalitní zvuk i mikrofon. Kterou aplikaci použít na telefonování přes internet pomocí SIP? Podívejte se na náš návod a filmeček pro námi doporučovaný program twinkle.

Modul zlobivec

Občas se mi modul kousne a není slyšet žádný zvuk. Vypadá to, že se to stává, když použiji suspend to ram. Je třeba jej unload (nevím, jak se to řekne česky) a znovu nahrát do jádra.

lsmod|grep snd

uvidím počet použití. Pokud je použit provedu

rmmod -w snd_hda_intel

parametr -w znamená čekej až nebude používaný. a zabiji flashplayer nebo jinou aplikaci (ta se dá i vypnout). potom znovu zavedu modul. Nemusím tak restartovat prohlížeč, ten si flashplayr pustí znovu.

modprobe snd_hda_intel

a zvuk už jde.

 
stranky_uzivatelu_4smart/vyber_defaultni_zvukove_karty.txt · Poslední úprava: 2015/08/20 16:26 autor: misa