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; @Override
protected 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);
} @Override
public 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();
} } @Override
public void onCompletion(MediaPlayer mp) {
mMediaPlayer.reset();
} @Override
protected 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());
} @Override
public int getCount() {
return mTotalNumber;
} @Override
public Object getItem(int position) {
return mFileNameList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public 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;
} @Override
public void notifyDataSetChanged() {
mTotalNumber = mDir.list().length;
mFileNameList = Arrays.asList(mDir.list());
super.notifyDataSetChanged();
}
}

截图

我是天王盖地虎的分割线

Android -- AudioPlayer的更多相关文章

  1. Android音频介绍

    这个世界音频设备千变万化,Android也不可能为每种设备都提供支持.Android定义了一个框架,这个框架来适配底层的音频设备.该适配层的定义位于: hardware/libhardware_leg ...

  2. Android音频开发之——如何播放一帧音频

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

  3. [Android] AudioTrack::start

    AudioTrack的start方法用于实现Android的音频输出,start究竟做了什么?回顾一下上一小节createTrack_l的最后部分,通过binder返回了一个Track的句柄,并以被保 ...

  4. [Android] AudioTrack实例

    AudioTrack在Android系统中是用于PCM数据的混音.播放,并不涉及到音频的解码.因此MP3这类经过编码的音频格式文件不能直接通过AudioTrack正确地播放,AudioTrack只能播 ...

  5. 使用AudioTrack播放PCM音频数据(android)

    众所周知,Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的.MediaPl ...

  6. Android stagefright与opencore对比

      [转载至其它博客] http://blog.csdn.net/djy1992/article/details/9339917 1引言 Android froyo版本多媒体引擎做了变动,新添加了st ...

  7. mac cocos2dx android

    1. localhost:proj.android mxhd4$ ./build_native.sh 报错 Compile++ thumb  : cocosdenshion_static <= ...

  8. Android Multimedia框架总结(十)Stagefright框架之音视频输出过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52560012 前言:上篇文中最后 ...

  9. Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52532085 不知不觉到第九篇了,感觉还有 ...

随机推荐

  1. Codeforces Round #272 (Div. 2) A. Dreamoon and Stairs 水题

    A. Dreamoon and Stairs 题目连接: http://www.codeforces.com/contest/476/problem/A Description Dreamoon wa ...

  2. request.getRequestDispatcher("").forward()中文乱码

    即使jsp页面的编码已设为“UTF-8”,有中文的地方还是会出现乱码,但是用response.sendRedirect不会出现此问题. 解决方案一: 不使用PrintWriter out=respon ...

  3. 使用Puppeteer进行数据抓取(三)——简单的示例

    本文以一个示例简单的介绍一下puppeteer的用法,我们的目的是:获取我博客上的文章的前十页的所有随笔的标题和链接.由于puppeteer本身是自动化chorme,因此这里我们的步骤和手动操作浏览器 ...

  4. Exynos4412的外部中断是如何安排的?

    作者 彭东林 pengdonglin137@163.com   平台 Linux4.9 tiny4412   概述 结合tiny4412开发板分析一下Exynos4412的外部中断是如何组织的.   ...

  5. redis for windows安装

    redis for windows安装 到下面的地址,下载REDIS FOR WINDOWS https://github.com/MicrosoftArchive/redis/releases 下载 ...

  6. i386、i586、i686、noarch、x86_64

    xxxxxxxxx.rpm   <== RPM的格式,已经经过编译且包装完成的rpm文件. xxxxxx.src.rpm   <== SRPM的格式,包含未编译的源代码信息. 例如rp-p ...

  7. 【C++】拷贝构造函数和赋值符函数

    在C++中,调用拷贝构造函数有三种情况: 1.一个对象作为函数参数,以值传递的方式传入函数体. 2.一个对象作为函数返回值,以值传递的方式从函数返回. 3.一个对象用于给另外一个对象进行初始化(复制初 ...

  8. 关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数原理和使用

    关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数 关于session和cookie参考: http:// ...

  9. wince程序调用另外一个wince exe程序?

    记住:要释放句柄 清空内存(当前程序) 在虚拟机下测试如图: 在reyo.ini文件中配置另一wince执行程序的路径,如果不配置程序会报错: 如果配置的程序不存在报错: 没有问题就调用所在位置的wi ...

  10. JS --- 三目运算符

    1.什么是三目运算:(布尔表达式 ? 值0:值1;) 5>3?alert('5大'):alert('3大'); 即    if(5>3){alert('5大')}else{alert('3 ...