# Eigenes AudioDevice (Mixer) einbinden



## Spacerat (11. Mrz 2009)

Nach ausgiebiger Suche per Google sowie einer finalen Recherche auf der vergangenen CeBit hoffe ich, das sich hier jemand damit auskennt oder zumindest schon mal selbst etwas ähnliches unternehmen wollte. Es geht um die Einbindung eines AudioDevices (Mixer bzw. MixerProvider) in Java.
Laut Recherche soll es funktionieren, das man die "sound.properties" entsprechend editieren kann, um auf ein eigenes (Standard) Device zu verweisen. Etwa so:
	
	
	
	





```
javax.sound.sampled.Clip=mylib.sound.dolbysurround.DolbySurroundAudioDeviceProvider
javax.sound.sampled.Port=mylib.sound.dolbysurround.DolbySurroundAudioDeviceProvider
javax.sound.sampled.SourceDataLine=mylib.sound.dolbysurround.DolbySurroundAudioDeviceProvider
javax.sound.sampled.TargetDataLine=mylib.sound.dolbysurround.DolbySurroundAudioDeviceProvider
```
Das AudioDevice muss dann noch zur Boot-Time samt allen Libs und DLLs verfügbar sein (Verzeichnisse $JAVA_HOME/bin und $JAVA_HOME/lib). Das Device sollte dann in der Liste von "AudioSystem.getMixerInfo()" auftauchen, aber genau da beginnt das Dilema.
Obwohl mein Device, welches auf JOAL basiert, fehlerfrei funktioniert, wenn man es "von Hand" instanziert, steht es trotzdem nicht in dieser Liste. Mein Problem besteht nun eigentlich erstmal darin, das ich nicht mal weis, was da alles schief geht, mangels Info über z.B. eine "Java-Boot-Log-Datei" (gibt's sowas? wenn ja, wo?). Deswegen kann ich leider auch keine Fehlermeldungen liefern. Hoffe es gibt hier jemanden, der mir helfen kann.


----------



## Abt Ploutôn (11. Mrz 2009)

Hallo,
wenn ich es richtig verstanden habe, läuft dein Device, aber wenn es aus automatisch am Start mitstarten lässt, nicht mehr? Wenn ja, wäre es dann vielleicht ne Idee, dass etwas später zu starten?
Ne andere Möglichkeit wäre auch, dass der deine uneditierte sound.properties igoniert, da könnte man ja mal nonsins eintragen, damit der abstürzt und man weiß, dass er überhaupt die richtige Datei liest.

Also ne richtige "Java-Boot-Log-Datei" ist mir auch nicht bekannt, ich weiß nur, dass das spannende Mac Programm Console alles mögliche immer von sich gibt, wenn man irgendwas startet. Aber wenn die Leute keine Protokollierung vorgesehen haben, wirst auch keine geben. Wenn sie ne logging drinne haben, die aber bloß nicht anzeigen, kannst ja mal in <java_home>/jre/lib/logging.properties stöbern, ob du da fündig wirst.

Gruß Sven


----------



## Spacerat (11. Mrz 2009)

Naja... das mit dem "später starten" löst es auch nicht zufriedenstellend. Im Prinzip teste ich das Teil ja so und weis deswegen auch das es funzt. Ich wollte aber eigentlich, das es transparent über "AudioSystem" wie das "DirectAudioDevice" bedient werden kann.
Trotzdem danke für den Versuch der Hilfe. Angesichts der kargen Doku des Sound-APIs (diesbezüglich), kann man niemandem einen Vorwurf machen, wenns mit der Hilfe mal nicht klappt.


----------



## Spacerat (12. Mrz 2009)

Sooo... nach einigen weiteren Experimenten und nachvollziehen von eigens dekompiliertem Code, habe ich nun rausfinden können, das die editierte "sound.properties"-Datei korrekt gelesen wird. Das Problem ist, das mein Device offensichtlich nicht als "sun.misc.Service" durchgeht. Zumindest taucht es nicht in der Liste (Iterator), welche man durch "Service.providers(MixerProvider.class)" erhält, auf. Ich nehme mal an, das nun noch ein anderes API ausser "javax.sound.sampled" für mich interessant wird. Kann mir aber nicht vorstellen was für eines. Was mich nun noch mehr verwirrt, ist die Tatsache, das ein Extension-API auf Klassen zugreifen darf, die eigentlich mehr oder weniger "tabu" sind. Seit wann sind denn "javax"-Extensions ausschliesslich für die SUN-JVM konzipiert? Was solls. Vllt. kann mir wenigstens jemand mitteilen, mit welchem API man solche Service-Providers erstellt. Schon mal danke für die Mühen.

@Edit: Wenn man nicht weis was man wo suchen soll, kanns schon mal etwas länger haken... z.B. wenn man nicht weis, was "xyz.abc.spi"-Pakete bedeuten. Sucht man Service-Provider-API hat man natürlich fast verloren. Für alle die mir aus purer Unwissenheit nicht helfen konnten sowie jene die es interessiert: SPI (Service-Provider-Interface) heisst das Zauberwort. Kurz gesagt... Thema gelöst...


----------

