# Mikrophon benutzen?



## Evolver (29. Nov 2007)

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


----------



## Evolver (30. Nov 2007)

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:

```
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 (1. Dez 2007)

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 (1. Dez 2007)

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


```
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


----------



## tuxedo (1. Dez 2007)

Auf http://www.jsresources.org/ gibts irgendwo n Beispiel wie man an die Lautstärke kommt.

-Alex


----------

