Laufende Lautstärke Werte vom Mikrofon auslesen(Klatsch App)

R

rollobollo

Neues Mitglied
0
Hallo zusammen,

ich möchte eine App entwickeln, die auf KLATSCH oder KNALL Geräusche reagiert, bzw. diese Zählt.
Dazu ist es notwendig auf das Mikro zu zu greifen. Ich habe aber bisher nur Funktionen für das Mikro gefunden die eine Audio Datei aufnehemen.

Gibt es eine Möglichkeit den aktuellen Wert (lautstärke Pegel) aus zu lesen und aus zuwerten ? Quasi eine Funktion die mir einen Byte Wert der aktuellen Lautstärke vom Mikro zurück gibt ? Brauch ja auch nich so genau sein.. will ja nichts genaues messen.

Wenn ich zuerst eine Audio Datei aufneheme und diese dann im anschluss auswerte befürchte ich, dass ich eventuell einen KNALL verpassse während des Auswertvorgangs...

Hat jemand eine gute Idee dazu ?
 
So habe jetzt nach langem hin und her den unten stehenden Code zusammen bekommen und das Mikro schreibt auch Werte in den buffer. Da ich leider nicht der Java Pro bin(wie man an dem Programm bestimmt auch sieht) weiß ich leider nicht, wie ich jetzt den buffer, den ich an auswerten(buffer) übergebe auswerten kann.. Immer wenn ich auf einzhelne short element zugreifen will, stopt das Mikro...

Wie kann ich jetzt den buffer der laufen beschrieben wird auswerten al a if (buffer[xy] > 200 ) tue dies und das ?

ich verstehe den code leider auch nicht ganz,was wird hier gemacht, bzw erzeugt ?:

short[][] buffers = new short[256][160];

und

short[] buffer = buffers[ix++ % buffers.length];
N = recorder.read(buffer, 0, buffer.length);



Code:
public class Main extends Activity implements Runnable, OnClickListener {

	boolean stopped = false;

	private TextView tv;
	private String wert = null;
	int lauf =0;
	
	private Button button_stop;

	private static Handler handler;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		tv = (TextView) this.findViewById(R.id.Wert);
		
		button_stop = (Button) findViewById(R.id.button_stop);
		button_stop.setOnClickListener(this);
		
		Thread thread = new Thread(this);
		thread.start();
		beginneThread();
	}

	public void run() {
		Looper.prepare();
		
		handler = new Handler() { // (2)
			public void handleMessage(Message msg) {
				
				android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
				
				AudioRecord recorder = null;
				short[][] buffers = new short[256][160];
				int ix = 0;

				try { // ... initialise
					int N = AudioRecord.getMinBufferSize(8000,
							AudioFormat.CHANNEL_CONFIGURATION_MONO,
							AudioFormat.ENCODING_PCM_16BIT);
					Log.e("AudioRecord", "Recorder initialisiert");

					recorder = new AudioRecord(AudioSource.MIC, 8000,
							AudioFormat.CHANNEL_CONFIGURATION_MONO,
							AudioFormat.ENCODING_PCM_16BIT, N * 10);
					recorder.startRecording();
					
					Log.e("AudioRecord", "Recording startet");
					
					// ... loop
					while (!stopped) {
						short[] buffer = buffers[ix++ % buffers.length];
						N = recorder.read(buffer, 0, buffer.length);
						auswerten(buffer);
					}
				} catch (Throwable x) {
					Log.e("AudioRecord", "Recording Failed");
				}
				finally { 
		           	recorder.stop();
		           	Log.e("AudioRecord", "Recording stopt");
		    	}
			}
		};
		Looper.loop(); // (3)
	}

	public void auswerten(short[] buffer){
		
	}

	public static void beginneThread() {
		handler.sendEmptyMessage(0); // (4)
	}

	public void beendeThread() {
		stopped=true;
		handler.getLooper().quit(); // (5)
	}

	@Override
	public void onClick(View v) {
		if(v == button_stop){
			beendeThread();
			finish();
		}
		
	}

}
 

Ähnliche Themen

D
  • Data2006
3 4 5
Antworten
84
Aufrufe
3.705
jogimuc
J
5
Antworten
22
Aufrufe
1.421
590239
5
H
Antworten
2
Aufrufe
1.311
Hcman
H
Zurück
Oben Unten