Этот вопрос объясняет, как преобразовать PCM в WAV.
Я скопировал аудио Discord в List<byte[]>
, переопределив метод AudioReceiveHandler#handleCombinedAudio
:
private List<byte[]> rescievedBytes=new ArrayList<>();
@Override
public void handleCombinedAudio(CombinedAudio combinedAudio) {
try {
rescievedBytes.add(combinedAudio.getAudioData(VOLUME));
}catch (OutOfMemoryError e) {
//close connection
}
}
После этого я скопировал List
в byte[]
и создал файл wav
.
try {
int size=0;
for (byte[] bs : rescievedBytes) {
size+=bs.length;
}
byte[] decodedData=new byte[size];
int i=0;
for (byte[] bs : rescievedBytes) {
for (int j = 0; j < bs.length; j++) {
decodedData[i]=bs[j];
}
}
getWavFile(getNextFile(), decodedData);
} catch (IOException|OutOfMemoryError e) {
e.printStackTrace();
}
private void getWavFile(File outFile, byte[] decodedData) throws IOException {
AudioFormat format = new AudioFormat(8000, 16, 1, true, false);
AudioSystem.write(new AudioInputStream(new ByteArrayInputStream(
decodedData), format, decodedData.length), AudioFileFormat.Type.WAVE, outFile);
}
Если полученное аудио становится слишком большим (OutOfMemoryError
), преобразование прерывается.