最近在学习java的Io流,根据老师的思路,觉得可也用io流来截取自己喜欢的歌曲中高潮的部分,或者是截取几首歌后再合成一首新的歌曲.
1.mp3的截取
由于MP3文件是由字节组成的,所以可以选择用FileInputStream 来从文件系统中的某个文件中获取输入字节.
import java.io.*;
public class CutMp3
{
public static void main(String args[])
{
try
{
FileInputStream fis1=new FileInputStream("E:\\我的音乐\\苏打绿 - 小情歌.mp3");//读取字节.
fis.skip(2000000);//跳过这n个字节,根据文件的大小合理选择要跳过的字节数.
byte by1[]=new byte[1000000];
fis1.read(by1);//写入by1.length个字节.
FileOutputStream fos=new FileOutputStream("我的铃声.mp3",true);
fos.write(by1);
fis1.close();
fos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
2.将几个截取后的MP3文件合成一个新的MP3,这个新的MP3包含了所有截取的歌曲.
在io流中可以用FileOutputStream来写字节流文件,当然为了提高效率也可以使用BufferOutputStream.
代码如下:
//FileInputStream 从文件系统中的某个文件中获取输入字节
import java.io.*;
public class CutMp3
{
public static void main(String args[])
{
try
{
FileInputStream fis1=new FileInputStream("E:\\我的音乐\\苏打绿 - 小情歌.mp3");
FileInputStream fis2=new FileInputStream("E:\\我的音乐\\筷子兄弟 - 老男孩.mp3");
FileInputStream fis3=new FileInputStream("E:\\我的音乐\\邓丽君 - 我只在乎你.mp3");
fis1.skip(1500000);//跳过前面的n个字节.
byte by1[]=new byte[1000000];
fis1.read(by1);//写入by1.length个字节.
fis2.skip(2000000);
byte by2[]=new byte[2000000];
fis2.read(by2);
fis3.skip(2000000);
byte by3[]=new byte[2000000];
fis3.read(by3);
FileOutputStream fos=new FileOutputStream("我的铃声.mp3",true);//true是为了前面写入的不被覆盖.
fos.write(by1);
fos.write(by2);
fos.write(by3);
fis1.close();
fis2.close();
fis3.close();
fos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
这样就可以得到自己喜欢的铃声了.在读写前已经知道了MP3有多少字节了,所以可以根据实际情况跳过n个字节后在读取.