Android之关于电话录音原理,目前的方法还是只能录MIC

对于android来讲,没有API直接支持对电话进行双向录音。
虽然MediaRecorder里面可以设置recodeRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);来表示要对双向进行录音,但是这个功能实际是不可使用的,唯一能直接使用的还是VOICE_MIC。也就是对MIC进行录音。现在很多的所谓录音软件应该都是用的MIC进行录音的。无论是用MediaRecorder这个类还是用的比较高级写的AudioRecord这个类。
可以参考下面这个文档对录音使用MediaRecorder设计的源代码的分析。貌似按照这里面所讲貌似这几个参数传进来直接就不支持了,需要有音频硬件的支持。
http://wenku.baidu.com/view/71d3e008844769eae009ed00 .html

目前看到的比较流行的一个CallRecord软件的说明,如果要双向录音的话,需要有硬件驱动的支持,对于某些型号的手机,这个可以通过打补丁的方式进行支持,对于其他没法打补丁的机型的话,就只能通过MIC读来支持了。
http://forum.xda-developers.com/showthread.php?t=1441643

综合上面来看,目前来讲比较通用的方法还是只能用MIC来进行双向的录音了。使用了一个使用AudioRecord进行录音的软件,不开免提的话通话录音效果还可以,对方声音还可以忍受。不过这个还是有一些噪声可以听出来。目前只能先用这个方法凑活着用了。
可以参考这个,这个程序主要功能还是把录音转成MP3,需要用外部库
http://garage.uraroji.com/2011/03/03/android上でのmp3エンコードのサンプル/

另外关于录音还有一点需要注意,在注册了电话录音状态的监听函数以后,不要在这个listen函数里面直接录音,这样的话会导致问题,系统会卡在CALL_STATE_OFFHOOK这个状态。这中lisen需要尽快的返回,可以在这里面起一个service,然service实现录音的功能,然后在idle的时候把这个service停掉,或者里面对应的录音停掉。起一个新的thread貌似也是可以的。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Android 上,要切换使用主麦克风(Primary Mic)或副麦克风(Secondary Mic)进行音,你需要使用 AudioRecord 类和 AudioManager 类来实现。下面是一些示例代码片段,展示如何切换使用不同的麦克风进行音: 1. 使用主麦克风音: ```java int audioSource = MediaRecorder.AudioSource.MIC; // 使用主麦克风 int sampleRate = 44100; // 采样率(可以根据需要进行调整) int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 单声道音 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 16位PCM编码 int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); AudioRecord audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize); ``` 2. 使用副麦克风音: ```java AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMicrophoneDirection(AudioDeviceInfo.MIC_DIRECTION_SECONDARY); // 设置音为副麦克风 int audioSource = MediaRecorder.AudioSource.UNPROCESSED; // 使用未处理的音频源,以便支持副麦克风 int sampleRate = 44100; // 采样率(可以根据需要进行调整) int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 单声道音 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 16位PCM编码 int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); AudioRecord audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize); ``` 在上述示例中,我们使用 `MediaRecorder.AudioSource.MIC` 和 `MediaRecorder.AudioSource.UNPROCESSED` 来分别选择主麦克风和副麦克风作为音频源。同时,我们还使用了 `AudioManager` 类的 `setMicrophoneDirection()` 方法来设置音为副麦克风。 请注意,具体可用的麦克风和设置可能因设备的硬件和驱动程序而有所不同。因此,在实际应用中,你可能需要进行适配和测试以确保兼容性和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值