Android音频播放

android 实现同时播放多个音频和连续播放多个音频 1,同时播放多个音频 lateinit var mSoundPool: SoundPool var mSoundMap = HashMap<Int, Int>() val audioAttrib: AudioAttributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFIC 阅读详情

        这里使用MediaPlayer来实现媒体音频的播放和相关设置,能够实现播放,暂停,停止,快进,设置声音大小,播放倍速,循环播放,播放时长,播放进度等等。

        创建媒体播放器:

MediaPlayer player = new MediaPlayer();

一、相关接口介绍

  • Runnable:用于周期性获取audio的播放进度
  • MediaPlayer.OnCompletionListener:audio播放完毕的回调
  • MediaPlayer.OnErrorListener:audio播放出错的回调
  • MediaPlayer.OnSeekCompleteListener:快进,后退的回调
  • MediaPlayer.OnBufferingUpdateListener:播放缓冲区加载的回调
  • MediaPlayer.OnPreparedListener:播放资源初始化好了的回调

        写一个类,分别实现上述接口,来实现audio的相关功能。

二、开始播放

public void play(String callback) {
    if (!checkArgument(callback)) {
        return;
    }
    try {
        player.reset();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setDataSource(data.src);
        player.setLooping(data.loop);
        setVolume();
        setPlaybackRate();
        player.setOnPreparedListener(this);
        player.prepare();
    } catch (IOException e) {
        LogUtils.d("播放出错:" + e.getMessage());
    }
}

1、player.reset()

重置播放器

2、setAudioStreamType

AudioManager.STREAM_MUSIC:播放音乐模式,其他模式参考API源码

3、setDataSource

设置播放资源,可以设置本地资源和网络资源

4、setLooping

是否循环播放

5、setVolume

设置播放的声音大小,0-1之间,0表示没声音,1表示声音最大

private void setVolume() {
    float volume = getFloat(data.volume, 1);
    if (volume >= 0 && volume <= 1) {
        player.setVolume(volume, volume);
    }
}

public float getFloat(String value, float defaultValue) {
    if (TextUtils.isEmpty(value)) {
        return defaultValue;
    }
    if (StringUtils.isNumber(value)) {
        return Float.parseFloat(value);
    }
    return defaultValue;
}

6、setPlaybackRate

设置播放倍速,这里设置0.5倍速到2倍速播放

private void setPlaybackRate() {
    float playbackRate = getFloat(data.playbackRate, 1);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && playbackRate >= 0.5 && playbackRate <= 2.0) {
        PlaybackParams params = player.getPlaybackParams();
        params.setSpeed(playbackRate);
        player.setPlaybackParams(params);
    }
}

7、player.prepare()

调用该方法,会触发onPrepared回调,在这里面播放和注册其他回调。

@Override
public void onPrepared(MediaPlayer mp) {
    LogUtils.d("开始播放");
    setSeek(data.startTime);
    player.start();
    //获取播放时长,每隔一秒回调一次
    duration = mp.getDuration();
    //监听进度
    handler.postDelayed(JsAudioHelper.this, 1000);
    //监听播放完毕
    player.setOnCompletionListener(JsAudioHelper.this);
    //监听播放错误
    player.setOnErrorListener(JsAudioHelper.this);
    //监听进度
    player.setOnSeekCompleteListener(JsAudioHelper.this);
    //监听buff
    player.setOnBufferingUpdateListener(JsAudioHelper.this);
}

 setSeek(data.startTime):设置开始播放的时间位置,单位秒 


private void setSeek(String position) {
    int pos = StringUtils.getInteger(position, 0);
    if (pos > 0) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            player.seekTo(pos * 1000, MediaPlayer.SEEK_CLOSEST);
        } else {
            player.seekTo(pos * 1000);
        }
    }
}

三、暂停播放

public void pause() {
    if (!isPaused()) {
        player.pause();
    }
    callBackYes(onPlayCallback);
    LogUtils.d("暂停");
}

四、停止播放

public void stop() {
    player.stop();
    handler.removeCallbacksAndMessages(null);
    currentTime = 0;
    callBackYes(onStopCallback);
    LogUtils.d("停止");
}

五、是否在播放

public boolean isPaused() {
    return !player.isPlaying();
}

六、获取当前的播放进度

@Override
public void run() {
    if (currentTime > player.getCurrentPosition()) {
        //暂停的时候player.getCurrentPosition为0
        return;
    }
    currentTime = player.getCurrentPosition();
    int percent = (int) Math.ceil(currentTime * 100f / duration);
    LogUtils.d("进度百分比:" + percent + " %");
    LogUtils.d("当前时间:" + calculateTime(currentTime / 1000));
    LogUtils.d("总时间:" + calculateTime(duration / 1000));
    if (percent == 100) {
        handler.removeCallbacks(this);
        currentTime = 0;
    } else {
        handler.postDelayed(this, 1000);
    }
}
public String calculateTime(int time) {
    int minute;
    int second;
    if (time > 60) {
        minute = time / 60;
        second = time % 60;
        //分钟再0~9
        if (minute >= 0 && minute < 10) {
            //判断秒
            if (second >= 0 && second < 10) {
                return "0" + minute + ":" + "0" + second;
            } else {
                return "0" + minute + ":" + second;
            }
        } else {
            //分钟大于10再判断秒
            if (second >= 0 && second < 10) {
                return minute + ":" + "0" + second;
            } else {
                return minute + ":" + second;
            }
        }
    } else if (time < 60) {
        second = time;
        if (second >= 0 && second < 10) {
            return "00:" + "0" + second;
        } else {
            return "00:" + second;
        }
    }
    return "";
}

