# Windows Sound Aufnehmen



## java1Ec (27. Mrz 2012)

Hallo zusammen!
Ich hab mir ein kleines Projekt vorgenommen, es soll darum gehen das ich meinen Kompletten Windowssound, also alles was man aus den Lautsprechern hören wird, über das Netzwerk an einen anderen Rechner schicke, da dieser an die Lautsprecher angeschlossen sein wird.
Kurz gesagt *will ich mein Audio zu einem anderen Rechner schicken*.
Jetzt geht es aber noch gar nicht um die Netzwerkprogrammierung sondern um die Aufnahme.
Ich habe mir die JMF und einige Java Klassen dazu angeguckt jedoch habe ich nicht gefunden wie man den *systemsound aufnehmen* kann.

Ich würde mich freuen wenn ihr ein paar Ratschläge für mich hättet!

lg


----------



## tuxedo (27. Mrz 2012)

Dein Vorhaben ist machbar. Nur leider ist das nicht so einfach. Die meisten APIs (und die Java Sound API, und JMF wohl auch) gehören zu der Kategorie, welche die vorhandenen System-Mixer benutzt. Da gibt es Eingabe und Ausgabeleitungen. Normalerweise nimmt man die Eingabe-Leitungen/Kanäle zum Aufnehmen. Dazu gehören Mikrofon und Co. 
Du versuchst nun eine Ausgabeleitung als Eingabeleitung zu benutzen. Und eben da wird's schwer. 

Eine konkrete Lösung hab ich nicht. Leider. Aber mit JNI und Co. ist das sicher machbar. Mit Java-Bordmitteln ist es afaik nicht möglich. Ob's mit JMF geht bezweifle ich noch.

Wär's für ein Anfangsprojekt nicht einfacher das Mikrofon auf Rechner A aufzunehmen und es auf Rechner B abzuspielen? 

- Alex


----------



## irgendjemand (27. Mrz 2012)

so kompliziert ist das nicht mal ... du brauchst nur die richtigen settings ...

der windows-mixer hat als input einen special der sich "Stereo-Mix" nennt ...
wenn man diesen auswählt looped windows automatisch das was über den output "Stereo Line-Out" geht zurück an den input "Stereo Line-In" ... und diesen kann man dann mit der sound-api lesen ... dafür braucht man weder JMF noch JNI/JNA ...

ergo : so lange im mixer alles richtig eingestellt ist geht das mit der normalen SE api


----------



## tuxedo (27. Mrz 2012)

Wenn der Mixer das beherrscht. Entweder hatte ich bis dato immer die falschen Soundkarten(treiber) und mir bot sich demnach diese Option nicht, oder ich war zu doof das zu finden...


----------



## irgendjemand (27. Mrz 2012)

tuxedo hat gesagt.:


> Wenn der Mixer das beherrscht. Entweder hatte ich bis dato immer die falschen Soundkarten(treiber) und mir bot sich demnach diese Option nicht, oder ich war zu doof das zu finden...



das gibt es schon seit Win95 und ist an sich kein feature irgendwelcher treiber oder mixer ... sondern ein bestandteil der win-sound-api ...
sowas ähnliches gibt es sogar unter unix ... heißt dort glaub ich nur anderst ...

unter fast allen systemen *bis einschließlich XP MCE* im mixer ... dann auf aufnahme ... und dort dann Stereo-Mix ... unter Vista / 7 einfach rechtsklick -> aufnahmegeräte ...

ansonsten auch in jedem C-Media-kompatiblen driver-interface unter Mixer ...


----------



## Fu3L (27. Mrz 2012)

> unter fast allen systemen *bis einschließlich XP MCE* im mixer ... dann auf aufnahme ... und dort dann Stereo-Mix ... unter Vista / 7 einfach rechtsklick -> aufnahmegeräte ...



Teile bitte den spannenden Teil mit uns, nämlich wie du da mit einem Java Programm drankommst? 



> sondern ein bestandteil der win-sound-api



JNI?


----------



## irgendjemand (27. Mrz 2012)

@Fu3L
ähm ... meinen anderen post gelesen ?

da windows-"server" in der regel mit GUI laufen *ja ... jetzt erschlagt mich bitte alle mit dem argument : Win Server 8 läuft unix-like nur noch mit PowerShell ...* bzw das was TO vorhat eh ein "normales" windows system ist wird es wohl kein problem sein die 4 klicks mal eben manuell zu machen ...

das ist auf jeden fall einfacher als sich jetzt in die win-api einzulesen und dann versuchen wollen da was mit ner JNI/JNA bridge zu lösen ... der aufwand steht in keinem sinnvollen verhältnis ...


*echt freunde ... nur weil gefragt wurde wie man an den *vom system verügbaren* audio-stream kommt muss mans nich gleich so brutal-overkill machen und wirklich *alles* in java machen wollen ... manchmal reicht es auch ein paar mausklicks zu machen ...*


----------



## Fu3L (27. Mrz 2012)

Es geht doch aber gerade darum, ein Java Programm zu schreiben, um das ganze zu automatisieren und zwar vor allem, um des Programmierens willen  



> ähm ... meinen anderen post gelesen ?



Ja, aber ich glaube dir nicht, dass man kein JNI braucht, wenn mans mit einem Programm macht :bae:


----------



## java1Ec (28. Mrz 2012)

Hallo, vielen Dank erstmal!
Ich habe leider nicht ganz soo viel verstanden .. ???:L
Könnte mir vielleicht jemand in pseudocode, oder wie auch immer, sagen wie ich das realisieren kann?
Ich muss also irgendwie auf den System output zugreifen, richtig?
JMF usw können das aber nicht, richtig?


----------



## tuxedo (28. Mrz 2012)

Beispielcode für die Java Sound API gibts zu genüge hier: Java Sound Resources

Das mit dem Mixer einstellen:

Da gibts nun zwei Möglichkeiten:

1) Ich war tatsächlich zu doof diese Option zu entdecken
2) Ich hab die Option entdeckt, bin aber mit der Sound API nicht dran gekommen und weiß das ganze nur nicht mehr (verdrängt??)


Aber wie Fu3L schon schreibt: Beispielcode wie man diese "spezielle" Mixerline benutzt wäre für den TS doch hilfreich. 

Edith:
Mangels Windows kann ich's selbst nicht testen.

- Alex


----------



## irgendjemand (28. Mrz 2012)

code wie man mit der java-sound-api umgeht findet sich im sun-tutorial ... ich denke das man das mit google selbst finden sollte ...
wenn er dazu spezielle fragen hat kann er ja noch mal fragen

@Fu3L
wie gesagt ... man kann es echt overkill so machen und sich mit JNI/JNA und der win-api einen zurecht fummeln ...
aber ich denke es ist deutlich einfacher schlicht und ergreifend diese 4 mausklicks selbst zu machen ...
zu mal : sollte das ziel ein WindowsServer sein kannst du davon ausgehen das dieser keine sound-hardware besitzt ... also auch die win-sound-api ins leer greifen würde ...

@TO
naja ... "ran an das zielsystem" musst du so oder so ... oder wie willst du deine app dann darauf starten ?


----------

