Soundkarte; Codec

darkeye2

Bekanntes Mitglied
Hallo,

hab im moment ein paar allgemeine Fragen, hab schon mehrere Stunden gegoogelt, aber nix hilfreiches gefunden.

Da man mit Java ja sound wiedergeben kann (speziel jetzt wav dateien, ohne externe bibliotheken), ist anscheinend eine Schnittstelle zur Soundkarte oder zumindest zu einer OS bibliothek vorhanden, über die java mit der soundkarte komunizieren kann, diese such ich im moment, da ich viel mit ton rumprobiere und gerne so nah wie es mit Java möglich ist an die Soundkarte dran will.
Falls jemand verstanden hat, was ich meine würde ich mich über Infos sehr freuen.

Desweiteren suche ich informationen darüber, wie genau Codecs programmiert werden, speziell am beispiel eines mp3 codecs, bitte nicht auf bereits vorhandene (z.b. lame) verweisen, es geht rein um informatieve zwecke, deswegen würde ich sowas mal gerne selbst programmieren, oder es mal genauer anschauen. Suche hierzu hilfreiche links und nach möglichkeit kleine code bsp. oder auch erklärungen zum Thema.

MfG
darkeye
 

hansmueller

Bekanntes Mitglied
Hallo,

du könntest dir ja den Quellcode des JDKs anschauen (javax.sound; in der src.zip).
Oder du suchst dir ein OpenSource-Projekt für mp3 was in Java gemacht wurde und siehst dir davon den Quellcode an.

MfG
hansmueller
 
T

tuxedo

Gast
Da man mit Java ja sound wiedergeben kann (speziel jetzt wav dateien, ohne externe bibliotheken), ist anscheinend eine Schnittstelle zur Soundkarte oder zumindest zu einer OS bibliothek vorhanden, über die java mit der soundkarte komunizieren kann, diese such ich im moment, da ich viel mit ton rumprobiere und gerne so nah wie es mit Java möglich ist an die Soundkarte dran will.
Falls jemand verstanden hat, was ich meine würde ich mich über Infos sehr freuen.

Ich meine du hast es selbst nicht ganz verstanden :)

Die Sound-Unterstützung ist afaik über die JVM selbst realisiert. Ohne native Calls kommt java da sonst nicht ran. Und damit man das dann mit Java benutzen kann, gibt es eine API dazu. Die Java Sound API.
Noch mehr low-level geht mit reinem Java-Code nicht. Aber ich denke das ist schon low-level genug. Du kannst immerhin den Stream zur Soundkarte bis auf's letzte Datenbyte beeinflussen.
Weitere Details zur Sound API und nützliche Beispiele gibts hier:
Java Sound Resources (das ist die einzige und größte mir bekannte Webseite zu diesem Thema).

Wenn das noch immer nicht ausreicht: Puuh, dann bleibt dir nur JNI und nen eigenen Soundkartentreiber ...

Desweiteren suche ich informationen darüber, wie genau Codecs programmiert werden, speziell am beispiel eines mp3 codecs, bitte nicht auf bereits vorhandene (z.b. lame) verweisen, es geht rein um informatieve zwecke, deswegen würde ich sowas mal gerne selbst programmieren, oder es mal genauer anschauen. Suche hierzu hilfreiche links und nach möglichkeit kleine code bsp. oder auch erklärungen zum Thema.

Naja, findest du nicht dass das Thema MP3 für den Einstieg doch etwas zu groß ist?

Bei Codecs musst du zwischen verlustfreien und verlustbehafteten Codecs unterscheiden. MP3 ist so ein verlustbehafteter codec. Hier wird, vereinfacht gesprochen, alles im nicht wirklich hörbaren Frequenzbereich "entfernt" und somit die Datenmenge veringert. Man könnte hier ganz abstrakt noch das Bildformat JPEG heranziehen. Hier werden auch verlustbehaftet Bildinformationen entfernt und der Rest komprimiert.

Im Gegenteil dazu gibts noch den FLAC ... Free Lossless Audio Codec. Der komprimiert die Audiodaten ohne dass er etwas wegschneidet/weglässt. Ganz grob kann man das mit ZIP vergleiche. Du packst die Daten und im Idealfall wird die ZIP kleiner als die Summe aller gepackten Dateien. Nach dem entpacken hast du wieder genau deine Dateien. Es fehtl keine und die Daten sehen exakt so aus wie vor dem packen.

So. Jetzt darfst du dir - wenn du nen eigenen Codec basteln willst - wie du die vielen Bytes die an die Soundkarte gehen (oder bei der Aufnahme von der Soundkarte kommen) komprimierst. Und das ganze möglichst in Echtzeit. Denn niemand würde eine MP3 vor dem Anhören "auspacken" wollen.

Alles in allem: Audiocodecs kann man sicher auf niederem Niveau mit geringer Kompression und Effizient selbst basteln. Zum üben und "verstehen". Einen eigenen Codec basteln der es auch nur im entferntesten mit MP3 und Co. aufnehmen kann.... Naja, fang mal mit nem entsprechenden Studium an. Ne Mischung aus Mathematik, Physik und Informatik wäre hier gar nicht so verkehrt.

- Alex
 

darkeye2

Bekanntes Mitglied
schon mal danke für die Antworten!
@tuxedo
Genau danach hab ich gesucht, nur anscheinend mit falschen Suchbegriffen, noch näher ran will ich auch gar nicht (war ja klar, dass java nicht direkt auf die soundkarte zugreifen kann, sondern über in der jvm enthaltene native methoden).

Die Seite sieht auch vielversprechend aus.
 

Ähnliche Java Themen

Neue Themen


Oben