私はJAVAで私の最終年度のプロジェクトに取り組んでいます
1) 画像内のテキストを隠す
2)画像の中の画像
3)音声ファイル (WAVE) 内のテキスト
私は 1) と 2) を正常に完了し、必要な場合はソース コードを添付しました。私は 3 番目のファイルで問題を抱えています。つまり、オーディオ ファイルにデータを隠しています。Wave ファイルからオーディオ入力ストリームを作成し、そのデータをバイト配列に読み取りますが、多くのことが明確ではありません。読み取り中に、最初の 44 バイトがヘッダー バイトであると推測していますか? (ファイルが WAVE 形式であるため) またはヘッダーはまったくコピーされません。問題は....デコード時に、新しく作成されたオーディオファイルからデータをバイト配列で読み取る必要があります。そして、データが隠されているバイトを見つけることができません。
audioinputstream からバイト配列にデータを読み込むと正確に何が起こるか教えてもらえますか?つまり、実際にバイト配列に読み込まれるものを意味しますか?
File fileIn = new File("C:\\Users\\Rahul\\Desktop\\pro\\Don't Stay.wav");
AudioInputStream audioInputStream =
AudioSystem.getAudioInputStream(fileIn);
int avail= audioInputStream.available();
System.out.println("bytes available " +avail);
System.out.println(audioInputStream.markSupported());
int bytesPerFrame =
audioInputStream.getFormat().getFrameSize();
// Set an arbitrary buffer size of 1024 frames.
int numBytes = 1024 * bytesPerFrame;
byte[] audioBytes = new byte[numBytes];
audioInputStream.read(audioBytes);
byte btext[]=Stego_text("good morning!");
byte bcoded[]=steg.encoding(audioBytes,btext,0);
byte[] stg= a.decode_text(audioBytes);
String obtain= new String(stg);
System.out.println(">>>"+ obtain); //the hidden message gets successfully displayed here
try {
//
AudioSystem.write(audioInputStream, Type.WAVE, new File("C:\\Users\\Rahul\\Desktop\\pro\\Don't Stay_restored.wav"));
} catch (Exception e) {
e.printStackTrace();
}
byte[] audioBytesNew = new byte[numBytes];
audioInputStream.read(audioBytesNew);
byte[] stg1= a.decode_text(audioBytesNew);
String obtain1= new String(stg1);
System.out.println(">>>"+ obtain1); //the hidden message does not get displayed
編集直後にバイト配列をデコードすると、正常に動作し、隠しメッセージが表示されますが、再度バイト配列を作成し、そこに audioinputsream データを読み込んでから、そのバイト配列をデコードすると..動作しません。なぜだろう?私を助けてください。