Patrick Hess <patrick_hess(at)t-online.de> wrote:
> Oliver Fromme schrieb:
> > Ja, das funktioniert aber dann auch nur mit Programmen,
> > die die entsprechende API verwenden. Irgendein beliebiges
> > programm, da selbst direkt auf /dev/dsp zugreifen will,
> > funktioniert damit natürlich nicht.
>
> Hmm, nehmen wir mal als Beispiel den XMMS. Der hat normalerweise
> nichts mit dem artsd zu tun. Habe ich den artsd laufen (lasse ihn
> also /dev/dsp blockieren), weigert sich der XMMS, irgendwas
> abzuspielen, weil das DSP-Device schon belegt sei.
>
> Rufe ich nun den XMMS dagegen mittels "artsdsp xmms" auf, läuft die
> Soundausgabe über artsd - der artsdsp muß also die Soundausgabe des
> XMMS abfangen können, an den artsd weiterleiten, der das ganze
> wiederrum mit eventuellen anderen Sounds zusammenmischt und dann
> auf dem DSP-Device ausgibt.
Ich kenne das Ding nicht, aber ich vermute, daß das artsdsp
die I/O-Calls (open(), write(), ioctl() usw.), die norma-
lerweise von der libc gehandhabt werden, abfängt und schaut,
ob da auf /dev/dsp zugegriffen wird. Falls nicht, wird der
Zugriff durchgeleitet, falls ja, verleibt sich artsdsp die
Daten selbst ein.
Daß das tierisch ineffizient ist, sollte wohl einleuchtend
sein. Insbesondere die ioctl()-Calls, mit denen man z.B.
Samplerate und -größe und die Buffergröße einstellen sowie
die aktuelle Abspielposition abfragen kann, dürften äußerst
aufwendig zu emulieren sein, sofern das das artsdsp über-
haupt versucht. Damit kommt bestimmt nicht jedes Programm
problemlos zurecht.
Etwas ähnliches macht übrigens das tcpwrapper-Tool, mit dem
man Programmen die tcpwrapper-Funktionalität verpassen
kann, wenn sie nicht direkt darauf vorbereitet sind. Es
fängt halt den listen()/accept()-Call ab, um dort seine
Tests einzuschieben.
> Das zieht natürlich CPU-Leistung wie verrückt,
Kann ich mir denken.
> > Daher finde ich das Konzept besser, das Zusammenmischen dem
> > Kernel zu überlassen
>
> Interessant - kann der das "einfach so" oder muß man da was im
> Kernel aktivieren? Von dieser Möglichkeit habe ich bisher gar
> nichts gewußt. Da werde ich wohl gleich ein bißchen probieren.
Dazu kam grade kürzlich was in dieser Liste. Ich weiß es
nicht aus'm Kopf -- wie gesagt, ich brauchte dieses
Feature noch nie. Aber gib doch einfach mal »sysctl hw.snd«
und »ls -l /dev/dsp*« ein; ich denke, das bringt Dich schon
auf die richtige Spur.
Gruß
Olli
-- Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München Any opinions expressed in this message may be personal to the author and may not necessarily reflect the opinions of secnetix in any way. "Clear perl code is better than unclear awk code; but NOTHING comes close to unclear perl code" (taken from comp.lang.awk FAQ) To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Fri 20 Jun 2003 - 23:21:13 CEST