# JMF Lautstärke an Stelle ermitteln und .wav cutten



## Jakarta (22. Nov 2010)

Guten Abend/Morgen,

Ich versuche ein Programm zu schreiben, dass automatisiert lange .wav-Files in kleinere Dateien zerlegt.
Das ganze soll aber nur an Stellen passieren, wo bisher Silence herscht. Wenn ein Lied also 14min dauert, er aber aufgrund meines Codes meint nach 10min schneiden zu müssen, dann soll er trotzdem die 14min warten (und die Zeit später wieder reinholen).

Gibt es eine Möglichkeit bei JMF die anliegende Lautstärke zu ermitteln?
Ich habe ein wenig in der API gestöbert und die Methode getDB() gefunden. Die gibt aber immer 0.0 zurück.
[JAVA=19]Player audioPlayer = Manager.createRealizedPlayer(audioFile.toURL());
GainControl gain = audioPlayer.getGainControl();
audioPlayer.realize();
audioPlayer.start();
Thread.sleep(5000);
System.out.println(gain.getDB());
[/code]
Dieses war der erste Streich, ..

Kann man mit dem JMF .wav Dateien zerteilen?
Oder muss ich casten und dann kompliziert teilen?

Bietet sich für mein Problem überhaupt das JMF an? 
Es scheint ja schon einiges zu können, aber der Schwerpunkt scheint auf dem Player zu liegen.
Gibt es zur reinen Bearbeitung, ohne Wiedergabe, andere APIs?

Grüße
Jakarta


----------



## Ralph-Uwe (23. Nov 2010)

Moin

die Lautstärke ist in der Sounddatei selber gespeichert, die Datenwerte geben die Amplitde an.
Über GainControl wird die Verstärkung angegeben, mit der das Musikstück abgespielt wird.

Bei einer Verstärkung von 0.0 wird das Musikstück in der Lautstärke abgespielt wie in der Datei
gespeichert.
Da Du die Verstärkung nicht geändert hast, ist sie über das gesamte Musikstück bei 0.0 liegen.

Ein Sounddatei besteht aus mehr Daten als nur die reine Musik 
RIFF WAVE ? Wikipedia
wenn Du eine Datei splittest, muß jeder Teil wieder mit dem Dateikopf versehen werden,
sonst kann kein Player die Dateien abspielen.


----------



## Jakarta (23. Nov 2010)

Hallo Ralf-Uwe,

Vielen Dank erstmal für deine Antwort. 

Dann werde ich mit GainControl nicht weit kommen.
Gibt es bei JMF eine andere Möglichkeit Silence zu ermitteln?

Das mit dem .wav war mir klar.
Deswegen würde ich mich freuen, wenn mir jemand eine API benennen kann, die mir die Header automatisch erzeugen kann.
Das ganze per Hand ist mir ein wenig zu umständlich.
Wäre natürlich schön, wenn JMF das könnte, aber je länger ich durch die Dokumentation schaue, umso unsicherer bin ich, ob die JMF meinen Anforderungen gerecht wird.

Hat hier jemand vielleicht eine andere Sound API verwendet und kann zu ihr etwas sagen? :bahnhof:

Gruß
Jakarta


----------



## Ralph-Uwe (23. Nov 2010)

Hallo,

ich bin mir nicht sicher, ob Du das überhaupt mit JMF machen mußt bzw. kannst.

Vielleicht macht es mehr Sinn sich das .wav Format genauer unter die Lupe zunehmen.

Dann kannst Du die .wav Datei byteweise auslesen:
den Kopf von den Daten trennen, den Datenbereich 
in die einzelnen Musikstücke teilen und anschließend
die einzelnen Teile wieder zusammen bauen. Sprich neuer Kopf mit dazugehörigen Datenteil.

Ich bin mir nicht sicher, aber ich glaube, dass für jede Teildatei der Kopf neu angepasst werden muss
zumindest Teilweise.

Um die Trennstellen zufinden, müssten im Datenbereich Stellen zufinden sein, in dem sich die Werte
über eine bestimmte Zeit kaum ändert und relativ niedrigen sein müßten.


----------



## Jakarta (23. Nov 2010)

Nabend,

Wenn es dazu bisher keine APi gibt, muss ich das wohl byteweise auseinander nehmen.
Bin grad dabei mir .wave Dateien in dem TinyHexer anzusehen, den ich zum Glück schon oft benutzt habe.
Sonst wäre mir das wohl zu viel Arbeit ;-)
Wave-Spezifikation auch offen: Dann kann es wohl losgehen.

Wenn jemand doch noch eine API kennt, die das Problem schon gelöst hat, nur her damit :toll:

Gruß
Jakarta


----------



## Ralph-Uwe (23. Nov 2010)

Wenn Du was brauchbares hin bekommen hast, kannst Du uns ja
mal dran teilhaben lassen.

Ansonsten viel Erfolg


----------



## Jakarta (24. Nov 2010)

Ich habe angefangen und der AUfbau der RIFF Waves ist mir jetzt klar.
Sonderlich kompliziert ist das ja wirklich nicht.

Ich habe jetzt erste Methoden zum Einlesen des Wave-Headers, der einem alles wichtige ausgibt.
Länge, Bitrate, Kanalanzahl usw.

Als nächstes sehe ich mir mal an, wie der tatsächliche Sound aufgebaut ist für die Silence-Erkennung.

Wo ich mir hier grad meinen "Code" ansehe, denke ich nicht, dass ich den hier veröffentlichen sollte.
Der genügt keinerlei Ansprüchen und ist bisher rein funktional.
Schön hin und her gecastet 

Naja, ggf optimiere ich das ganze zum Schluss ja noch, sodass man das wirklich als Hilfe/Denkansatz ansehen kann.^^

Tschöö mit ö


----------

