AudioPlayer

主要是实现边录边播(AudioRecord+AudioTrack)以及对音频的实时处理(如会说话的汤姆猫、语音)

优点:语音的实时处理,可以用代码实现各种音频的封装

缺点:输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩

示例:

使用AudioRecord类录音,并实现WAV格式封装。录音20s,输出的音频文件大概为3.5M左右(已写测试代码)

Demo

public class SoundActivity extends Activity implements  AdapterView.OnItemClickListener, MediaPlayer.OnCompletionListener {public static final String DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "1122" + File.separator;private ListView mListView;private SoundAdapter mAdapter;private MediaPlayer mMediaPlayer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sound);mListView = (ListView) findViewById(R.id.lv_sound);mListView.setOnItemClickListener(this);initListView();initMediaPlayer();}private void initMediaPlayer() {mMediaPlayer = new MediaPlayer();mMediaPlayer.setOnCompletionListener(this);}private void initListView() {mAdapter = new SoundAdapter(SoundActivity.this, DIR);mListView.setAdapter(mAdapter);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {String fileName = (String) mAdapter.getItem(position);String file = DIR + fileName;try {if (mMediaPlayer.isPlaying()) {mMediaPlayer.stop();}try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}mMediaPlayer.reset();mMediaPlayer.setDataSource(file);mMediaPlayer.prepare();mMediaPlayer.start();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void onCompletion(MediaPlayer mp) {mMediaPlayer.reset();}@Overrideprotected void onDestroy() {super.onDestroy();mMediaPlayer.release();}
public class SoundAdapter extends BaseAdapter {private Context mContext;private File mDir;private int mTotalNumber = 0;private List<String> mFileNameList;public SoundAdapter(Context context, String dirPath) {mContext = context;mDir = new File(dirPath);mTotalNumber = mDir.list().length;mFileNameList = Arrays.asList(mDir.list());}@Overridepublic int getCount() {return mTotalNumber;}@Overridepublic Object getItem(int position) {return mFileNameList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vh;if (convertView == null) {vh = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);vh.textView = (TextView) convertView.findViewById(R.id.text_view);convertView.setTag(vh);} else {vh = (ViewHolder) convertView.getTag();}vh.textView.setText(mFileNameList.get(position));return convertView;}class ViewHolder {TextView textView;}@Overridepublic void notifyDataSetChanged() {mTotalNumber = mDir.list().length;mFileNameList = Arrays.asList(mDir.list());super.notifyDataSetChanged();}
}

截图

我是天王盖地虎的分割线

Android -- AudioPlayer相关推荐

  1. Android-NDK-audio-echo

    项目图 运行界面 界面分析 setContentView(R.layout.activity_main);//设置布局文件controlButton = (Button)findViewById((R ...

  2. 适用于Android的OpenSL ES指南-OpenSL ES的Android扩展

    翻译自Android Extensions 针对Android的OpenSL ES扩展了参考OpenSL ES规范,使其与Android兼容,并利用Android平台的强大功能和灵活性. Androi ...

  3. Android 开发者该如何进阶?

    封面.png 前言 经常在简书和微信上收到一些同学的私信,说自己马上毕业或者已经毕业一年,从事Android开发相关的工作,现在不知道要学习什么东西了.或者说自己也在摸索着学习,但是不知道学习的路线对 ...

  4. android gridview控件使用详解_作为Android 开发者该如何进阶?

    经常在简书和微信上收到一些同学的私信,说自己马上毕业或者已经毕业一年,从事Android开发相关的工作,现在不知道要学习什么东西了.或者说自己也在摸索着学习,但是不知道学习的路线对不对,感觉很迷茫,想 ...

  5. Android OpenSL ES 对象结构

    OpenSL ES 是 Khronos Group 为嵌入式系统开发的调优的免版权费.跨平台.硬件加速的音频 API 规范.Android 提供了这一 API 规范的 Android 专有实现,并允许 ...

  6. ANdroid O MeidiaPlayer 深入理解(一)

    前言 android对于java层的音频播放器提供了很多api,主要的有 AudioTrack.SoundPool.MediaPlayer(其实AudioPlayer和MediaPlayerAdapt ...

  7. Android音频开发(3):如何播放一帧音频

    本文重点关注如何在Android平台上播放一帧音频数据.阅读本文之前,建议先读一下<Android音频开发(1):基础知识>,因为音频开发过程中,经常要涉及到这些基础知识,掌握了这些重要的 ...

  8. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器

    大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...

  9. android sdk build-tools_从零开始仿写一个抖音App——视频编辑SDK开发(一)

    本文首发于微信公众号--世界上有意思的事,搬运转载请注明出处,否则将追究版权责任.交流qq群:859640274. 大家好久不见,又有一个多月没有发文章了.不知道还有哪些读者记得我的 从零开始仿写抖音 ...

最新文章

  1. nn.Conv2d中padding详解【pytorch学习】
  2. 输入10个整数,计算它们的平均值(输出保留1位小数)。
  3. 浅析epoll – epoll函数深入讲解
  4. The Eclipse JDT Core jar is not in the classpath
  5. 模拟输入(ADC-A0)
  6. php base64尺寸,PHP base64编码的图像显示不正确
  7. Linux gitpush错误,linux – GIT:无法推送(奇怪的配置问题)
  8. 不争气的geometry shader
  9. java的 import注解_[java]一分钟学会spring注解之@Import注解
  10. Python网络编程基础【底层网络】
  11. 推荐→可以做时间线图片的APP
  12. Springboot项目调用阿里云语音服务案例【真实有用】
  13. vscode设置豆沙绿护眼色
  14. Qt:20---Containers控件的使用
  15. java.lang.NumberFormatException: null原因
  16. 运输小猫(斜率优化)
  17. 流程控制的三个练习题的问题,请求解释,谢谢
  18. 《创业算法》4: 不能太相信技术的壁垒
  19. python 图像分割_Python中的图像分割(第2部分)
  20. 手机有线投屏到Windows电脑

热门文章

  1. 构建高性能ASP.NET站点
  2. Silverlight 中文教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
  3. 接口测试-使用mock生产随机数据
  4. VMware workstation和ESXi的区别
  5. treeselect 如何选中多个_转pdf后出现word没有的形状——对象选择窗格(同时选择多个形状、图形)...
  6. 学习web前端开发大半年,迷茫了,感觉什么都没学会怎么破?
  7. 前端学习入门,如何系统的学习前端?
  8. 一个优秀的前端工程师应具备哪些技能?
  9. 为什么很多人转行学习Web前端技术?
  10. 经验分享:Web前端入门要怎么开始学?