3

I try to develop as loudspeaker app. Audio input is built in phone mic. Audio output is built in phone speaker. I developed that app but didn't work well. I said "Hello" to phone mic didn't response. I tried next time blow the air to phone mic. Response sound have so many echo and air noise. How to solve that.

Update
Some of the device response sound is different. I don't know that is depend on device specification.


Reference :
Android AudioRecord class - process live mic audio quickly, set up callback function
Live Audio Recording and Playing in Android and Thread & callback handling

My code : MainActivity.java

package bm.app.loudspeaker;

import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ToggleButton;

public class MainActivity extends Activity {

    Thread m_thread; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        m_thread = new Thread(new Runnable() {

            @Override
            public void run() {

                loopBack();
            }
        });



        final ToggleButton butSwitch = (ToggleButton)findViewById(R.id.butSwitch);

        butSwitch.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (butSwitch.isChecked()) {

                    m_thread.start();
                }
                else{

                }

            }
        });
    }



    boolean m_isRun = true;
    int bufferSize = 0;
    int SAMPLE_RATE = 8000;
    AudioRecord m_record;
    AudioTrack m_track;
    byte[] buffer;
    int         ix       = 0;

    public void loopBack(){
        try {
            bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
                    AudioFormat.ENCODING_PCM_16BIT);

//          if (bufferSize <= BUF_SIZE) {
//              bufferSize = BUF_SIZE;
//          }

            Log.i("LOG","Initializing Audio Record and Audio Playing objects");

            m_record = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO
                    , AudioFormat.ENCODING_PCM_16BIT, bufferSize * 1);

            m_track = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO
                    , AudioFormat.ENCODING_PCM_16BIT, bufferSize * 1
                    , AudioTrack.MODE_STREAM);

            m_track.setPlaybackRate(SAMPLE_RATE);

            m_record.startRecording();
            Log.i("LOG","Audio Recording started");

            m_track.play();
            Log.i("LOG","Audio Playing started");

            buffer = new byte[bufferSize];

            while (m_isRun) {

                m_record.read(buffer, 0, bufferSize);
                m_track.write(buffer, 0, buffer.length);


            }

            Log.i("LOG", "loopback exit");

        } catch (Exception e) {
            // TODO: handle exception
        }

    }
}
Community
  • 1
  • 1
B M
  • 1,863
  • 1
  • 25
  • 40

0 Answers0