У меня есть двумерный массив целых чисел. Первый индекс указывает количество каналов. Второй указывает номер сэмпла в канале. Как я могу сохранить этот массив в аудиофайл? Я знаю, мне нужно преобразовать его в байтовый массив, но я понятия не имею, как это сделать.
// редактировать
Подробнее. У меня уже есть класс для рисования формы волны. Это здесь:
http://javafaq.nu/java-example-code-716.html
Теперь я хочу вырезать часть этой волны и сохранить ее в новом файле. Поэтому мне нужно вырезать часть int [] [] samplesContainer, преобразовать его в байтовый массив (я не знаю, как), а затем сохранить его в файл того же формата, что и audioInputStream.
// редактировать
OK. Таким образом, самая большая проблема заключается в написании инвертированной функции для этой:
protected int[][] getSampleArray(byte[] eightBitByteArray) {
int[][] toReturn = new int[getNumberOfChannels()][eightBitByteArray.length / (2 * getNumberOfChannels())];
int index = 0;
//loop through the byte[]
for (int t = 0; t < eightBitByteArray.length;) {
//for each iteration, loop through the channels
for (int a = 0; a < getNumberOfChannels(); a++) {
//do the byte to sample conversion
//see AmplitudeEditor for more info
int low = (int) eightBitByteArray[t];
t++;
int high = (int) eightBitByteArray[t];
t++;
int sample = (high << 8) + (low & 0x00ff);
if (sample < sampleMin) {
sampleMin = sample;
} else if (sample > sampleMax) {
sampleMax = sample;
}
//set the value.
toReturn[a][index] = sample;
}
index++;
}
return toReturn;
}
Я не понимаю, почему происходит второе увеличение t после высокого. Я также понятия не имею, как я могу получить высокие и низкие от образца.