Hallo, habe schon gründlich Google und das Forum abgesucht, einige Lösungsansätze gefunden und getestet, aber nichts ist wirklich zufriedenstellend:
Mein letzter Versuch:
Dieses kleine Programm soll über das Mikrofon Sound aufnehmen und in die Datei "soundfile.wav" speichern. (Ich möchte später meine Mikrofonaufnahme in ein RTP-Programm einbauen... also bitte keine tollen Tutorials wie: "Wie speichere ich Audio.").
Das Problem hierbei ist, dass ich jede Menge Störgeräusche in der WAV-Datei habe, ansonsten funktioniert es aber... wenn bei euch beim Testen keine Störgeräusche zu hören sind, sagt bescheid.
Eine andere Methode war noch statt:
eher das zu nehmen:
Nur leider kann man aus der Port-Variante keine Daten auslesen geschweige denn irgendetwas damit anfangen und das Casten nach TargetDataLine funktioniert nich (CastException).
Also was tun?
Mein letzter Versuch:
Code:
import java.io.IOException;
import javax.sound.sampled.*;
import java.io.File;
public class Main
{
public static void main(String[] args) throws IOException, InterruptedException
{
TargetDataLine line = null;
DataLine.Info info = new DataLine.Info(TargetDataLine.class, getAudioFormat());
try
{
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(getAudioFormat());
}
catch (LineUnavailableException e)
{
e.printStackTrace();
}
line.start();
AudioInputStream stream = new AudioInputStream(line);
Stopper stopper = new Stopper(line, stream);
stopper.start();
File file = new File("D:/soundfile.wav");
AudioSystem.write(stream, AudioFileFormat.Type.WAVE, file);
System.out.println("Stopped...");
System.in.read();
}
private static AudioFormat getAudioFormat()
{
AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_UNSIGNED;
float sampleRate = 8000.0F;
int sampleSizeInBits = 8;
int channels = 1;
int frameSize = 1;
int frameRate = 8000;
boolean bigEndian = false;
return new AudioFormat(encoding,
sampleRate,
sampleSizeInBits,
channels,
frameSize,
frameRate,
bigEndian);
}
}
Code:
import java.io.IOException;
import javax.sound.sampled.*;
public class Stopper extends Thread
{
TargetDataLine line = null;
AudioInputStream stream = null;
public Stopper(TargetDataLine line, AudioInputStream stream)
{
this.line = line;
this.stream = stream;
}
public void run()
{
System.out.println("Press [RETURN] to stop capturing...");
try
{
System.in.read();
}
catch (IOException e)
{}
line.stop();
try
{
stream.close();
}
catch (IOException e)
{}
}
}
Dieses kleine Programm soll über das Mikrofon Sound aufnehmen und in die Datei "soundfile.wav" speichern. (Ich möchte später meine Mikrofonaufnahme in ein RTP-Programm einbauen... also bitte keine tollen Tutorials wie: "Wie speichere ich Audio.").
Das Problem hierbei ist, dass ich jede Menge Störgeräusche in der WAV-Datei habe, ansonsten funktioniert es aber... wenn bei euch beim Testen keine Störgeräusche zu hören sind, sagt bescheid.
Eine andere Methode war noch statt:
Code:
line = (TargetDataLine) AudioSystem.getLine(info);
Code:
line = (Port) AudioSystem.getLine(Port.Info.MICROPHONE);
//bzw.
line = (TargetDataLine) AudioSystem.getLine(Port.Info.MICROPHONE);
Nur leider kann man aus der Port-Variante keine Daten auslesen geschweige denn irgendetwas damit anfangen und das Casten nach TargetDataLine funktioniert nich (CastException).
Also was tun?