Android AudioTrack播放(解码)音频

-- MediaPlayer,AudioTrack

 1.MediaPlayer能够播放多种格式的声音文件,比如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer包括了AudioTrack。
 2.AudioTrack仅仅能播放已经解码的PCM流,假设是文件的话仅仅支持wav格式的音频文件,由于wav格式的音频文件大部分都是PCM流。AudioTrack不创建解码器。所以仅仅能播放不须要解码的wav文件。

  SoundPool、MediaPlayer、AudioTrack三种音频播放方式:SoundPool适合短促且对反应速度比较高的情况(游戏音效或按键声等),MediaPlayer适合比较长且时间要求不高的情况,比如播放mp3、aac等文件,而AudioTrack可播放解码后pcm的裸流。

-- AudioTrack
 使用AudioTrack播放MP3 左右声道控制 之移植Libmad到android平台-http://download.csdn.net/detail/feipeng_/9724644
AudioTrack audio = new AudioTrack(
     AudioManager.STREAM_MUSIC, // 指定流的类型
     32000, // 设置音频数据的採样率 32k,假设是44.1k就是44100
     AudioFormat.CHANNEL_OUT_STEREO, // 设置输出声道为双声道立体声,而CHANNEL_OUT_MONO类型是单声道
     AudioFormat.ENCODING_PCM_16BIT, // 设置音频数据块是8位还是16位。这里设置为16位。
好像如今绝大多数的音频都是16位的了
     AudioTrack.MODE_STREAM // 设置模式类型,在这里设置为流类型,第二种MODE_STATIC貌似没有什么效果
     );
audio.play(); // 启动音频设备。以下就能够真正開始音频数据的播放了
// 打开mp3文件,读取数据,解码等操作省略 ...
byte[] buffer = new buffer[4096];
int count;
while(true)
{
    // 最关键的是将解码后的数据,从缓冲区写入到AudioTrack对象中
    audio.write(buffer, 0, 4096);
    if(文件结束) break;
}
//关闭并释放资源
audio.stop();
audio.release();

  PCMPackageHead,PCM加头信息。pcm数据的播放(AudioTrack)。PCM文件加头
  AudioTrack有两种数据加载模式(MODE_STREAM和MODE_STATIC),对应的是数据加载模式和音频流类型。
andioTrack 支持两种模式 一种是static 模式 另一种是streaming音频流的形式;
  static 模式 可以直接加载到内在处理适合于内存的短声音时,应该选择static模式,并且需要以最小的延迟进行播放。因此,更适合于经常播放的UI和游戏声音,并且可能开销最小。 
  Streaming 模式 适合一些较大的音频文件,例如 音乐文件。streaming采用write()方式写入音频流

  切换音频模式:音频模式有 4 种,分别是 Normal、Ringtone、Call、Communicatoin。
  AudioPolicyService 与 AudioFlinger 是 Android 音频系统的两大基本服务。前者是音频系统策略的制定者,负责音频设备切换的策略抉择、音量调节策略等;后者是音频系统策略的执行者,负责音频流设备的管理及音频流数据的处理传输,所以 AudioFlinger 也被认为是 Android 音频系统的引擎。

  Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3等)并存成文件,而后者则更接近底层,能够更加自由灵活地控制,可以得到原始的一帧帧PCM音频数据。如果想简单地做一个录音机,录制成音频文件,则推荐使用 MediaRecorder,而如果需要对音频做进一步的算法处理、或者采用第三方的编码库进行压缩、以及网络传输等应用,则建议使用 AudioRecord,其实 MediaRecorder 底层也是调用了 AudioRecord 与 Android Framework 层的 AudioFlinger 进行交互的。直播中实时采集音频自然是要用AudioRecord了。
  使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件- https://github.com/renhui/AudioDemo
android audio截取PCM数据- https://blog.csdn.net/cck2004041/article/details/48134119

-- 音频处理,Android 7.0 这方面的处理比 Android 2.2 复杂那么多:
 1.Android 7.0 充分考虑了边界处理
 2.Android 2.2 只支持采样率 4~48 KHz 的音轨,但 Android 7.0 支持采样率 4~192 KHz 的音轨,因此现在对重采样处理提出更严格的要求

-- TeeSink
在Android系统中使用TeeSink功能截取任意音频流的原始PCM音频数据-https://blog.csdn.net/qidi_huang/article/details/53502083
 Google TeeSink 是 AudioFlinger 的一个调试功能,可以用来保存被播放音频的片段,但这个功能默认是关闭的,我们需要修改代码并重新编译系统才能使用。TeeSink。顾名思义,它可以为音频流开启一个 T 型的数据管道,在将音频流输出到扬声器这样的音频设备(或者录音)的同时,还可以把这些原始的 PCM 音频数据保存到 .wav 文件中。
 1、在使用 TeeSink 调试完后,一定要将该功能关闭。因为它使用的 local.prop 文件可以被利用进行本地提权,这会带来安全风险。
 2、在 Android 7.x 系统中,/data/misc/media 目录的名字被修改为了 /data/misc/audioserver。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值