最近在學習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個字節後在讀取.