Mikrophon benutzen?

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Wie kann ich denn auf den Input eines Mikrophons zugreifen? Habe schon ein bisschen gesucht, aber nichts wirklich informatives gefunden.
 

Evolver

Bekanntes Mitglied
Also das Package javax.sound.sampled scheint ja zu bieten, was ich benötige. Also habe ich mit dem wenigen, was ich gefunden habe, mal angefangen, zu basteln:
Code:
private TargetDataLine mTDLine;
private AudioFormat mFormat;

// ...

mFormat = new AudioFormat(8000, 8, 1, true, false);
DataLine.Info tLineInfo = new DataLine.Info(TargetDataLine.class, mFormat);
mTDLine = (TargetDataLine)AudioSystem.getLine(tLineInfo);

// ...
// dann in einem eigenen Thread die DataLine "öffnen" und auslesen
// ...

mTDLine.open(mFormat);
mTDLine.start();
AudioInputStream tStream = new AudioInputStream(mTDLine);
while(mTDLine.isOpen()) {
	// ... ?
}

Ich habe jetzt also die offene Line und ggf. den AudioInputStream (ich weiß nicht, soll ich so auf die Eingabe zugreifen?). Da kommen auch "Signale" an, also irgendwelche Daten. Aber wie werte ich diese jetzt aus. Ich will z.B. Tonhöhen oder ähnliches heraussuchen. Also was muss ich mit den Daten aus dem AudioInputStream jetzt machen?
 

Evolver

Bekanntes Mitglied
Kennt sich denn damit niemand aus? Ich suche jetzt schon lange, finde aber nicht heraus, was ich nun mit den Daten anstellen soll. Also mit AudioInputStream.read() hole ich mir den Inhalt, aber was mache ich jetzt mit den Bytes? Wie bekomme ich heraus, was das Micro aufnimmt, also welche Tonhöhe, welche Lautstärke. Ich weiß nicht, wie ich die Daten auswerten soll.
 

Fancy

Aktives Mitglied
Also ich kenn mich damit leider auch nicht wirklich aus, aber ein

Code:
System.out.println(tStream.getFormat());

liefert hier bei mir ein

PCM_SIGNED 8000.0 Hz, 8 bit, mono, 1 bytes/frame,

Damit sollte das was dein tStream zurückgibt ein einfaches PCM Signal sein, das aus 8000 Frames pro Sekunde mit jeweils 1 Byte/Frame besteht. Wenn Du das nachmisst, wirst Du feststellen das tStream auch genau 8000 Byte pro Sekunde ausgibt.

PCM selber ist einfach zu handeln, da es lediglich eine Quantisierung der anliegenden Amplitudenwerte deines Eingangssignals darstellt. (PCM – Pulscodemodulation)

Damit solltest Du z.B. die von Dir gesuchte anliegende Lautstärke direkt aus dem Stream ablesen können. Wenn Dich allerdings auch wirklich noch die einzelnen Frequenzanteile des Signals interessieren, wird es schwieriger. In diesem Fall müsstest Du das anliegende PCM Signal durch eine Fourieranalyse schicken um das periodische PCM Signal in seine Frequenzanteile zerlegen zu können. (Fourieranalyse, Fourier-Transformation)

Gruß,
Michael
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wieso benutzen PriorityQueues Heaps? Allgemeine Java-Themen 2
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
X Wie kann ich meine Stdlib in Intelliji benutzen? Allgemeine Java-Themen 3
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
dereki2000 Eigenen Zeichensatz benutzen Allgemeine Java-Themen 7
N Jsoup, Links weiter benutzen Allgemeine Java-Themen 5
I Java google Sandbox benutzen Allgemeine Java-Themen 1
Thallius PDF oder Word als Template benutzen Allgemeine Java-Themen 1
K CET-Zeit benutzen Allgemeine Java-Themen 6
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
T .dll in java benutzen aber wie? Allgemeine Java-Themen 4
K Thread richtig benutzen Allgemeine Java-Themen 3
K Event benutzen Allgemeine Java-Themen 4
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
B Commandline jar mit Java benutzen Allgemeine Java-Themen 11
E Wie mit JNA C++ dll benutzen? Allgemeine Java-Themen 3
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
B MCSCM.dll mit Java benutzen Allgemeine Java-Themen 3
E Wie Constructor mit Parametern benutzen (getConstructor) Allgemeine Java-Themen 2
F Bash Pipe benutzen Allgemeine Java-Themen 4
J Tokenizer benutzen? Allgemeine Java-Themen 2
V Public SVN benutzen? Allgemeine Java-Themen 11
E welche standalone Version von Tomcat benutzen? Allgemeine Java-Themen 6
Y Wann folgende Technologien benutzen Allgemeine Java-Themen 5
Y Reflection - wie kann ich eine Methode benutzen Allgemeine Java-Themen 4
Y Reflection - wie anwenden/benutzen bei folgendem Problem Allgemeine Java-Themen 3
J MOtherboard Speaker benutzen? Allgemeine Java-Themen 19
G eclipse mit jdk 1.4 und 5 benutzen Allgemeine Java-Themen 10
P DLL Funktion benutzen Allgemeine Java-Themen 3
L Java ohne Installation benutzen? Allgemeine Java-Themen 2
G Jar File soll anderes benutzen Allgemeine Java-Themen 3
S Array wie benutzen? Allgemeine Java-Themen 3
N XInput API (DLL für XBox 360 Controller) mit Java benutzen? Allgemeine Java-Themen 3
B Was sollte ich benutzen Vektor oder ArrayList? Allgemeine Java-Themen 5
L Eclipse VM/JRE für Ant Build benutzen Allgemeine Java-Themen 1
B Fremde Packages benutzen? Allgemeine Java-Themen 11
U Komponente aus grösserem Projet benutzen Allgemeine Java-Themen 4
P Java Subprozess, StdIn und StdOut benutzen Allgemeine Java-Themen 10
G BufferedImage benutzen Allgemeine Java-Themen 6
F JProgressBar benutzen Allgemeine Java-Themen 5
H Zustandsvariable als int global benutzen? Allgemeine Java-Themen 5
G mehrere JPanels als Fenster benutzen Allgemeine Java-Themen 3
F Aus Java heraus WinAPI Funktionen benutzen Allgemeine Java-Themen 7
L java.text.NumberFormat und java.text.DecimalFormat benutzen Allgemeine Java-Themen 2
S private Methoden benutzen Allgemeine Java-Themen 11
A Packet in einem Java-Programm benutzen Allgemeine Java-Themen 4
S Welchen Editor soll man für Graphische lösungen benutzen Allgemeine Java-Themen 2
M Was soll ich benutzen? Java2D, Java3D, Swing, AWT?? Allgemeine Java-Themen 21

Ähnliche Java Themen

Neue Themen


Oben