资源描述
/*
* 我真诚地保证:
* 我自己独立地完成了整个程序从分析、设计到编码的所有工作。如果在上述过程中,我遇到了什么困难而求教于人,那么,我将在程序实习报告中
* 详细地列举我所遇到的问题,以及别人给我的提示。 在此,我感谢 XXX, …, XXX对我的启发和帮助。下面的报告中,我还会具体地提到 他们在各个方法对我的帮助。
* 我的程序里中凡是引用到其他程序或文档之处, 例如教材、课堂笔记、网上的源代码以及其他参考书上的代码段, 我都已经在程序的注释里很清楚地注明了引用的出处。
* 我从未抄袭过别人的程序,也没有盗用别人的程序,不管是修改式的抄袭还是原封不动的抄袭。 我编写这个程序,从来没有想过要去破坏或妨碍其他计算机系统的正常运转。
* <李宏>
*/
package aaa;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class StereoToMono {
public static void transition1(String sourceFilePath,String newFilePath,int bytes)throws IOException{//第一种转换方法
FileInputStream fileInputStream = new FileInputStream(sourceFilePath);
FileOutputStream fileOutputStream = new FileOutputStream(newFilePath);
for(int i=0;i<44;i++){
fileOutputStream.write(fileInputStream.read());
}
int m=0,data[] = new int[bytes];
while(fileInputStream.available()!=0){
data[m]=fileInputStream.read();
fileOutputStream.write(data[m]);
m++;
if(m==(bytes/2+1)){
for(int j=0;j<(bytes/2+1);j++){
fileInputStream.read();
fileOutputStream.write(data[j]);
}
m=0;
}
}
fileOutputStream.flush();
fileInputStream.close();
fileOutputStream.close();
}
public static void transition2(String sourceFilePath,String newFilePath,int bytes)throws IOException{//第儿种转换方法
FileInputStream fileInputStream = new FileInputStream(sourceFilePath);
FileOutputStream fileOutputStream = new FileOutputStream(newFilePath);
int k= (fileInputStream.available()-44)/2;
int j=k+36;
for(int i=0;i<44;i++){
int l=fileInputStream.read();
switch(i){
case 4: fileOutputStream.write(j&255);break;
case 5: fileOutputStream.write((j>>8)&255);break;
case 6: fileOutputStream.write((j>>16)&255);break;
case 7: fileOutputStream.write(j>>24);break;
case 22:fileOutputStream.write(1);break;
case 32:fileOutputStream.write(l/2);break;
case 40:fileOutputStream.write(k&255);break;
case 41:fileOutputStream.write((k>>8)&255);break;
case 42:fileOutputStream.write((k>>16)&255);break;
case 43:fileOutputStream.write(k>>24);break;
default:fileOutputStream.write(l);break;
}
}
int i=0,data[]=new int[bytes];
while(fileInputStream.available()!=0){
data[i]=fileInputStream.read();
fileOutputStream.write(data[i]);
i++;
if(i==(bytes/2+1)){
for(int n=0;n<(bytes/2+1);n++){
fileInputStream.read();
}
i=0;
}
}
fileOutputStream.flush();
fileInputStream.close();
fileOutputStream.close();
}
public static void main(String[] args) throws IOException{
Scanner reader1 = new Scanner(System.in);
System.out.println("请输入源双声道音频文件路径:");
String string1 = reader1.next();
FileInputStream fileInputStream = new FileInputStream(string1);
fileInputStream.skip(22);
if(fileInputStream.read()!=2){//判断双声道
System.out.println("你输入的不是双声道音频文件");
fileInputStream.close();
System.exit(0);
}
fileInputStream.skip(11);
int bytes=fileInputStream.read()/8;
fileInputStream.close();
Scanner reader2 = new Scanner(System.in);
System.out.println("请输入转换双声道之后与sample1.wav文件相似的文件路径:");
String string2 = reader2.next();
Scanner reader3 = new Scanner(System.in);
System.out.println("请输入转换双声道之后与sample2.wav文件相似的文件路径:");
String string3 = reader3.next();
transition1(string1,string2,bytes);
System.out.println("温馨提示:转换完成了第一种方法......");
transition2(string1,string3,bytes);
System.out.println("温馨提示:转换完成了第二种方法......");
System.out.println("温馨提示:转换成功");
}
}
展开阅读全文