前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android 音频录制与播放

Android 音频录制与播放

作者头像
码客说
发布于 2019-10-22 06:34:52
发布于 2019-10-22 06:34:52
1.8K00
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

音频录制

录制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private MediaRecorder mMediaRecorder;
private void startRecord(){
   if (mMediaRecorder == null){
       mMediaRecorder = new MediaRecorder();
       mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
       mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
       mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
       File file = new File(Environment.getExternalStorageDirectory().getPath(), "hello.log");
       if (!file.exists()) {
           try {
               file.createNewFile();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
       mMediaRecorder.setOutputFile(file.getAbsolutePath());
       mMediaRecorder.setMaxDuration(1000 * 60 * 10);
       try {
           mMediaRecorder.prepare();
       } catch (IOException e) {
           e.printStackTrace();
       }
       mMediaRecorder.start();
   }
   
   handler.postDelayed(runnable, 200);
}

停止录制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void stopRecord(){
   handler.removeCallbacks(runnable);
   mMediaRecorder.stop();
   mMediaRecorder.release();
   mMediaRecorder = null;
}

每200毫秒反复调用 获取声音大小

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Handler handler=new Handler();
Runnable runnable=new Runnable() {
   @Override
   public void run() {
       //要做的事情
       if(mMediaRecorder==null) return;
       double ratio = (double) mMediaRecorder.getMaxAmplitude() / 100;
       double db = 0;// 分贝
       //默认的最大音量是100,可以修改,但其实默认的,在测试过程中就有不错的表现
       //你可以传自定义的数字进去,但需要在一定的范围内,比如0-200,就需要在xml文件中配置maxVolume
       //同时,也可以配置灵敏度sensibility
       if (ratio > 1)
           db = 30 * Math.log10(ratio);
        //设置声波大小
       soundWaveViewLeft.setVolume((float)db);
       soundWaveViewRight.setVolume((float)db);
       //只要有一个线程,不断调用这个方法,就可以使波形变化
       //主要,这个方法必须在ui线程中调用
       handler.postDelayed(this, 200);
   }
};

音频播放

1、从资源文件中播放

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MediaPlayer   player  =   new MediaPlayer.create(this,R.raw.test);
player.start();

2、从文件系统播放

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MediaPlayer player = new MediaPlayer();
String path = "/sdcard/test.mp3";
player.setDataSource(path);
player.prepare();
player.start();

3、从网络播放

(1)通过URI的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String path="http://**************.mp3";     //这里给一个歌曲的网络地址就行了
Uri  uri  =  Uri.parse(path);
MediaPlayer player = new MediaPlayer.create(this,uri);
player.start();

(2)通过设置数据源的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MediaPlayer player = new MediaPlayer.create();
String path="http://**************.mp3";          //这里给一个歌曲的网络地址就行了
player.setDataSource(path);
player.prepare();
player.start();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android使用Service播放音乐
像音乐这种耗时的和适合后台操作的应当放在Service中进行操作,而不是放在Activity,下面就介绍使用Service的音乐播放器
夜雨飘零
2020/05/06
2.3K0
[android] 多媒体播放api简介
界面布局,水平方向四个按钮平均分布,使用权重,定义android:layout_width=”0dp”,定义layout_weight=”1”这个属性全都一致就是平均分布
唯一Chat
2019/09/10
1.1K0
[android] 多媒体播放api简介
Android Amr的录制与播放
Amr录制并获取声音大小 定义对象 private MediaRecorder mMediaRecorder; Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { //要做的事情 if (mMediaRecorder == null) return; double ratio = (double)
码客说
2019/10/22
2.1K0
Android简易“吹一吹实现”以及录音和播放示例
最近在做一些跟传感器相关的东西,有注意到以前腾讯微博以前出过一个吹一吹交互,虽然和传感器无关,但是感觉也比较有兴趣,就写了一个拙劣的demo,因为接触媒体文件操作比较少,顺带写了一个录音和播放的例子,总结了一下一些小坑的地方,一并在此分享给大家。 主要思路和坑的地方 主要的思路是通过MediaRecorder提供的getMaxAmplitude()函数,获取一段时间内输入的音频最大幅值来进行检测,所以除了吹的动作,其他声音也会被录进来。 “吹”这个动作如果想和其他动作进行区分,其实本质在于吹的时候靠近听筒,
NaOH
2018/05/29
1.2K0
Android开发笔记(一百二十六)自定义音乐播放器
在Android手机上面,音频的处理比视频还要复杂,这真是出人意料。在前面的博文《Android开发笔记(五十七)录像录音与播放》中,介绍了视频/音频的录制与播放,其中录像用的是MediaRecorder类,播放用的是MediaPlayer类。虽然Android还提供了专门的视频视图VideoView,但是该控件并非新的东西,而是继承了MediaRecorder和MediaPlayer,所以严格来说,Android上面只有一种视频的录制和播放方式。可是音频就大不一样了,Android提供了两种录音方式,以及至少三种常用的播音方式。两种录音方式分别是MediaRecorder类和AudioRecord类,而播音方式包括MediaPlayer类、AudioTrack类和SoundPool类,它们的使用场合各有千秋,且待笔者下面细细道来。 首先是MediaRecorder与MediaPlayer,这对组合即可用于录像,也可单独录制音频。它们处理的音频文件是压缩过的编码文件,通常用于录制和播放音乐,是最经常用到的。MediaRecorder与MediaPlayer在处理音频和视频时,整体流程是一样的,只有在部分方法的调用上有所差异,下面分别把录音/播音有关的方法列出来。 MediaRecorder的录音相关方法: reset : 重置录制资源 prepare : 准备录制 start : 开始录制 stop : 结束录制 release : 释放录制资源 setOnErrorListener : 设置错误监听器。可监听服务器异常以及未知错误的事件。 setOnInfoListener : 设置信息监听器。可监听录制结束事件,包括达到录制时长或者达到录制大小。 setAudioSource : 设置音频来源。一般使用麦克风AudioSource.MIC。 setOutputFormat : 设置媒体输出格式。OutputFormat.AMR_NB表示窄带格式,OutputFormat.AMR_WB表示宽带格式,AAC_ADTS表示高级的音频传输流格式。该方法要在setVideoEncoder之前调用,不然调用setAudioEncoder时会报错“java.lang.IllegalStateException”。 setAudioEncoder : 设置音频编码器。AudioEncoder.AMR_NB表示窄带编码,AudioEncoder.AMR_WB表示宽带编码,AudioEncoder.AAC表示低复杂度的高级编码,AudioEncoder.HE_AAC表示高效率的高级编码,AudioEncoder.AAC_ELD表示增强型低延迟的高级编码。 注意:setAudioEncoder应在setOutputFormat之后执行,否则会出现“setAudioEncoder called in an invalid state(2)”的异常。 setAudioSamplingRate : 设置音频的采样率,单位赫兹(Hz)。该方法为可选,AMRNB默认8khz,AMRWB默认16khz。 setAudioChannels : 设置音频的声道数。1表示单声道,2表示双声道。该方法为可选 setAudioEncodingBitRate : 设置音频每秒录制的字节数。越大则音频越清晰。该方法为可选 setMaxDuration : 设置录制时长。单位毫秒。 setMaxFileSize : 设置录制的媒体大小。单位字节。 setOutputFile : 设置输出文件的路径。 MediaPlayer的播音相关方法: reset : 重置播放器 prepare : 准备播放 start : 开始播放 pause : 暂停播放 stop : 停止播放 setOnPreparedListener : 设置准备播放监听器。 setOnCompletionListener : 设置结束播放监听器。 setOnSeekCompleteListener : 设置播放拖动监听器。 create : 创建指定Uri的播放器。 setDataSource : 设置播放数据来源。create与setDataSource只需设置其一。 setVolume : 设置音量。第一个参数是左声道,第二个参数是右声道,取值在0-1之间。 setAudioStreamType : 设置音频流的类型。AudioManager.STREAM_MUSIC表示音乐,AudioManager.STREAM_RING表示铃声,AudioManager.STREAM_ALARM表示闹钟,AudioManager.STREAM_NOTIFICATION表示通知。 setLooping : 设置是否循环播放。 i
aqi00
2019/01/18
3.1K0
Android 多媒体开发学习之简单的音乐播放器
我们今天的目的是学习如何创建一个简单的音乐播放器,可支持播放,暂停,继续播放,以及进度显示,已经进度拖拽。
DragonKingZhu
2022/05/08
7290
Android 多媒体开发学习之简单的音乐播放器
安德鲁斯—-多媒体编程
在内存中创建图片的副本 直接载入的bitmap对象是仅仅读的。无法改动。要改动图片仅仅能在内存中创建出一个一模一样的bitmap副本。然后改动副本
全栈程序员站长
2022/07/06
4410
Android VideoView 视频播放完成例子(进度条,播放时间,暂停,拖动)
中国广东省深圳市望海路半岛城邦三期 518067 +86 13113668890 <netkiller@msn.com>
netkiller
2018/11/09
14.9K0
Android MediaPalyer
Android提供的多媒体框架支持播放各种常见媒体类型,可以轻松地将音频、视频和图像集成到应用程序中。
Yif
2019/12/26
1K0
Android多媒体之视频播放器(基于MediaPlayer)
获取帧.png 基本上也就这么多了,最后讲一下视频封面帧图片的获取:数了一下这帧大概在15秒 测试了一下秒数越大,获取图片的速度越慢,也就是越卡,所以还是给0吧 如果在Adapter里实时加载会很卡,最好查询的时候就把bitmap放到实体类里,由于封面图不要很大 别把原图给放进去了,小心直接OOM。Bitmap的操作本文就不赘述了。
张风捷特烈
2019/03/15
5.6K0
Android多媒体之视频播放器(基于MediaPlayer)
Android MediaPlayer 播放音频
主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。
AnRFDev
2021/02/01
2.3K0
短视频app源码开发,短视频录制的实现
利用SurfaceView预览视频 利用系统自带的MediaRecorder实现短视频app源码中短视频视频的录制
云豹科技程序员
2021/05/25
1.7K0
相关推荐
Android使用Service播放音乐
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验