Frequenztest zur Feststellung der Hörfähigkeit, geht prinzipiell bis 20 000 Schwingungen pro Sekunde (Hertz ), bei mir ist bei ca. 13 000 Hertz Schluß. Testen Sie selbst ihre maximale Hörfrequenz ( wechseln Sie mithilfe des Kopfhörers zwischen linkem und rechtem Ohr, Bereich der Eigenfrequenz beachten ).

Diese Datei ist als activity_main.xml nach Anlegen der App z.B. unter Eclipse in den  Ordner res mit Unterordner layout zu kopieren

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/Sound"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.sound.MainActivity" >

    <SeekBar
        android:id="@+id/frequency"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="109dp" />
   
     <TextView
                 android:layout_height="wrap_content"
                  android:layout_width="fill_parent"
                  android:id="@+id/TextViewERGEBNIS"
                 >
                   </TextView>

</RelativeLayout>

das dazu benötigte Java-Programm ist in den Unterordner der Quelle src in der Main.Activity.Java zu kopieren,

Achtung: Sie müssen den Dateinamen ihrer App einbinden, also wo unten com.example.sound steht , ist ihr Appname einzusetzen

package com.example.sound;
   
    import android.media.AudioFormat;
    import android.media.AudioManager;
    import android.media.AudioTrack;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.SeekBar;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    import android.widget.TextView;
   

    public class MainActivity extends Activity {
       
           public TextView TextViewERGEBNIS;
        Thread t;
        int sr = 44100;
        boolean isRunning = true;
        SeekBar fSlider;
        double sliderval;
       
       
        double fr = 440.f;
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
         
            TextViewERGEBNIS = (TextView) findViewById(R.id.TextViewERGEBNIS);
           
            fSlider = (SeekBar) findViewById(R.id.frequency);
        
                
            OnSeekBarChangeListener listener = new OnSeekBarChangeListener() {
              public void onStopTrackingTouch(SeekBar seekBar) { }
              public void onStartTrackingTouch(SeekBar seekBar) { }
              public void onProgressChanged(SeekBar seekBar,
                                              int progress,
                                               boolean fromUser) {
                  if(fromUser) sliderval = progress / (double)seekBar.getMax();
               }
            };

          
            fSlider.setOnSeekBarChangeListener(listener);

           
            t = new Thread() {
             public void run() {
           
             setPriority(Thread.MAX_PRIORITY);
          
            int buffsize = AudioTrack.getMinBufferSize(sr,
                    AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
          
            AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                                              sr, AudioFormat.CHANNEL_OUT_MONO,
                                      AudioFormat.ENCODING_PCM_16BIT, buffsize,
                                      AudioTrack.MODE_STREAM);
          
            short samples[] = new short[buffsize];
            int amp = 10000;
            double twopi = 8.*Math.atan(1.);
           
            double ph = 0.0;
       
         
           audioTrack.play();
         
          
           while(isRunning){
            fr =  4400 + 880*sliderval;
          
                    
            for(int i=0; i < buffsize; i++){
              samples[i] = (short) (amp*Math.sin(ph));
              ph += twopi*fr/sr;
             
            
            }
           
           audioTrack.write(samples, 0, buffsize);
          
         
          
          }
          audioTrack.stop();
         
          audioTrack.release();
        }
           
            
       };
      
       t.start();  
      
    }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
       
       
       
        public void onDestroy(){
              super.onDestroy();
              isRunning = false;
              try {
                t.join();
               } catch (InterruptedException e) {
                 e.printStackTrace();
               }
               t = null;
         }
    }