最爱吃猪肉 发表于 2022-8-11 23:40

一个简单的易语言播放器分享 成品+源码

成品+源码:https://wwz.lanzout.com/iOxYN09em3yd
边学边写,弄了三四天,分享出来给大家参考以下吧。
另外程序有个BUG,反复点击播放6-10次左右有概率直接把程序玩死。有大佬能帮忙看看啥问题就更好了~

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 歌曲数, 整数型
.程序集变量 歌单, 文本型, , "0"
.程序集变量 i, 整数型, , , 第几首歌
.程序集变量 s, 整数型, , , 歌曲播放进度
.程序集变量 正在播放, 文本型
.程序集变量 配置播放进度, 文本型
.程序集变量 mp3状态, 整数型
.程序集变量 播放状态展示, 文本型
.程序集变量 播放列表展示内容, 文本型
.程序集变量 运行目录, 文本型
.程序集变量 运行目录长度, 整数型
.程序集变量 文件名长度, 整数型
.程序集变量 文件夹路径, 文本型
.程序集变量 可否展示进度, 逻辑型
.程序集变量 是否保存, 逻辑型
.程序集变量 循环模式, 逻辑型

.子程序 __启动窗口_创建完毕

运行目录 = 取运行目录 ()
选择框_保存进度.选中 = 读配置项 (取运行目录 () + “\播放进度.ini”, “保存进度”, “保存进度”, ) = “真”
单选框_列表循环.选中 = 读配置项 (取运行目录 () + “\播放进度.ini”, “循环模式”, “列表循环”, ) = “真”
单选框_单曲循环.选中 = 读配置项 (取运行目录 () + “\播放进度.ini”, “循环模式”, “单曲循环”, ) = “真”
单选框_随机播放.选中 = 读配置项 (取运行目录 () + “\播放进度.ini”, “循环模式”, “随机播放”, ) = “真”
置随机数种子 ()

.如果真 (选择框_保存进度.选中)
    配置播放进度 = 读配置项 (取运行目录 () + “\” + “播放进度.ini”, “歌曲列表”, “列表”, )
.如果真结束
s = 到整数 (读配置项 (取运行目录 () + “\” + “播放进度.ini”, “播放进度”, “进度”, ))
歌单 = 分割文本 (配置播放进度, “,”, )
歌曲数 = 取数组成员数 (歌单)' 读取歌曲数
可否展示进度 = 真


.如果真 (歌曲数 = 0 或 i = 0)
    滑块条1.禁止 = 真
.如果真结束

.如果真 (s ≠ 0)
    按钮_暂停继续播放.标题 = “继续播放”
.如果真结束

