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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();
        }

}

程序不足之处,请各路大神指点一二。
或者还有好的想法,也可以交流下。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马