1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

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

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von rollobollo, 11.02.2011.

  1. rollobollo, 11.02.2011 #1
    rollobollo

    rollobollo Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.02.2011
    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 ?
     
  2. rollobollo, 11.02.2011 #2
    rollobollo

    rollobollo Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.02.2011
    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();
    		}
    		
    	}
    
    }
    
     

Diese Seite empfehlen