该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
diffsum += diff;
}
else {
diffsum -= diff;
}
}
if (diffsum < amin) {
amin = diffsum;
pitch =d;
}
amd[d-pmin]= diffsum;
}
return pitch;
}
/**
* Waveファイルを読み込んで 何らかの信号処理をした上で、Waveファイルとして书き出す
* 现时点ではモノラルを想定
*/
public static void main(String[] args) throws IOException {
try {
/*
* .wavファイル名を引数として 読み込んでbyte配列 data[]に読み込む
*/
// オーディオファイルを开き入力ストリームに関系づける
String fname="1.1.wav";
AudioInputStream ais =
AudioSystem.getAudioInputStream(new File(fname));
// オーディオ入力ストリームからデータ読む
byte [] data = new byte [ais.available()];
ais.read(data);
ais.close();
// ファイルのフォーマットを调べる
AudioFormat af = ais.getFormat();
System.out.println("#channels: " + af.getChannels());
System.out.println("#isBigEndian: " + af.isBigEndian());
System.out.println("#FrameSize: " + af.getFrameSize());
System.out.println("#SampleSizeInBits: " + af.getSampleSizeInBits());
System.out.println("#SampleRate: " + af.getSampleRate());
if (af.getEncoding() == AudioFormat.Encoding.PCM_SIGNED) {
System.out.println("符号付きPCM");
}
else if (af.getEncoding() == AudioFormat.Encoding.PCM_UNSIGNED) {
System.out.println("符号なしPCM");
}
System.out.println("サイズ: " + data.length + "バイト: "
+ data.length / af.getSampleRate() / af.getFrameSize() + "秒");
short wavdata[] = new short[data.length/2+1];// 波形データ16ビット符号付き
/*
* byte配列から short配列に入れ直す
* byte配列は 下位8ビット→上位8ビットの顺にならんでいる
*/
// ステレオ16ビット符号付きPCM リトルエンディアンのみ
int Nsamples=0;
if (af.getChannels() <= 2 &&
af.getSampleSizeInBits() == 16 &&
af.getEncoding() == AudioFormat.Encoding.PCM_SIGNED &&
(!af.isBigEndian())) {
// 2Byte short に変换; Byteデータは 下位8ビット->上位8ビットの顺で并んでいる
int iw=0;
for (int i = 0; i < data.length-3; i += 4) {
wavdata[iw++] = (short)(data[i] & 0xff | (data[i+1] << 8));
if (af.getChannels() == 1) {
wavdata[iw++] = (short)(data[i+2] & 0xff | (data[i+3] << 8));
}
//if ((i%1000)==0 && wavdata[iw-2]>0)
//System.out.println(iw+" " + wavdata[iw-2] );
}
Nsamples= iw;
}
else {