# Java - AudioInputStream zum Micro herstellen



## Djon (17. Mrz 2005)

Hallo!!!

In dem Programm, was ich zur Zeit programmiere, möchte ich Sound von dem Micro aufnehmen. Doch ich komme mit der Java-Doc nicht klar. Kann ich überhaupt ein AudioInputStream zum Micro herstellen? 


Mfg Djon


----------



## stev.glasow (17. Mrz 2005)

Also ein InputStream geht auf jeden Fall, ein OutputStream auf eine Microfon hört sich irgendwie komisch an. Willst du wirklich etwas über das Micro ausgeben?


----------



## Djon (17. Mrz 2005)

ich habe mich falsch ausgedrückt, ich will den Sound vom Micro aufnehmen können und in einer Datei speichern. Doch wie mache ich das?


----------



## Djon (17. Mrz 2005)

kann mir den keiner hier helfen?


----------



## stev.glasow (17. Mrz 2005)

Schau dir das mal an, das ist die gekürzte Variante einer Klasse zum lesen aus einem Micropfon.

```
package babblenet;
import javax.sound.sampled.AudioFormat;


public class AudioFormats {

	public final static AudioFormat VERY_LOW = new AudioFormat(8000.0F,8,1,true, false);
         // .... usw.

}
```


```
package babblenet;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;


public class Transmitter {
	private final AudioFormat audioFormat;
	private final TargetDataLine targetDataLine;
	
	public Transmitter() throws LineUnavailableException{
		this.audioFormat = AudioFormats.VERY_LOW;
		this.targetDataLine = (TargetDataLine )AudioSystem.getLine(new DataLine.Info( TargetDataLine.class, this.audioFormat));
	}

	public void start()  throws LineUnavailableException{
		targetDataLine.open(audioFormat);
		targetDataLine.start();
	}

	public void stop(){
		targetDataLine.stop();
		targetDataLine.close();
	}
	
	
	public int read(byte[] buf){
		return this.targetDataLine.read(buf, 0, buf.length);		
		
		
	}

}
```
 Ist bestimt nicht die besste Lösung, aber es lief    Und wenn was unklar ist, frag !

Eine Receiver-Klasse hatte ich auch noch implementiert, wenn man irgendetwas über die Soundkarte ausgeben will. Also wenn du sowas auch noch brauchst ...


----------



## Roar (17. Mrz 2005)

progrmmier babblenet doch mal weiter


----------



## Djon (17. Mrz 2005)

und wo binde ich das Micro ein? Ich kann die Stelle irgendwie nicht finden.

Mfg Djon


----------



## stev.glasow (17. Mrz 2005)

Djon hat gesagt.:
			
		

> und wo binde ich das Micro ein? Ich kann die Stelle irgendwie nicht finden.
> 
> Mfg Djon


Hier
this.targetDataLine = (TargetDataLine )AudioSystem.getLine(new DataLine.Info( TargetDataLine.class, this.audioFormat));
holt er sich die TargetDataLine vom Standart-Microphone. 
Wie man ein ein spezieles nutzen kann, wenn mehrere angeschlossen sind, müsste ich auch erst nachschaun. 




			
				Roar hat gesagt.:
			
		

> progrmmier babblenet doch mal weiter


   :?


----------



## Djon (17. Mrz 2005)

holt eigentlich TargetDataLine sich nicht den InputStream von dem Mixer und nicht von dem Micro?


----------



## stev.glasow (17. Mrz 2005)

Audiosystem.getLine(...) holt sich die 'Line'  von dem ersten Mixer der dir eine entsprechende Line für die übergebene Line.Info (bzw DataLine.Info)  liefern kann. Im normal fall liest die Line dann vom Micro, wenn du mehrere Eingabegeräte hast kann es aber auch ein anderes sein.

Du kannst dir aber auch alle verfügbaren Mixer holen, einen auswählen und dir die Line per mixers[2].getLine(dieLineInfoWieder)  'anlegen'  die kann dann von einem anderem Micro oder eine ganz anderem Gerät lesen eine e-gitarre z.B.


Alle Angaben sind ohne Gewehr    :roll: , das habe ich nämlich nie getestet nur gelesen.


----------



## Djon (17. Mrz 2005)

ein grosses DANKESCHÖN für die schnelle Erklärung, werde morgen ausprobieren und vom Ergebnis berichten!

Mfg Djon


----------

