Android - Getting audio to play through earpiece

Posted by Donal Rafferty on Stack Overflow See other posts from Stack Overflow or by Donal Rafferty
Published on 2010-01-22T17:15:52Z Indexed on 2010/04/27 2:53 UTC
Read the original article Hit count: 666

Filed under:
|
|

I currently have code that reads a recording in from the devices mic using the AudioRecord class and then playing it back out using the AudioTrack class.

My problem is that when I play it out it plays vis the speaker phone.

I want it to play out via the ear piece on the device.

Here is my code:

public class LoopProg extends Activity {


 boolean isRecording; //currently not used
 AudioManager am;
 int count = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        am.setMicrophoneMute(true);
        while(count <= 1000000){
        Record record = new Record();  
        record.run();
        count ++;
        Log.d("COUNT", "Count is : " + count);
        }
    } 

   public class Record extends Thread
   {

           static final int bufferSize = 200000;
           final short[] buffer = new short[bufferSize];
           short[] readBuffer = new short[bufferSize];

           public void run() {  
            isRecording = true;
            android.os.Process.setThreadPriority
            (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

            int buffersize = AudioRecord.getMinBufferSize(11025,
            AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT);

                           AudioRecord arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
                                           11025,
                                           AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                           AudioFormat.ENCODING_PCM_16BIT,
                                           buffersize);

                           AudioTrack atrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                                           11025,
                                           AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                           AudioFormat.ENCODING_PCM_16BIT,
                                           buffersize,
                                           AudioTrack.MODE_STREAM);


        am.setRouting(AudioManager.MODE_NORMAL,1,
                             AudioManager.STREAM_MUSIC);


                           int ok = am.getRouting(AudioManager.ROUTE_EARPIECE);
                           Log.d("ROUTING", "getRouting = " + ok);
                           setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
                           //am.setSpeakerphoneOn(true);
                           Log.d("SPEAKERPHONE", "Is speakerphone on? : " + am.isSpeakerphoneOn());
                           am.setSpeakerphoneOn(false);
                           Log.d("SPEAKERPHONE", "Is speakerphone on? : " + am.isSpeakerphoneOn());
                           atrack.setPlaybackRate(11025);

                           byte[] buffer = new byte[buffersize];
                           arec.startRecording();
                           atrack.play();

                           while(isRecording) {
                                   arec.read(buffer, 0, buffersize);
                                   atrack.write(buffer, 0, buffer.length);
                           }

                           arec.stop();
                           atrack.stop();
                           isRecording = false;
           }
   } 
}

As you can see if the code I have tried using the AudioManager class and its methods including the deprecated setRouting method and nothing works, the setSpeatPoneOn method seems to have no effect at all, neither does the routing method.

Has anyone got any ideas on how to get it to play via the earpiece instead of the spaker phone?

© Stack Overflow or respective owner

Related posts about android

Related posts about route