Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aus wav-datei lesen und in neue wav-datei speichern
Hallo Freunde der Sonne, ich möchte ein Programm schreiben, daß aus wav-Dateien eine Datensequenz ausliest und diese in eine eigenständige neue wav-Datei speichert. Leider weiß ich nicht so recht, wie ich an das Problem herangehen soll, und brauchbare Beispielcodes finde ich auch nicht. Hätte jemand Tipps für moich zur Umsetzung? Ich wäre sehr dankbar!
Mir ist nicht so recht klar, wie ich in wav-dateien lesen und wie ich sie überhaupt erstellen/schreiben soll.
Ich habe im Internet ein Beispiel gefunden, wie man eine wav-Datei erstellt, allerdings arbeitet dieses mit Threads und allgemein arbeitet es unverständlich:
Java:
import javax.sound.sampled.*;
import java.io.*;
/**
* A sample program is to demonstrate how to record sound in Java
* author: www.codejava.net
*/
public class JavaSoundRecorder {
// record duration, in milliseconds
static final long RECORD_TIME = 60000; // 1 minute
// path of the wav file
File wavFile = new File("E:/Test/RecordAudio.wav");
// format of audio file
AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
// the line from which audio data is captured
TargetDataLine line;
/**
* Defines an audio format
*/
AudioFormat getAudioFormat() {
float sampleRate = 16000;
int sampleSizeInBits = 8;
int channels = 2;
boolean signed = true;
boolean bigEndian = true;
AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits,
channels, signed, bigEndian);
return format;
}
/**
* Captures the sound and record into a WAV file
*/
void start() {
try {
AudioFormat format = getAudioFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
// checks if system supports the data line
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Line not supported");
System.exit(0);
}
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start(); // start capturing
System.out.println("Start capturing...");
AudioInputStream ais = new AudioInputStream(line);
System.out.println("Start recording...");
// start recording
AudioSystem.write(ais, fileType, wavFile);
} catch (LineUnavailableException ex) {
ex.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/**
* Closes the target data line to finish capturing and recording
*/
void finish() {
line.stop();
line.close();
System.out.println("Finished");
}
/**
* Entry to run the program
*/
public static void main(String[] args) {
final JavaSoundRecorder recorder = new JavaSoundRecorder();
// creates a new thread that waits for a specified
// of time before stopping
Thread stopper = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(RECORD_TIME);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
recorder.finish();
}
});
stopper.start();
// start recording
recorder.start();
}
}
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
Lese ich das richtig oder bindet er hier eine ausführbare Klassendatei ein?
Thread stopper = new Thread(new Runnable() {
Runnable ist ein Interface, wie kann man von einem Interface ein Objekt erzeugen?
Ehrlich gesagt ist das nicht wirklich unverständlich sondern sogar ziemlich einfach. Allerdings wird hier auch keine .wav datei gelesen sondern geschrieben. Was Du willst ist ja ganz was anderes.
Warum liest du nicht einfach mal was einführendes statt dir irgendwelchen Code aus dem Internet zu suchen den du eh nicht verstehst?
Wie ich bereits sagte. Lesen bildet. Wenn Du keine Lust dazu hast dann kann ich auch nicht helfen.... Auf der Seite stehen alle notwendigen Infos aber nur das Kopieren des Codes bringt dir da genau so wenig wie überall anders auch... Ich bin dann raus.
Die Klasse WaveFile plus zugehörige Exceptions kannst du dort aber downloaden. Also ist alles da was du brauchst. Falls es dir nur um wav-Dateiene geht und nicht um beliebige Audio-Dateien.
"Nein er übergibt eine Typinformation"
Aber warum ist die Typdefinition eine class-Datei? Das Wort "class" wird sogar farbig makiert, und mir wurde auch beigebracht, dass sich Namen und Bezeichner niemals aus Schlüsselwörtern zusammensetzen dürfen: Ich verstehe das nicht
Das mit dem Download habe ich später noch bemerkt, das funktioniert auch alles, aber nur fehlerhaft in der Programmausführung.
Das Wort "class" wird sogar farbig makiert, und mir wurde auch beigebracht, dass sich Namen und Bezeichner niemals aus Schlüsselwörtern zusammensetzen dürfen: Ich verstehe das nicht