Сохранение коротких [] в Java (Android) с низким процессором и места - PullRequest
1 голос
/ 24 ноября 2011

во время потоковой передачи музыки я получаю данные PCM типа short [], и я хочу сохранить их в файл на моем устройстве Android, чтобы я мог воспроизвести их позже (используя AudioTrack).Я не хочу хранить музыку, чтобы эффективно работать с памятью и процессором.

как сохранить short [] в файл, потому что я не вижу никакой функции в .write (short [])?

как я могу уменьшить пространство \ процессор для сохранения этого файла?

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Оберните ваш FileOutputStream с DataOutputStream:

DataOutputStream doStream = new DataOutputStream(new BufferedOutputStream(fileOutputStream));
doStream.writeInt(numberArray.length); //Save size
for (int i=0;i<numberArray.length;i++) {
    doStream.writeShort(numberArray[i]); //Save each number
}

То же самое для чтения его обратно:

DataInputStream diStream = new DataInputStream(new BufferedInputStream(fileInputStream));
int size = diStream.readInt(); //Read size
short[] data = new short[size]; //Create new array with required length
for (int i=0;i<size;i++) {
    data[i] = diStream.readShort(); //Read each number
}
0 голосов
/ 24 ноября 2011

Без какой-либо кодировки в MP3 или подобное вы всегда можете сделать это следующим образом.

short[] sound = ...;
ByteBuffer byteMyShorts = ByteBuffer.allocate(sound.length * 2);
ShortBuffer shortBytes = byteMyShorts.asShortBuffer();
shortBytes.put(sound);
byteMyShorts.flip();

// byteMyShorts.array() now contains your short[] array as an
// array of bytes.
0 голосов
/ 24 ноября 2011

Если вы хотите уменьшить размер хранилища, вам нужно сжать аудио в такой формат, как MP3. Однако сжатие требует интенсивной работы процессора и требует времени для завершения.

Смотрите, как это сделать, здесь Как кодировать WAV в mp3 на устройстве Android

...