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;

    @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();
    }
}

截图




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4725728.html,如需转载请自行联系原作者
相关文章
|
前端开发 Java 测试技术
基于SSM的大学生电信诈骗宣传系统设计与实现
基于SSM的大学生电信诈骗宣传系统设计与实现
505 0
|
Java C#
C#学习系列相关之多线程(五)----线程池ThreadPool用法
C#学习系列相关之多线程(五)----线程池ThreadPool用法
662 0
|
9月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
237 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
Kubernetes 测试技术 持续交付
现代软件开发中的自动化工具与效率提升
在当今快节奏的软件开发环境中,自动化工具成为了提高效率和质量的关键。本文探讨了几种常见的自动化工具,并分析了它们在不同阶段和场景中的应用,展示了如何通过这些工具优化开发流程,加速项目交付。 【7月更文挑战第8天】
409 2
|
9月前
|
安全 数据挖掘 BI
代理商级差制分销系统模式开发技术规则
代理商级差制分销系统开发技术规则涵盖系统架构设计、用户角色与权限管理、佣金结算、数据分析、商品分类、激励机制及合规性、技术实现与优化等方面,旨在构建稳定、安全、高效的分销平台,满足多层次代理商管理需求,提升用户体验。
|
数据安全/隐私保护 Python
经验大分享:python读取yaml文件
经验大分享:python读取yaml文件
240 0
|
并行计算 PyTorch Linux
【Deepin 20系统】Linux系统安装Pytorch、Torch
本文提供了在Deepin 20系统中安装PyTorch及其相关库的指南,包括创建conda环境、安装PyTorch及依赖库的步骤。
173 3
|
运维 监控 安全
DevOps实践:从理论到企业级应用的转化之路
【7月更文挑战第21天】在数字化转型的大潮中,DevOps作为一种提升软件开发与运维效率的方法论,正逐步成为企业IT战略的核心。本文将从DevOps的基本概念出发,深入探讨其在企业级应用中的实践路径,包括文化理念转变、工具链的选择与集成、持续交付的实施步骤以及监控与反馈机制的建立。通过分析成功案例,旨在为读者提供一条清晰的DevOps转型路线图,帮助技术团队和运维人员理解并实施DevOps,以实现快速迭代和高效运营的目标。
|
数据采集 传感器 项目管理
LabVIEW软件开发人员的核心能力是什么
LabVIEW软件开发人员的核心能力是什么
108 3
|
机器学习/深度学习 存储 算法
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
647 0