如何实现麦克风的loopback?
需要实现一个测试功能: 在对着手机的麦克风说话的同时,听筒(或者扬声器)里能直接听到自己的声音。麻烦各位大侠能不啬赐教。。小弟先谢过了。

解决方案 »

  1.   

    主要关注下audiohardware里最终的路由操作,加点修改代码
      

  2.   

    就是要做会说话的XX系列吧。
    实时取得音频源数据:
    android.os.Process
    .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
    int bufferRead = 0;
    // 返回所需最低缓冲区大小的从成功建立AudioRecord对象。
    // 注意这个尺寸大小并不保证其顺利记录加载方式,
    // 和更高的价值应选用根据预期的频率的AudioRecord实例将调查为新数据。
    int bufferSize = AudioRecord.getMinBufferSize(frequency,
    AudioFormat.CHANNEL_IN_MONO, audioEncoding);
    // AudioFormat.CHANNEL_IN_MONO音频的配置
    short[] tempBuffer = new short[bufferSize];
    /*
     * 下面的bufferSize是 (字节单位)在写入录音的时候的音频的总缓冲区大小。
     */
    AudioRecord recordInstance = new AudioRecord(
    MediaRecorder.AudioSource.MIC, frequency,
    AudioFormat.CHANNEL_IN_MONO, audioEncoding, bufferSize);
    recordInstance.startRecording();// 开始录音
    while (this.isRecording) {
    // bufferRead = recordInstance.read(tempBuffer, 0, bufferSize);
    // 读取音频数据来自的音频硬件,记录到一个缓冲区。
    bufferRead = recordInstance.read(tempBuffer, 0, 640);// 录音数据被写入tempBuffer数组
      

  3.   

    最好是在驱动层做,提供相应的回环设备给HAL路由那边进行设置,这样避免延时