Android -- AudioPlayer
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相关推荐
- Android-NDK-audio-echo
项目图 运行界面 界面分析 setContentView(R.layout.activity_main);//设置布局文件controlButton = (Button)findViewById((R ...
- 适用于Android的OpenSL ES指南-OpenSL ES的Android扩展
翻译自Android Extensions 针对Android的OpenSL ES扩展了参考OpenSL ES规范,使其与Android兼容,并利用Android平台的强大功能和灵活性. Androi ...
- Android 开发者该如何进阶?
封面.png 前言 经常在简书和微信上收到一些同学的私信,说自己马上毕业或者已经毕业一年,从事Android开发相关的工作,现在不知道要学习什么东西了.或者说自己也在摸索着学习,但是不知道学习的路线对 ...
- android gridview控件使用详解_作为Android 开发者该如何进阶?
经常在简书和微信上收到一些同学的私信,说自己马上毕业或者已经毕业一年,从事Android开发相关的工作,现在不知道要学习什么东西了.或者说自己也在摸索着学习,但是不知道学习的路线对不对,感觉很迷茫,想 ...
- Android OpenSL ES 对象结构
OpenSL ES 是 Khronos Group 为嵌入式系统开发的调优的免版权费.跨平台.硬件加速的音频 API 规范.Android 提供了这一 API 规范的 Android 专有实现,并允许 ...
- ANdroid O MeidiaPlayer 深入理解(一)
前言 android对于java层的音频播放器提供了很多api,主要的有 AudioTrack.SoundPool.MediaPlayer(其实AudioPlayer和MediaPlayerAdapt ...
- Android音频开发(3):如何播放一帧音频
本文重点关注如何在Android平台上播放一帧音频数据.阅读本文之前,建议先读一下<Android音频开发(1):基础知识>,因为音频开发过程中,经常要涉及到这些基础知识,掌握了这些重要的 ...
- 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器
大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上 ...
- android sdk build-tools_从零开始仿写一个抖音App——视频编辑SDK开发(一)
本文首发于微信公众号--世界上有意思的事,搬运转载请注明出处,否则将追究版权责任.交流qq群:859640274. 大家好久不见,又有一个多月没有发文章了.不知道还有哪些读者记得我的 从零开始仿写抖音 ...
最新文章
- nn.Conv2d中padding详解【pytorch学习】
- 输入10个整数,计算它们的平均值(输出保留1位小数)。
- 浅析epoll – epoll函数深入讲解
- The Eclipse JDT Core jar is not in the classpath
- 模拟输入(ADC-A0)
- php base64尺寸,PHP base64编码的图像显示不正确
- Linux gitpush错误,linux – GIT:无法推送(奇怪的配置问题)
- 不争气的geometry shader
- java的 import注解_[java]一分钟学会spring注解之@Import注解
- Python网络编程基础【底层网络】
- 推荐→可以做时间线图片的APP
- Springboot项目调用阿里云语音服务案例【真实有用】
- vscode设置豆沙绿护眼色
- Qt:20---Containers控件的使用
- java.lang.NumberFormatException: null原因
- 运输小猫(斜率优化)
- 流程控制的三个练习题的问题,请求解释,谢谢
- 《创业算法》4: 不能太相信技术的壁垒
- python 图像分割_Python中的图像分割(第2部分)
- 手机有线投屏到Windows电脑
热门文章
- 构建高性能ASP.NET站点
- Silverlight 中文教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
- 接口测试-使用mock生产随机数据
- VMware workstation和ESXi的区别
- treeselect 如何选中多个_转pdf后出现word没有的形状——对象选择窗格(同时选择多个形状、图形)...
- 学习web前端开发大半年,迷茫了,感觉什么都没学会怎么破?
- 前端学习入门,如何系统的学习前端?
- 一个优秀的前端工程师应具备哪些技能?
- 为什么很多人转行学习Web前端技术?
- 经验分享:Web前端入门要怎么开始学?