上級:
同じエンコーダーを 2 つの異なる方法で使用します。
方法 #1: 生のオーディオを録音してファイル全体に保存し、すべてが終了したらファイルを圧縮します。結果完璧なオーディオ
方法 #2: 生のオーディオを録音し、フレームごとにエンコードします。結果音飛び
方法 2 でスキップが発生するのはなぜですか?
低レベル
方法 1 のコード (FileOutputStream fos に書き込み、すべての書き込みが終了したら圧縮)
public void writeSample(short[] buf) throws IOException {
byte[] byteArray = Util.toByteArray(buf,false);
bytesWritten += byteArray.length;
fos.write(byteArray);
}
方法 2 のコード
public void writeSample(short[] buf) throws IOException {
byte[] byteArray = Util.toByteArray(buf,false);
bytesWritten += byteArray.length;
encoder.encode(byteArray);
}
ほぼ完璧: ウェイ #2 の短い buf の長さは 15360 です。これは奇数サイズの数値であるため、この手法を採用しました: しかし、まだわずかに聞こえるスキップがあります:
ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
byte[] readme = new byte[4096];
int count = bais.read(readme);
while ( count != -1 ) {
System.out.println("READING :"+count+ " bytes");
if(bais.available() < 4096) {
System.out.println ("LESS THAN 4096 available: "+bais.available());
byte[] remain = new byte[bais.available()];
bais.read(remain);
aacEncoder.encode(remain);
break;
}
aacEncoder.encode(readme);
count = bais.read(readme);
}