七、是否播放资源

public void destroy() {
    stop();
    player.release();
    LogUtils.d("销毁");
}

        2021年7月19日于重庆渝北区酒店(出差)!!!

android播放网络音频 android播放网络音频,很简单的技术,但是可以学习下很简单的一个获取网络音频播放器,有进度条,播放,暂停,停止,重新播放,支持缓存,以下是源码,希望可以帮到大家布局文件很简单,就几个按钮,TextView,和SeekBar。 activity_audio_palyer.xml<FrameLayout xmlns:android="http://schemas.android.com/apk/r 阅读详情

相关推荐

车载Android之音频的播放流程

文章目录整体架构流程涉及到的类技术细节小结 整体架构流程 车载的音频服务和手机的音频服务不相同,手机上通常只有一个音频设备,但车机上可能会有多个,因此针对车载音频有专门的音频服务CarAudioService 涉及到的类 Audio是整个Android平台非常重要的一个组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理、音量调节等,主要包括如下部分: AudioTrack:负责回放数据的输出 AudioRecord:负责录音数据的采集 AudioFlinger: 负责管理和处理音频流

其实我是一个演员 1446

Android MediaPlayer setVolume方法设置程序音量

设置MediaPlayer的音量的方法一般是用AudioManager的setStreamVolume来设置音量,但如果有两个声音,比如设置了背景音乐,调节系统音量则,当前程序音量和背景音乐的声音会同时调节,如果只要调节当前程序的音量就要使用MediaPlayer的setVolume方法。 setVolume有两个参数,我还没搞懂这两个参数有什么区别(左右声道?),我是都设一样,参数的区间是0.

ibicf777的专栏 4万+

