android提供一套完整的audio机制,对上层用户而言,概括起来就是两个方面:录音(record)和播放(track).
了解了这两个简单的接口,对开发普通的audio应用基本上就足够了。总结如下:

录音(record):
min = AudioRecord.getMinBufferSize(Freq,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
这是在查询系统对特定的采样频率和模式下需要的最小数据包大小。Freq 可以设8000, 16000,32000, 44100, 48000.但是得参考具体的硬件平台参数, 某些平台是只支持固定的采样频率的。
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, Freq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
min);
这就是实际的record对象了。可以看到这个例子里的设置是MIC采样,单声道,PCM 16B的。这就已经配置了用户需要的audio参数。
recorder.startRecording();

while(true)
{
recorder.read(buf_id, 0, min);

}
这就是真正干活的部分了,值得注意的是read的最后一个参数min并不一定是上文求出的数值,使用者完全可以根据实际情况,自己推算出合适的数值。
最后别忘了关门:)
recorder.stop();
recorder.release();

播放(playback/track):
接口与recorder非常类似。
int iMinBufSize = AudioTrack.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
这是在询问系统固定模式下的最小buffer size。
track = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
iMinBufSize, AudioTrack.MODE_STREAM);
得到对象了。具体解释参见上文。
while(true)
{
track.write(buf_id, 0, chunkSize);
}
干活!同样,这个写 的数目需要使用者自己测算。
收工:
track.flush();
track.release();

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. Python技巧匿名函数、回调函数和高阶函数
  3. python list.sort()根据多个关键字排序的方法实现
  4. android中文api(89)——ViewManager
  5. Android调用天气预报的WebService简单例子
  6. Android(安卓)Activity的启动
  7. MTK Android(安卓)Driver:led
  8. 样式 主题 对话框 国际化
  9. Android例子—直接通过Binder的onTransact完成跨进程通信

随机推荐

  1. Android--用SAX解析xml文件
  2. 删除android ScrollView边界阴影方法
  3. android WifiMange获取IP为负
  4. android 调用系统安装程序
  5. android之ViewFlipper
  6. Android(安卓)默认声音大小修改
  7. Android(安卓)揭露效果兼容低版本
  8. android获取手机通讯录联系人
  9. Android(安卓)Studio 3.2.1找不到Android
  10. Android获取图片Uri/path