无忧启动论坛
标题: 求大神重写MediaPlayer类 播放代码!!【非整套代码】 [打印本页]
作者: 879792799 时间: 2023-8-3 21:11
标题: 求大神重写MediaPlayer类 播放代码!!【非整套代码】
本帖最后由 879792799 于 2023-8-8 07:37 编辑
谢谢 2# 2011阿星大神![](static/image/smiley/default/lol.gif)
指点!!太谢谢了!
【无忧首发 -- 全球第一款可以播放文件夹每个音频随机部分的手机播放器】
今天搞出一个半成品源码基本能用 供诸位大大修改【编译器有的会带病毒所以不建议新手使用】
其实可以新建一个app[注意包名要一样] 然后把下面三个源码文件直接替换 就可以编译成apk!
=========================整套源码===========================
1.AndroidManifest.xml
- <?xml version='1.0' encoding='utf-8'?>
- <manifest
- xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.mycompany.myapp">
-
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-
-
-
-
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme"
- android:resizeableActivity="false">
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <meta-data
- android:name="android.max_aspect"
- android:value="4.0"/>
- </application>
- </manifest>
复制代码
2.activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="先在存储器根目录新建好NX文件夹后,把多个mp3文件放进去,再次打开本APP就可以快速预览这些音频了。目前是个半成品当然你可以自己随意修改代码让自己满意!"
- android:layout_marginTop="100dp"/>
- </LinearLayout>
复制代码
3.MainActivity.java --- \src\main\java\com\mycompany\myapp\MainActivity.java
- try {
- repeatAToB(startPos, endPos, 1); //从开始时间到结束时间播放 且播放重复一遍
- } catch (Exception e) {}
- }
-
-
- else{
-
- currentIndex++; //再把音频数组下标加一位,就是下一个音频文件
- playNextAudio(); //再次从playNextAudio处执行
- }
- }
- private void repeatAToB(final int startPos, final int endPos, final int repeatTimes)throws Exception { //这个方法就是从随机起始点A播放A播放到结束时间点B
-
- mediaPlayer.seekTo(startPos);
- mediaPlayer.start();
- CountDownTimer cntr_aCounter = new CountDownTimer(/* millisInFuture= */endPos - startPos, /* countDownInterval= */1000) { //倒计时方法
- public void onTick(long millisUntilFinished) {
- // DO SOMETHING
- }
-
- public void onFinish() {
- // Code fire after finish
- if((repeatTimes - 1) > 0){
- try {
- repeatAToB(startPos, endPos, repeatTimes - 1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }else{
- mediaPlayer.stop();
- currentIndex++;
- playNextAudio();
- }
- }
- };
- cntr_aCounter.start();
- }
- //从内存中销毁 并退出
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mediaPlayer.release();
- handler.removeCallbacksAndMessages(null);
- }}
复制代码
=========================整套源码=============================
我想要这样这样的效果【只需要重写这一段 不是整套app代码】:
写一小段MediaPlayer播放代码【其他方法也行】 就只播放音频中一部分-------随机位置往后2分钟时间段 然后就播放下一音频
【目的】就是快速了解或者说预览大数量音频的内容
【比如喜马拉雅专辑或者网盘分享一下载就上百集 逐个听太难了】
作者: 2011阿星 时间: 2023-8-3 21:11
作者: 879792799 时间: 2023-8-3 21:12
本帖最后由 879792799 于 2023-8-19 13:23 编辑
坐等大神出手 占楼备用!
======================================================
求大神写一小段MediaPlayer类 播放代码!!
https://blog.csdn.net/nanoage/article/details/127363147
【非整套代码】音频播放器代码框架已经搭好了
自带MediaPlayer代码是从头播放到尾然后播放下一个音频【下面是常见调用代码】
MediaPlayer的工作流程是这样的:1、首先创建MediaPlaer对象;
2、然后调用setDataSource()方法来设置音频文件的路径;
3 、再调用prepare()方法使MediaPlayer进入到准备状态;
4 、调用start方法就可以播放音频。
mPlayer = new MediaPlayer(); 实例化
mPlayer.setDataSource(mAudioFileName); 设置需要播放mp3的路径
mPlayer.prepare(); 准备
mPlayer.start(); 开始播放
mPlayer.setLooping(true); 设置循环模式
MediaPlayer其相关方法有:
void seekTo(int msec):从指定位置播放,参数为用毫秒定义的位置
int getDuration():得到音频长度,即总的毫秒数
void setVolume(float leftVolume, float rightVolume):设置音量
==================以下搜索得来 仅供参考==================
MediaPlayer其主要方法有:
void setDataSource(String path):设置要播放的音频文件位置,参数path为文件路径或Uri
void prepare():setDataSource并不载入资源,需要调用此方法准备资源
void start():开始/恢复播放
void stop():停止播放,调用后无法再播放
void pause():暂停播放,可以再用start恢复播放
void reset():重置到刚刚创建后的状态
void release():释放掉相关的资源
void seekTo(int msec):从指定位置播放,参数为用毫秒定义的位置
int getCurrentPosition():得到当前播放位置,即播放的毫秒数
int getDuration():得到音频长度,即总的毫秒数
boolean isPlaying():得到当前音频是否正在播放
void setLooping(boolean looping) / boolean isLooping():循环播放
void setVolume(float leftVolume, float rightVolume):设置音量
https://www.iteye.com/blog/deyum-1459255
https://blog.csdn.net/speedpower/article/details/84172071
近日在做一个的小应用,被MP3AB段复读的功能困扰了很久,最后终于在网上找到一个解决方法,
就是使用CountDownTimer让MediaPlayer只播放MP3的某个区段,轻松解决了AB段复读的功能。详细代码如下:
// 复读第10秒到第20秒这个区间的音频
int startPos = 10000;
int endPos = 20000;
mMediaPlayer.seekTo(startPos);
mMediaPlayer.start();
CountDownTimer cntr_aCounter = new CountDownTimer(/* millisInFuture= */endPos - startPos, /* countDownInterval= */1000) {
public void onTick(long millisUntilFinished) {
}
- public void play(final String filePath) throws Exception {
- try {
- if (mMediaPlayer == null) {
- // 创建MediaPlayer对象并设置Listener
- mMediaPlayer = new MediaPlayer();
- } else {
- // 复用MediaPlayer对象
- mMediaPlayer.reset();
- }
- mMediaPlayer.setDataSource(filePath);
- mMediaPlayer.prepare();
- mMediaPlayer.setVolume(10.f, 1.0f);
-
- // 复读第10秒到第20秒这个区间的音频
- int startPos = 10000;
- int endPos = 20000;
- // Try to play three times
- repeatAToB(startPos, endPos, 3);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private void repeatAToB(final int startPos, final int endPos, final int repeatTimes)throws Exception {
-
- mMediaPlayer.seekTo(startPos);
- mMediaPlayer.start();
- CountDownTimer cntr_aCounter = new CountDownTimer(/* millisInFuture= */endPos - startPos, /* countDownInterval= */1000) {
- public void onTick(long millisUntilFinished) {
- // DO SOMETHING
- }
-
- public void onFinish() {
- // Code fire after finish
- if((repeatTimes - 1) > 0){
- try {
- repeatAToB(startPos, endPos, repeatTimes - 1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }else{
- mMediaPlayer.stop();
- }
- }
- };
- cntr_aCounter.start();
- }
复制代码
==================以上搜索得来 仅供参考==================
一下备份一下阿星大神的原帖 防止修改后看不懂
作者: 邪恶海盗 时间: 2023-8-3 23:12
GitHub开源,估计会有不少思路...
作者: ZOUyang111 时间: 2023-8-3 23:48
强得我看不懂
作者: 879792799 时间: 2023-8-4 17:50
谢谢大神!估计能行 ![](static/image/smiley/default/lol.gif)
不懂再来请教哈!
作者: 879792799 时间: 2023-8-4 21:43
本帖最后由 879792799 于 2023-8-6 08:47 编辑
呵呵 自己解决了【就这一句菜鸟搞了两天】
有点小问题 ,编译时提示 this 错误
14. mediaPlayer.setOnCompletionListener(this);
================解决办法加入 implements OnCompletionListener================
第一句改成这样就不报错了 public class MainActivity extends Activity implements OnCompletionListener
-
Screenshot_20230804_215749.jpg
(302.71 KB, 下载次数: 105)
作者: cduser 时间: 2023-8-5 08:47
这是要横空出世大杀器么
作者: 879792799 时间: 2023-8-5 09:28
本帖最后由 879792799 于 2023-8-5 09:33 编辑
谈不上吧 个人感觉比较实用这个功能
这是手机apk就是面对数量庞大的音频 每个音频只听其中任意2分钟就跳到下一首
【目的】就是快速了解或者说预览大数量音频的内容
【比如喜马拉雅专辑或者网盘分享一下载就上百集 逐个听太难了】
作者: 879792799 时间: 2023-8-6 19:41
今天终于搞成啦 一楼提供整套源码 算是半成品吧![](static/image/smiley/default/lol.gif)
mark一下
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) |
Powered by Discuz! X3.3 |