论坛首页 Java企业应用论坛

(十八)用JAVA编写MP3解码器——迷你播放器

浏览 15656 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-09-03  
楼主,现在大概可以播放和暂停了.其他功能正在添加.我可能需要修改你的包中的代码.
界面是仿的google音乐的播放器.

如下图:


  • 大小: 81.8 KB
0 请登录后投票
   发表时间:2010-09-03   最后修改:2010-09-04

整理了下现在的源代码.先传上来,做个备份
本来想传到google code上的,结果被墙了.
运行需要导入jmp123.jar
果然,我们的网络是最目田的.

 

new:

加入了添加mp3的功能

加入了配置文件的读取

现在可以播放上一个,下一个了,并且不会因此而死锁了

 

todo:

暂时自己写了个tag读取方法显示mp3部分信息。以后会改成使用jmp中的ID3Tag显示详细信息。

写入分组和歌曲信息到配置文件中

播放顺序:循环,随机和重复

歌曲进度信息

音量管理?

同步歌词??

and so on...

 

 

 

0 请登录后投票
   发表时间:2010-09-04  
东西挺好的,希望坚持下去。别中断了。
0 请登录后投票
   发表时间:2010-09-04  
i2534 写道
楼主,现在获得tag需要修改源代码了.

已经修改了,应该再没的啥问题了吧。修改了几处,新的jar包已经上传到http://jmp123.sf.net/。
0 请登录后投票
   发表时间:2010-09-04  
i2534 写道
楼主,现在获得tag需要修改源代码了.

随便DIY 94 了,Header.java中通过解析VBR能得到VBR/ABR压缩编码的MP3文件的总帧数,CBR的还没写上去呢,自己添上去吧。
0 请登录后投票
   发表时间:2010-09-04  
今天我又稍微改了下。现在可以添加删除分组,给分组添加删除歌曲,选择歌曲播放。但是播放顺序,保存读取分组信息这些基本功能还没有完成。我周一到周四比较忙。周五回公司全天有空。然后业余时间在找房子。住的房子马上到期,找了一个星期新房子,真TM贵。。。明抢啊。
0 请登录后投票
   发表时间:2010-09-04   最后修改:2010-09-10
对播放线程做了封装,感觉比较满意。发上来让大家拍砖。
思路就是对线程的阻塞和中断。在jmp那个播放线程了修改。
改了多次,实验了多次,终于有了这个版本。

线程真是不好玩,还是出现了问题。

终于遇到一次死锁了,哈哈。

解决很简单,再加一个标志死亡的锁存器,在彻底死亡之前一直等待。

这里不贴代码了,代码见压缩包吧.
0 请登录后投票
   发表时间:2010-09-10  
楼主,我今天在写外壳的时候,发现自然播放完毕会出现.以下错误:
java.lang.ArrayIndexOutOfBoundsException: 2048
at jmp123.instream.BuffRandAcceFile.read(BuffRandAcceFile.java:103)
at jmp123.decoder.Header.syncWord(Header.java:320)
at jmp123.decoder.Header.syncSearch(Header.java:267)
at jmp123.decoder.Header.syncFrame(Header.java:249)
at jmp123.shell.ShellPlayer$1.run(ShellPlayer.java:71)
网络文件的播放我还没有测试.
0 请登录后投票
   发表时间:2010-09-10   最后修改:2010-09-10
i2534 写道
楼主,我今天在写外壳的时候,发现自然播放完毕会出现.以下错误:
java.lang.ArrayIndexOutOfBoundsException: 2048
at jmp123.instream.BuffRandAcceFile.read(BuffRandAcceFile.java:103)
at jmp123.decoder.Header.syncWord(Header.java:320)
at jmp123.decoder.Header.syncSearch(Header.java:267)
at jmp123.decoder.Header.syncFrame(Header.java:249)
at jmp123.shell.ShellPlayer$1.run(ShellPlayer.java:71)
网络文件的播放我还没有测试.

(1).是这样的,是文件读完时抛出的异常。很多方法没有返回值,在开始编程的阶段,主要精力放在解码器代码的优化上了,程序的流程是用抛出异常去处理的。
等有空的时候我把代码整理下,让一些方法带回返回值,根据返回值确定程序流程。

(2).GUI应该加入:快退、1--8倍速快进(可以选择是否回放监听)。功能调用很简单,直接调用静态方法。完成这些功能的方法正在编写代码和测试中,妥了就放出来~~

(3).不用写处理解码播放的线程,需要暂停时调用Audio(true)解码线程被阻塞;调用Audio(false)该线程继续执行。
0 请登录后投票
   发表时间:2010-09-10  
lfp001 写道
i2534 写道
楼主,我今天在写外壳的时候,发现自然播放完毕会出现.以下错误:
java.lang.ArrayIndexOutOfBoundsException: 2048
at jmp123.instream.BuffRandAcceFile.read(BuffRandAcceFile.java:103)
at jmp123.decoder.Header.syncWord(Header.java:320)
at jmp123.decoder.Header.syncSearch(Header.java:267)
at jmp123.decoder.Header.syncFrame(Header.java:249)
at jmp123.shell.ShellPlayer$1.run(ShellPlayer.java:71)
网络文件的播放我还没有测试.

是这样的,是文件读完时抛出的异常。很多方法没有返回值,在开始编程的阶段,主要精力放在解码器代码的优化上了,程序的流程是用抛出异常去处理的。
等有空的时候我把代码整理下,让一些方法带回返回值,根据返回值确定程序流程。

另外,你不需要写一个处理解码播放的线程,暂停时调用Audio(true)解码线程被阻塞;调用Audio(false)该线程继续执行。

貌似我刚开始没写,直接用Audio(true)这种,但是这样只是阻塞了声音,while(true)循环会快速循环完毕.即线程没有阻塞.
本来我今天打算完成进度条控制和自动顺序播放的,结果下午和房东吵了一架.完全静不下心来写程序.
现在这个可以保存和读取播放列表.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics