package Music_jiequ;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Music_cut {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
int temp = 1024*8; // 以数组形式读取文件流
int l = 0; // 记录读取存进数组的次数
int perbyte=0; // 储存每秒读取的字节
System.out.println("请输入文件路径:");
String music_place = input(); //输入文件路径
System.out.println("请输入音乐时长:格式(00:45)");
String time_music = input();//输入歌曲总时间
System.out.println("请输入截取时间段:格式(00:05-00:35)");
String time_jiequ = input(); // 截取时间段
System.out.println("请输入新创建音乐副本名称:");
String music_name = input(); // 创建新音乐名称
float flu=0; // 每秒存储的频率
File f = new File(music_place);
long filelen = f.length(); //获取音乐文件的大小
flu = (float)filelen/temp/getSecond(time_music);// 每秒存储的频率
int time[] = getTime_jiequ(time_jiequ); // 获取截取时间段 秒数
FileInputStream fis = new FileInputStream(f); // 创建输入流对象 (读取音乐文件)
FileOutputStream fos =new FileOutputStream(music_name);//创建输出流对象(创建音乐副本)
byte b[] = new byte[temp];
int len = 0;
while((len=fis.read(b))!=-1){
if(l/flu>time[0]&&l/flu<time[1]) // 将截取时间段 写入新的音乐文件
fos.write(b,0,len);
++l;
}
fis.close();
fos.close();
}
public static int[] getTime_jiequ(String time_jiequ) {
Pattern p = Pattern.compile("\\d{2}\\p{Punct}\\d{2}\\p{Punct}\\d{2}\\p{Punct}\\d{2}");
Matcher m = p.matcher(time_jiequ);
int t[][] = new int[2][2]; // 记录 (00:05-00:35)正则后数据
int time[] = new int[2]; // 获取开始截取时间 和 结束时间
boolean b = m.matches(); //先调用 matches 才可调用group
String s[] = m.group().split("-");
for (int i = 0; i < s.length; i++) {
String s1[] = s[i].split(":");
for (int j = 0; j < s1.length; j++) {
t[i][j] = Integer.parseInt(s1[j]);
}
}
time[1] = t[1][1]+t[1][0]*60;// 结束截取时间
time[0] = t[0][1]+t[0][0]*60; //开始截取时间
return time;
}
public static int getSecond(String time_music) {
String str[] = time_music.split(":");
int score= Integer.parseInt(str[0])*60+Integer.parseInt(str[1]);
return score;
}
public static String input() {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
return scan.nextLine();
}
}
程序不足之处,请各路大神指点一二。
或者还有好的想法,也可以交流下。
|
|