this method (shown below)を使用してバイト配列にwavファイルを読み込んでいます。これでバイト配列内に格納されたので、音量を変更したいと思います。オーディオ:バイト配列のサンプルの音量を変更する
private byte[] getAudioFileData(final String filePath) {
byte[] data = null;
try {
final ByteArrayOutputStream baout = new ByteArrayOutputStream();
final File file = new File(filePath);
final AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
byte[] buffer = new byte[4096];
int c;
while ((c = audioInputStream.read(buffer, 0, buffer.length)) != -1) {
baout.write(buffer, 0, c);
}
audioInputStream.close();
baout.close();
data = baout.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
編集:要求ごとオーディオフォーマットに関するいくつかの情報:
PCM_SIGNED 44100.0ヘルツ、16ビット、モノラル、2バイト/フレーム、リトルエンディアン
から物理学のクラス正弦波の振幅を0と1の間の数で乗算することで正弦波の振幅を変えることができることを思い出しました。
編集:更新されたコードの16ビットサンプルのため:私はvolume
でaudioSample
を掛けた場合、音が大きく歪んでいる
private byte[] adjustVolume(byte[] audioSamples, double volume) {
byte[] array = new byte[audioSamples.length];
for (int i = 0; i < array.length; i+=2) {
// convert byte pair to int
int audioSample = (int) ((audioSamples[i+1] & 0xff) << 8) | (audioSamples[i] & 0xff);
audioSample = (int) (audioSample * volume);
// convert back
array[i] = (byte) audioSample;
array[i+1] = (byte) (audioSample >> 8);
}
return array;
}
。私がしていない場合、両方の配列をArrays.compare(array, audioSample)
と比較すると、バイト配列がint型に正しく変換されていると結論づけることができます。
誰かが私を助けることができますか?私はここで何が間違っていますか?ありがとうございました! :)
を.stackexchange.com – egrunin
1)より良いヘルプを早く得るために、[SSCCE](http://sscce.org/)を投稿してください。 2) 'audioInputStream.getFormat()'を報告してください。 –
@egruninありがとう!それをコピーして貼り付けたり、トピックを移動するためのルールは何ですか? – Macks