Ваше преобразование l oop
while (iterator.hasNext()) {
// for some reason my list came in as a list of doubles
// so I am making sure to get these values back to an int
Integer i = iterator.next().intValue();
byteArray[i] = i.byteValue();
}
получает значение i
от итератора, а затем пытается записать его в позиции i
в byteArray
, какой тип беспорядка ваши аудио байты странным образом.
Рабочая функция, которая преобразует List<Double>
в byte[]
, будет выглядеть примерно так
byte[] inputToBytes(List<Double> audioData) {
byte[] result = new byte[audioData.size()];
for (int i = 0; i < audioData.size(); i++) {
result[i] = audioData.get(i).byteValue();
}
return result;
}
, тогда вы можете использовать ее в writeToAudioFile()
:
void writeToAudioFile(ArrayList<Double> audioData) {
try (FileOutputStream fos = new FileOutputStream("test.aac")) {
fos.write(inputToBytes(audioData));
System.out.println("File created");
} catch (Exception e) {
// TODO: handle exception
System.out.println("Error: " + e);
}
}
Это, безусловно, создает воспроизводимый файл, если у вас есть действительные байты в audioData
. Содержимое и расширение должны быть достаточными для того, чтобы ОС / проигрыватель распознал формат.
Если это не сработает, я посмотрю полученные данные, чтобы убедиться, что они верны.