`
喧嚣求静
  • 浏览: 550835 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

手机录音-amr

 
阅读更多

 

 

Android的音频采集

主要使用AudioTrack和AudioRecord两个类进行操作


可参考webrtc源码:\ver789\src\modules\audio_device\main\source\android\org\webrtc\voiceengine\AudioDeviceAndroid.java


参考百度资料

http://wenku.baidu.com/view/da8fc2fb0242a8956bece4a0.html

 

转: ios与android语音互通方案,类微信

AudioRecord和AudioTrack类的使用(音频录制与播放)  

什么是音频的采样率和采样大小  

android中AudioRecord采集音频的参数说明

会说话的TOM猫的原理是什么

作者: Android开发网原创 时间: 2011-08-04

   很多网友对会说话的TOM猫的原理比较感兴趣,这里Android123就实现做一个简单的分析:

  1. 音频采集

   这点主要是通过Android设备的麦克风实时采集音频,由于Android平台的MediaRecorder类录制音频到文件,虽然可以通过空设备回调获得实时的音频流,不过为了降低开发者的难度,Android开发网推荐使用正统的AudioRecord和AudioTrack,首先我们仍然需要加入android.permission.RECORD_AUDIO这个权限。

  android.media.AudioRecord类的read方法主要有3种重载形式:

int  read(short[] audioData, int offsetInShorts, int sizeInShorts)   //short在java中占用两个字节
int  read(byte[] audioData, int offsetInBytes, int sizeInBytes)  //byte在java中占用一个字节
int  read(ByteBuffer audioBuffer, int sizeInBytes)  //基于NIO的ByteBuffer类型

  我们可以看到从麦克风中获取的音频无需经过文件系统直接通过AudioRecord类的read方法读入到我们预定的缓冲区中,这里需要注意的是采样率的大小必须有足够的缓冲区空间处理、

  2. 变声处理

  这点需要一些基本的音频处理方式,比如移调、变速,Android开发网推荐大家参考Adobe Audition的早期Cool Editi泄露的代码,当然音频处理算法比较多,大家可以自己实现。

  3. 播放原始音频流

  同样,处理完后考虑到效率我们仍然直接从内存流中播放,最简单的就是AudioTrack类,通过android.media.AudioTrack类的write方法,让Android声卡播放原始音频流。两种重载方法如下

int  write(short[] audioData, int offsetInShorts, int sizeInShorts)
int  write(byte[] audioData, int offsetInBytes, int sizeInBytes) 

 

 

Android本身的MediaRecorder肯定是不行的,只支持amr,wav,acc,如果要做到Android,Iphone,pc通用的话,这些格式是行不通的只能找第三方编解码库

talkbox Android版用的是ilbc 的第三方编解码库,在iPhone上用的是caf

  微信  Android版估计是amr估计转码的是交给腾讯强大的服务器了。

  米聊  Android版和Iphone版用的都是speex

  搜了下,目前支持的开源第三方库也就只有 ilbc和speex了

http://www.speex.org/downloads/      speex的官网

  http://www.badlogicgames.com/wordpress/?p=1726&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+PlanetAndroidCom+%28Planet+Android%29      在Android上编译的方法

  http://bbs.rosoo.net/thread-5956-1-1.html    speex音频编解码的示例

http://code.google.com/p/android-recorder/      源码,不过它又转了一次码,弄成flv了。

 

----------------------------------

 

避免链接失效,拷贝一份:

 --------------------------------------------------------------

Ios实现amr编解码

Feb 5th , 2012

介绍

学习ios第一个练手功能就是给已有产品加上语音通信功能,能够互通ios与android。这里给出自己的一些心得,希望能给他人一些参考。

资料搜集与参考

  1. 类似产品使用的技术

    • talkbox Android版用的是ilbc的第三方编解码库,在iPhone上用的是caf
    • 微信   Android版估计是amr估计转码的是交给腾讯强大的服务器了。
    • 米聊   Android版和Iphone版用的都是speex

    目前支持的开源第三方库也就只有 ilbc和speex了

  2. 考虑采用的方案

    speex需要Android和ios都进入转码,工作量太大,不采用。剩下的方案就是在amr和ilbc上选择了,android支持amr,低版本不支持ilbc, ios高版本(4.3)只支持ilbc,不能支持amr。刚开始的测试方案使用的是android将语音转ilbc, 由于我对于android开发不是太熟悉,在同事的帮助下一直没有转换成功,现在想想可能是处理问题,如果能转换成或,这种方案应该是最方便的。

ios实现amr编解码

录制

  1. 将语音录成原始pcm码

    注意这里,虽然录制是pcm码,但出来的文件ios依然会封装一层,将其包装成pcf格式。所以就有了第二步。

  2. 将pcf中的pcm码取出来

  3. 使用libopencore库将其编成amr格式,这时可以发送给android端播放了。

播放

  1. 将android版本发送过来的amr解码出来

  2. 播放原始pcm即可

代码文件都放在github上了,有需要的可以参考一下。 https://github.com/hhuai/ios_util

分享到:
评论
7 楼 喧嚣求静 2015-05-17  
sunshaoqun 写道
二次元 写道
希望能分享下.so文件编译源码!

求.so源码。。。


以上统一回复,此篇文章是我之前学习时转载的,我也没源码了,抱歉,最好找原作者
6 楼 sunshaoqun 2015-03-09  
二次元 写道
希望能分享下.so文件编译源码!

求.so源码。。。
5 楼 blocker205 2014-01-07  
哥们,用你的demo。android 端录制的amr格式这边播放不了。这是为什么呢?
4 楼 Qi_Wenbin 2013-04-15  
3 楼 二次元 2013-03-14  
希望能分享下.so文件编译源码!

相关推荐

Global site tag (gtag.js) - Google Analytics