.计次循环首 (歌曲数, i)' 添加播放进度到组合框1
    组合框_音乐列表.加入项目 (歌单 + #换行符, )
.计次循环尾 ()


.子程序 _按钮_选择文件_被单击

' 删除文件 (取运行目录 () + “\” + “播放进度.ini”)
歌单 = 多文件对话框 (“请选择”, “音乐文件.mp3|*.mp3”, , 取运行目录 (), , )' 载入播放进度
歌曲数 = 取数组成员数 (歌单)' 读取歌曲数
.如果真 (歌曲数 = 0)
    _按钮_选择文件_被单击 ()
.如果真结束
.计次循环首 (歌曲数, i)
    配置播放进度 = 配置播放进度 + 歌单 + “,”
.计次循环尾 ()

.如果真 (选择框_保存进度.选中)
    写配置项 (取运行目录 () + “\” + “播放进度.ini”, “歌曲列表”, “列表”, 配置播放进度)' 写播放进度
.如果真结束

.计次循环首 (歌曲数, i)' 添加播放进度到组合框1
    组合框_音乐列表.加入项目 (歌单 + #换行符, )
.计次循环尾 ()


.子程序 _标签1_反馈事件, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型

.如果真 (单选框_列表循环.选中)
    .如果真 (参数一 = 100)
      _按钮_下一首_被单击 ()' 播放完自动下一首
    .如果真结束

.如果真结束

.如果真 (单选框_单曲循环.选中)
    .如果真 (参数一 = 100)
      s = 0
      播放 ()
    .如果真结束

.如果真结束


.如果真 (单选框_随机播放.选中)
    .如果真 (参数一 = 100)
      i = 取随机数 (1, 歌曲数)
      s = 0
      播放 ()
    .如果真结束

.如果真结束

s = 参数一
.如果真 (可否展示进度)
    滑块条1.位置 = s
.如果真结束
.如果真 (歌曲数 ≠ 0)
    滑块条1.禁止 = 假
.如果真结束

.如果真 (选择框_保存进度.选中)

.如果真结束


.子程序 播放
.局部变量 歌曲名位置, 整数型

同步播放MP3 (歌单 , s, 标签1, )' 播放子程序
组合框_音乐列表.内容 = 歌单


.子程序 _按钮_上一首_被单击

.如果真 (单选框_随机播放.选中)
    i = 取随机数 (1, 歌曲数)
    s = 0
    播放 ()
.如果真结束

.如果真 (单选框_列表循环.选中 或 单选框_单曲循环.选中)
    .如果真 (歌曲数 = 0)
      _按钮_选择文件_被单击 ()
    .如果真结束
    i = i - 1
    s = 0
    .如果真 (i < 1)
      i = 歌曲数
    .如果真结束
    播放 ()
.如果真结束


.子程序 _按钮_下一首_被单击

.如果真 (单选框_随机播放.选中)
    i = 取随机数 (1, 歌曲数)
    s = 0
    播放 ()
.如果真结束

.如果真 (单选框_列表循环.选中 或 单选框_单曲循环.选中)
    .如果真 (歌曲数 = 0)
      _按钮_选择文件_被单击 ()
    .如果真结束
    i = i + 1
    s = 0
    .如果真 (i > 歌曲数)
      i = 1
    .如果真结束
    播放 ()

.如果真结束


.子程序 __启动窗口_可否被关闭, 逻辑型

.如果 (信息框 (“是否关闭当前窗口”, 1 + 32, “是否关闭当前窗口”, ) = 0)' 关闭窗口前确认
    .如果真 (i ≠ 0)
      写配置项 (取运行目录 () + “\播放进度.ini”, “保存进度”, “保存进度”, 选择 (选择框_保存进度.选中, “真”, “假”))
      写配置项 (取运行目录 () + “\播放进度.ini”, “循环模式”, “列表循环”, 选择 (单选框_列表循环.选中, “真”, “假”))
      写配置项 (取运行目录 () + “\播放进度.ini”, “循环模式”, “单曲循环”, 选择 (单选框_单曲循环.选中, “真”, “假”))
      写配置项 (取运行目录 () + “\播放进度.ini”, “循环模式”, “随机播放”, 选择 (单选框_随机播放.选中, “真”, “假”))

      .如果真 (选择框_保存进度.选中)
            写配置项 (取运行目录 () + “\” + “播放进度.ini”, “播放进度”, “曲目”, 到文本 (i))' 写播放进度
      .如果真结束
      .如果真 (选择框_保存进度.选中)
            写配置项 (取运行目录 () + “\” + “播放进度.ini”, “播放进度”, “进度”, 到文本 (s))' 写播放进度
      .如果真结束

    .如果真结束
    返回 (真)
.否则
    返回 (假)
.如果结束


.子程序 _组合框_音乐列表_将弹出列表

.如果真 (歌曲数 = 0)' 弹出列表时运行选择文件
    _按钮_选择文件_被单击 ()
.如果真结束


.子程序 _组合框_音乐列表_列表项被选择
.局部变量 f, 整数型

f = 组合框_音乐列表.现行选中项
i = f + 1
s = 0
播放 ()

.子程序 _按钮_暂停继续播放_被单击

mp3状态 = 取MP3播放状态 ()
.判断开始 (mp3状态 = 0)
    i = 到整数 (读配置项 (取运行目录 () + “\” + “播放进度.ini”, “播放进度”, “曲目”, ))
    .如果真 (歌曲数 = 0)
      _按钮_选择文件_被单击 ()
    .如果真结束
    s = 到整数 (读配置项 (取运行目录 () + “\” + “播放进度.ini”, “播放进度”, “进度”, ))
    s = s - 1
    .如果真 (i > 歌曲数)
      i = 1
    .如果真结束
    .如果真 (i = 0)
      i = 1
    .如果真结束
    按钮_暂停继续播放.标题 = “暂停播放”
    播放 ()
.判断 (mp3状态 = -1)
    继续播放MP3 ()
    按钮_暂停继续播放.标题 = “暂停播放”
.判断 (mp3状态 = 1)
    暂停播放MP3 ()
    按钮_暂停继续播放.标题 = “继续播放”
.默认

.判断结束


.子程序 _滑块条1_位置被改变

可否展示进度 = 假
同步播放MP3 (歌单 , 滑块条1.位置, 标签1, )' 播放子程序
可否展示进度 = 真

.子程序 _选择框_保存进度_被单击



.子程序 _单选框_列表循环_被单击

循环模式 = 单选框_列表循环.选中
调试输出 (循环模式)


.子程序 _单选框_单曲循环_被单击

循环模式 = 单选框_单曲循环.选中
调试输出 (循环模式)


.子程序 _单选框_随机播放_被单击

循环模式 = 单选框_列表循环.选中
调试输出 (循环模式)

Mr.[先知] 发表于 2022-8-12 10:37

应该是用自带的组件播放的
楼主可以找一下bass模块 功能更强哦
代码有很多问题哦
比如选择一个mp3,会自动播放,然后再选择文件 选择同一个 在列表中有两个一样的 选择第2个 提示数组下标越界

孤狼微博 发表于 2022-8-11 23:58

谢谢分享,

luxingyu329 发表于 2022-8-12 00:08

原来易语言是这个样子的,支持楼主

zxyzdcfy 发表于 2022-8-12 01:04

谢谢楼主

Hiro52 发表于 2022-8-12 07:27

谢谢楼主

qqdns 发表于 2022-8-12 08:13

分享美的 ,感谢分享

iawyxkdn8 发表于 2022-8-12 08:27

这种播放器没有什么出路,不过用易语言写,支持一下

zhjm21 发表于 2022-8-12 08:41

学习了,谢楼主提供!

d199212 发表于 2022-8-12 09:03

学习了,感谢

xmtian 发表于 2022-8-12 09:17

感谢分享,支持。
页: [1] 2 3 4
查看完整版本: 一个简单的易语言播放器分享 成品+源码