Eigene Sounddateien schreiben

centrax

Mitglied
Hallo Forum,

habe schon ein ähnliches Problem gehabt, habe mich jetzt aber der Materie mehr genähert.

Ich möchte in einem JAVA-Programm folgendes machen:
Ich will eigene Sound-Dateien (.wav) schreiben. Und zwar habe ich eine beliebige Anzahl an bereits vorhandenen .wav-Dateien, und will diese jetzt sozusagen in einer Datei (nacheinander gereiht) speichern.

Java:
AudioInputStream[] zuVerkettendeStreams;

Die Klasse AudioSystem bieten mir die Möglichkeit, über die Methode write(...) einen AudioInputStream zu speichern.

Mein Problem ist jetzt:
Wie bekomme ich die Daten aus meinen zu verkettenden Streams gebündelt in einen eigenen AudioInputStream? Oder muss ich das anders machen?

Freue mich über jede Hilfe.

Liebe Grüße,
centrax
 
Danke!

Das ist klasse, genau das was ich gesucht habe!
Hätte man nach "join" oder "concat" suchen sollen...

Aber jetzt gibt es noch ein zweites Problem:

Ich werde die Files nicht nur als InputStream brauchen...

Ich möchte über eine SourceDataLine die Informationen des data-chunk einlesen (also die Byte-Arrays, die die Samples beinhalten) und verändern.

Ich habe also jetzt Byte-Arrays von WAV-Dateien, die ich leicht abändere. Und diese WAV-Dateien möchte ich jetzt abgeändert neu speichern. Kann ich das auch machen, ohne das ganze selbst im WAV-Format zu speichern?
 
Wenn du wirklich nur die Rohen Daten lesen und schreiben willst, mit sowas wie
Java:
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte buffer[] = new byte[8192];
        int readBytes = 0;
        while((readBytes = inputStream.read(buffer, 0, buffer.length)) > 0)
        {
            baos.write(buffer, 0, readBytes);
        }
        baos.flush();
        byte data[] = baos.toByteArray();
Dann data ändern, und analog dazu wieder rausschreiben.
 
Das wäre schon möglich, aber ich muss ja mehr aufschreiben, als die Byte-Arrays. Es soll ja eine WAV-Datei werden, und da sind die ersten Stellen erst Info, wie Sampling-Rate/-Länge etc.
Das würde bei der Methode fehlen...
 
Mit dem Code wird der gesamte Inhalt der Datei gelesen - ob und inwieweit sich das von dem unterscheidet, was du ändern willst (oder ob es mehr ist, als du ändern willst, kannst oder solltest) weiß ich nicht - das hängt mit dem genauen Forma von WAV-Dateien zusammen (das ich nicht kenne).
 
Ich will an Sounddateien folgendes ändern:

- Länge
- Lautstärke
- Frequenzen

Ich glaube nicht, dass das dann so einfach über einen ByteArrayOutputStream funktioniert...
 
Die Länge kann man ja kaum ändern, ohne den eigentlichen Inhalt zu verändern. Die Lautstärke könnte noch relativ leicht sein, ich hatte mal irgendwann mit sampled sound rumprobiert, und ich meine, das wäre nur eine Multiplikation aller Werte in irgendeinem (byte?)-Array gewesen. Aber vor allem sowas wie die Änderung der Frequenzen ist wohl nicht trivial. Sorry, aber konkretere Hinweise als den Verweis auf Overview of the Sampled Package (The Java™ Tutorials > Sound) kann ich da spontan auch nicht geben (unter "Processing Audio with Controls" steht dort zumindest was zur Lautstärke)
 
Leider ist das nicht das, wonach ich Suche.

Mit Controls ändert man ja nicht die Sounddatei an sich, sondern wie sie abgespielt wird. Ich möchte wirklich die Sounddatei an sich ändern und die geänderte Datei dann speichern.

Ich muss - so wie es aussieht - wirklich ganz roh mit den Byte-Arrays arbeiten, weil die Sound-API von Java da nichts zur Verfügung stellt. Und diese Byte-Array-Daten muss ich dann in eine funktionstüchtige WAV-Datei speichern.
Und dafür habe ich keinen Ansatz... ???:L
 
Nabend,

schau Dir mal das .wav Format an:
RIFF WAVE ? Wikipedia

Der Dateikopf einer Wavedatei ist 44Byte groß und beinhaltet alle Informationen, die zum
Abspielen notwendig sind.
Danach folgt der Datenteil.

Lies die Dateiköpfe der Dateien aus, speichere die Datenteile hintereinander und
stelle einen geänderten Dateikopf voran.

Wenn alle Wavedateien gleich aufgenommen sind, sollte das funktionieren, wenn nicht
müssten die einzelnen Wavedateien auf einen "gemeinsamen Nenner" gebracht werden.

Ich hoffe, dass hilft Dir weiter!

Gruß
 

Neue Themen


Zurück
Oben