Android使用FFmpeg播放音频_qt 安卓ffmpeg avcodec模块不能识别

} open class ThirdActivity : AppCompatActivity() { private val inputFilePath = “/storage/emulated/0/GreenCheng/video/g4.mp4” private var audioTrack:AudioTrack? = null private lateinit var musicPlayer: MusicPlayer override fun onCreate(savedInstanceState: B

2401_87555551的博客 590

[已解决] MediaPlayer.setVolume设置声音大小失效问题

写一个很平常的音乐播放方法,发现声音很小,于是调用MediaPlayer.setVolume来设置声音,结果无效,代码如下: private static MediaPlayer m = null; public void play(Context context) { m = new MediaPlayer(); m = MediaPlayer.create(c

游逸的博客 3万+

Android获取音频焦点,播放自己的音频

这些天在项目上遇到了些困难:在播放语音的时候遇到了第三方音频播放器的干扰。 倒腾了两天,终于解决了,这里mark一下。 在Android系统中,如果想自己的音频播放不被第三方干扰,例如有时出现音乐和你的语音一起播放,或者是一声音大,一声音小。 这时候必须先获取音频的焦点(除了一些耍流氓的),然后才去播放你的语音,而且在播放结束后必须释放焦点。 1.请求音频焦点 public void

1865

Android MediaPlayer中的立体声控制

在Android开发中,是一个非常重要的类,它提供了音频和视频播放的功能。然而,很多开发者在使用的方法时,可能会遇到一些奇怪的问题。今天我们来探讨一下如何正确地使用方法来控制立体声。

m0_62153576的博客 191

Android 之 MediaPlayer 播放音频与视频

代码很简单,布局有个SurfaceView,然后调用getHolder获得一个SurfaceHolder对象, 在这里完成SurfaceView相关的设置,设置了显示的分辨率以及一个Callback接口, 重写了SurfaceView创建时,发生变化时,以及销毁时的三个方法!播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前 不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法!

leyang0910的博客 2407

MATLAB MinGW-w64 C/C++ 编译器 手动安装配置

根据Matlab版本与MinGW版本对应关系,手动安装、配置并测试MinGW

zjh2883的博客 7340

android setvolume,android – 如何管理MediaPlayer.setVolume()SeekBar来设置它的设备音量控制...

作为recommended by the doc,我想使用setvolume()方法来控制我的MediaPlayer的音量,但我对如何管理它有点困惑.我正在使用SeekBar设置音量,初始化为AudioManager.STREAM_MUSIC流中的当前音量.当用户不修改设备音量控制时这是有道理的,但是当他这样做时,我不确定我应该做什么,我有几个疑问:> MediaPlayer卷如何与设备卷相...

weixin_31739613的博客 1179

F280049C Crossbar X-BAR

X-BAR不是一个功能模块,只起内部外设与外设之间,或内部外设与GPIO的连接作用。配置X-BAR的就是在配置信号之间的连接。确实如这一节的开头所言,X-BAR提供了以各种配置连接设备输入、输出和内部资源的灵活性。学完这一节也知道为什么crossbar(X-BAR)的中文翻译是交叉开关。

xht2403267701的博客 3048

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 473

Delphi FMX安卓Android播放mp3音频内存流

Delphi FMX跨平台的MediaPlayer无法播放音频数据流只能打开音频文件播放,但有时候需要直接播放内存流数据而无需生成文件,可以通过把内存流转ByteArray再通过Android平台系统原生的MediaDataSource或ParcelFileDescriptor 加载播放流音频数据;用java编译打包添加到库即可。【笔记:安卓开发Java+Delphi FMX】

630

APS生产排程系统——ERP、MES、APS系统的关联和区别

APS生产排程系统——ERP、MES、APS系统的关联和区别

这里有一只小马吖 2万+

Android中播放音频六种方式

一. MediaPlayer: MediaPlayer确实强大,提供了对音频播放的各种控制,生命周期: 1. MediaPlayer支持:AAC、AMR、FLAC、MP3、MIDI、OGG、PCM等格式 2. 播放Raw下的元数据 mMediaPlayer=MediaPlayer.create(this, R.raw.audio); mMediaPlayer.start(); 3. MediaPlayer设置播放源的4中方式 setDataSource (String path) //从sd卡中加载

云梦九章~ 3万+

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1614

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1730

Android播放音频

Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)等,支持视频格式有3GPP和MPEG-4等。 使用MediaPlayer类播放音频 在Android中,提供了MediaPlayer类来播放音频。使用MediaPlayer类播放音频比较简单,只需要创建该类对象,并为其指定要播放的音频文件,然后调用该类的start()方法播放。MediaPl...

qq_40318498的博客 1万+

利用LATX技术在龙芯安同AOCS OS上部署坚果云:跨架构文件同步实战

本文详细介绍了如何在龙芯安同AOCS OS上,利用LATX指令翻译技术部署坚果云客户端,实现跨架构文件同步。通过安装LATX环境、解压x64安装包、运行安装脚本三步,成功在loongarch64架构上运行仅支持x86_64的软件,解决了国产平台办公协同的痛点,并分享了性能实测与优化建议。

weixin_29305337的博客 456

安卓学习日志 Day07 — 音频播放

彭格列家族永垂不朽!【家庭教师AMV/Beat Drop】

HEY-BLOOD的博客 1690

开源GIS -- 笔记

基础开发库 数据读写:GDAL/OGR(C/C++) ArcGIS和GE都是使用此工具 投影转换:Proj.4(C/C++) 拓扑计算:JTS(Java),GEOS(C++),Shapely(python) 组件式开发库 GeoTools(Java),DotSpatial(.NET) 空间分析: Scipy(通用科学计算、方程求解), numpy,NextworkX, rPy(统计分析), Scikit-learn,pysal(空间分析) 深度学习: Keras、 tensorflow、 pytor

DZ Space 4521

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

安卓使用MediaPlayer播放音频

今天需要用到安卓中的MediaPlayer播放音频,因此进行了学习。具体步骤大概有以下几步,操作不难。 1、定义及初始化类 private MediaPlayer mediaPlayer = new MediaPlayer(); private void initMediaPlayer(){ try{ mediaPlayer = MediaPlayer....

水舞残枫的博客 728

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

安卓中如何播放音频

安卓中如何播放音频 1 首先在app文件夹下创建一个assets文件夹,将你的音频文件放在该文件下。 2 代码逻辑 加载文件资源 try { mediaPlayer.setDataSource(getAssets().openFd("Lover.mp3"));//加载asset文件夹的资源 mediaPlayer.prepare();//文件资源准备 } catch (IOException e) { e.print

zhimingdaye的博客 543

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 如何播放音频,android如何播放和录制音频

视频录制功能正在走来,在Androidsdk中有与之相关的类:android.media.MediaRecorder。当然,因为模拟器上没有提供必要的硬件设施,所以在学习过程中并不能实现。Media能够播放来自任何地方的文件:一个实际的文件资源,系统中的一个文件或者是一个可用的网络链接。2.1如何播放media音频1、将文件放到你的工程的res/raw文件夹中,在这个文件夹中,Eclipse插件将...

weixin_28738397的博客 1312

android 小音频频繁播放

android 音频播放

Main_Stage的专栏 2681

Android中音频文件的播放

上一回我们讲了如何去录制一个音频文件。这次我们讲讲如何播放一个音频文件。录制音频,一般我们在聊天发送语音,或者语音上传的时候会用到。那既然需要录制,那一定是要有播放功能的。同时,我们播放音频,音乐也是需要播放功能。所以今天我就说说音频的播放功能。 1.媒体播放器MediaPlayer简介 既然是播放音频,那就要用到MediaPlayer。MediaPlayer是Android自带的音频和视频播放器,可用于播放MediaRecorder录制的媒体文件,包括amr,aac,mp4,3gp,还有mp3,wav

水月洞天 3011
上一篇: Android IBeacon
下一篇: Android FFmpeg集成
一杯清泉
博客等级 码龄11年 314粉丝 210原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值