LinuxSound

aus ThiesenWiki, der freien Wissensdatenbank

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Getting rid of OSS

Warum Linux Sound immer noch Suckt

Obwohl Linux seit 2.6 ALSA endlich mit im Kernel hat ist Sound Handhabung immer noch schrecklich. Das liegt im großen und ganzen am OSS. Das (alte) Open Sound System hatte seine vorteile (im letzten Jahrtausend) hat aber ein großes Problem, sound Zugriff passiert über eine device node (/dev/dsp) und darauf kann halt nur einmal schreibend zugegriffen werden. ALSA muss diese Probleme alle nicht haben, hat aber ein OSS Emulationslayer, das auch über /dev/dsp ansprechbar ist. Das ist scheiße, weil damit ALSA den gleichen Beschränkungen unterliegt. Das tut es zwar auch ohne das OSS Emulationslayer, allerdings kann man an dieser Stelle mit dem "dmix" Plugin so einiges reißen und den Desktop Sound Daemons (ala artsd bei KDE oder esd bei GNOME) das überlassen was sie eigentlich machen sollen, nämlich desktop Sounds ausgeben. Schritt 1: Erklärtes Ziel ist ersteinmal /dev/dsp loszuwerden. Dazu soll man im Linux Kernel die Optionen CONFIG_SND_PCM_OSS und CONFIG_SND_SEQUENCER_OSS abstellen. Den Mixer kann man an lassen, da konkurierende Mixerzugriffe nicht so häufig vorkommen wir konkurierende Soundzugriffe. Wenn man den damit kompilierten Kernel bootet sollte

cat /dev/dsp

folgendes Output verursachen:

cat: /dev/dsp: No such device

Wenn man schon bei Kernel ist: es reicht vollkommen die ganzen Sound sachen als Module zu kompilieren. Bei mir sieht das so aus:

marcus@mobilHal:~: cat /usr/src/linux/.config | grep SND
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
# CONFIG_SND_PCM_OSS is not set
# CONFIG_SND_SEQUENCER_OSS is not set
CONFIG_SND_RTCTIMER=m
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_MPU401_UART=m
CONFIG_SND_DUMMY=m
CONFIG_SND_VIRMIDI=m
marcus@mobilHal:~: lsmod | grep snd
snd_mixer_oss          16256  1
snd_intel8x0           25128  4
snd_ac97_codec         55760  1 snd_intel8x0
snd_pcm                65288  2 snd_intel8x0
snd_timer              18308  3 snd_pcm
snd_page_alloc          6024  2 snd_intel8x0,snd_pcm
snd_mpu401_uart         5120  1 snd_intel8x0
snd_rawmidi            17060  1 snd_mpu401_uart
snd_seq_device          5128  1 snd_rawmidi
snd                    36452  11   
snd_mixer_oss,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device
soundcore               5472  2 snd

So jetzt kann uns wenigstens keiner mehr die Device klauen. Man sollte auch sicherstellen das die Userspace Programme alle richtig installiert und vorhanden sind, bei Debian z.B.

marcus@mobilHal:~: dpkg -l | grep alsa-
ii  alsa-base      1.0.6a-9       ALSA driver configuration files
ii  alsa-headers   1.0.6a-9       transitional package that can be safely remo
ii  alsa-utils     1.0.6-4        ALSA utilities

Jetzt zu "dmix". Dmix ist ein Plugin für ALSA das dafür sorgt, das mehrere Output streams überlagert werden, sprich man mehrere Sounds zur gleichen Zeit ausgeben kann. Dafür muss man ALSA konfigurieren dies zu tun. Entweder unter /etc/asoundrc systemweit oder unter $HOME/.asoundrc für den jeweiligen Benutzer (Beachte: wenn man es "nur" für den eigenen Benutzer macht und dann Sound als root ausgibt blockiert das immer noch). Es kann sein das die Dateien nicht existieren, wenn dies der Fall ist können sie ruhig angelegt werden. Das ganze sollte ungefähr so aussehen:

marcus@mobilHal:~: cat .asoundrc
pcm.!default {
       type plug
       slave.pcm "mypcm"
}
pcm.mypcm {
       type dmix
       ipc_key 50558
       slave {
               pcm "hw:0,0"
               period_time 0
               period_size 1024
               buffer_size 32768
               rate 44100
       }
}

Das "pcm.!default" leitet die Default Ausgabe, die 99,999% aller Programme nutzen, auf das slave-pcm "mypcm" um. Dieses ist vom type dmix, benutzt also das dmix Plugin. Der ipc_key ist nicht besonders wichtig, er muss nur Unique sein. Die einstellungen unter Slave beziehen sich auf die Soundkarte selber. Das Einzige was hier zu ändern sein könnte ist das "pcm", was die hardware addresse der soundkarte angibt und die buffer_size, die Festlegt wieviel gepuffert werden soll bevor das output kommt. Sollten bei hoher Auslastung des Systems Lücken im Audio entstehen, sollte man mit diesem Wert experimentieren. Jetzt sollte man mit "alsaplayer" schon mehrere Outputstreams ausgeben können (zwei Soundfiles gleichzeitig abspielen). Desweiteren zu den einzelnen Applikationen:

XMMS

Einfach das ALSA Output Plugin Nutzen

MPlayer

mplaye -ao alsa1x oder -ao alsa benutzt default zum ausgeben, sollte also auch funktionieren.

KDE (Arts)

Einfach als output Alsa wählen.

Alles andere

Wenn sich etwas nicht dazu übereden lässt direkt über ALSA auszugeben (was man an Fehlermeldungen die sich auf /dev/dsp beziehen erkennt) sollte man mit "aoss" starten, was dann irgendwie die Applikation dazu verleitet ebenfalls direkt auf ALSA zuzugreifen. (z.B. "aoss play /some/sound/file.mp3")

Weitere informationen gibt es auf dieser Seite: http://alsa.opensrc.org/index.php?page=DmixPlugin








[l_sp_25]

no teletrack payday loans dupont laminate flooring flooring laminate pergo ringtone selena manson marilyn ringtone ics payday loan

actos met plus adalat xl adalat cc altace and hair thinning arava side effects atarax hydroxyzine


'Persönliche Werkzeuge