一、在Android和PC之间传递和接收音频数据,首先要保证音频数据的格式要一致,java中提供AudioFormat类构造音频格式,以下是作者所用的构造函数:

public AudioFormat(float sampleRate,                   int sampleSizeInBits,                   int channels,                   boolean signed,                   boolean bigEndian)
构造具有线性 PCM 编码和给定参数的  AudioFormat。将帧大小设置为包含每个声道一个样本所需的字节数,将帧速率设置为样本速率。

参数:
sampleRate - 每秒的样本数
sampleSizeInBits - 每个样本中的位数
channels - 声道数(单声道 1 个,立体声 2 个)
signed - 指示数据是有符号的,还是无符号的
bigEndian - 指示是否以 big-endian 字节顺序存储单个样本中的数据( false 意味着 little-endian)。

二、在这个构造函数中,其他参数都好理解,只有bigEndian和littleEndian字节存储的顺序不懂,上网查了下,给出解释:

  来自:http://blog.csdn.net/sunshine1314/article/details/2309655

谈到字节序的问题,必然牵涉到两大CPU派系。那就是MotorolaPowerPC系列CPUIntelx86系列CPUPowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian呢?

     
其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。

     用文字说明可能比较抽象,下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:

Big Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     12     |      34    |     56      |     78    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     78     |      56    |     34      |     12    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

目前大多数操作系统,如windows、linux都是使用Little-endian存储字节,Mac,OS使用Big-endian存储字节;所有的网络协议都是使用big-endian来传输数据的,当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。

三、作者在Android和Windows7系统的PC之间进行语音对讲时,使用big-endian无法听到讲话内容,而使用little-endian则是成功的,具体原因还没有理解透彻,待以后慢慢学习。

AudioFormat format = new AudioFormat(8000, 16, 1, true, false); 

       

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. android 本地数据存贮之sharedpreference
  4. Android获取服务器后台数据
  5. Android(安卓)sqlite3 详解
  6. Android(安卓)ContentProvider学习
  7. 数据存储之Shared Preferences
  8. Android(安卓)ListView缓存惹得祸
  9. android数据库(随apk一起发布数据库)

随机推荐

  1. Android(安卓)Studio 修改默认作者信息和
  2. Android(安卓)support Repository
  3. Walle —— Android多渠道打包神器
  4. 属性动画(property animation) &重复执行
  5. Android模拟器的属性配置介绍
  6. RecyclerView实现Item点击事件方法二
  7. WindowManager和WindowManager.LayoutPar
  8. Android(安卓)原生通知Notification 写法
  9. Android(安卓)64k的string限制
  10. Android(安卓)ListView优化之局部刷新(更