A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡增辉 中级黑马   /  2013-5-8 21:09  /  1720 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蔡增辉 于 2013-5-9 11:29 编辑

写了个代码,想把两个独立的MP3文件合并为一个,结果合并得到的文件只能播放排在前面的那个MP3文件,后面的那个无法播放,求助大家帮忙看下;


import java.io.*;
import java.util.*;

public class MergeMp3Demo {
        public static void main(String[] args) throws IOException{
                Vector<InputStream> v=new Vector<InputStream>();
                v.add(new FileInputStream("C:/Users/FC-JAVA/Desktop/tmp/1.mp3"));
                v.add(new FileInputStream("C:/Users/FC-JAVA/Desktop/tmp/2.mp3"));
                Enumeration<InputStream> en=v.elements();
                SequenceInputStream sis =new SequenceInputStream(en);
                FileOutputStream fos=new FileOutputStream("C:/Users/FC-JAVA/Desktop/tmp/merge.mp3");
                byte[] by=new byte[1024];
                int len=0;
                while ((len=sis.read(by))!=-1){
                        fos.write(by,0,len);
                }
                sis.close();
                fos.close();
        }
}


追补:最终用不同播放器试了下,系统自带的播放器只能播放第一首,千千静听两首都可以播放,看来正如Chelsea_Lampard所说的是两首音乐之间衔接的问题;多谢各位的回答。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

2 个回复

倒序浏览
这个啊..... IO的合并流没这么强大...
后面的播放很正常了....
这个估计无解了...
除非使用音频处理软件能解决....
虽然两个都MP3文件,但是合并在一起某些东西,未必符合MP3底层的规范。才导致只能播放第一首的原因。


等高手给你解答吧?
楼主注意及时修改帖子分类,否则我会不厌其烦的提醒你的哦??{:soso_e113:}
回复 使用道具 举报
代码没问题 ,是这样的:
每个MP3由两到三个部分构成:ID3v2标签+MP3声音+(ID3v1标签),后面一个不一定有。其中的标签就是MP3的各种信息,比如说歌曲名、演唱者、唱片封面什么的所以按你这种直接合并的方式,合并出来的就是:标签+MP3声音+标签+标签+MP3声音+标签自然中间就有一段没有声音了建议你参考标签格式,对于MP3文件进行处理,然后再合并就好了
id3官网:www.id3.org  (英文的)
或者你可以直接搜索id3v2很多资料都可以用

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马