2009-06-25 2 views
3

Мне нужно передать аудиоданные в стороннюю систему в виде «16-битного целочисленного массива» (из ограниченной документации, имеющейся у меня).Java - преобразование байтового массива аудио в целочисленный массив

Это то, что я пробовал до сих пор (система считывает его из полученного файла bytes.dat).

AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:\\all.wav")); 
    int numBytes = inputStream.available(); 
    byte[] buffer = new byte[numBytes]; 
    inputStream.read(buffer, 0, numBytes); 

    BufferedWriter fileOut = new BufferedWriter(new FileWriter(new File("c:\\temp\\bytes.dat"))); 

    ByteBuffer bb = ByteBuffer.wrap(buffer); 

    while (bb.remaining() > 1) { 
     short current = bb.getShort(); 
     fileOut.write(String.valueOf(current)); 
     fileOut.newLine(); 
    } 

Это, кажется, не работает - третья партийная система не распознает его, и я также не могу импортировать файл в Audacity в качестве исходного звука.

Есть ли что-то очевидное, что я делаю неправильно, или есть лучший способ сделать это?

Дополнительная информация: волновой файл 16 бит, 44100 Гц, моно.

+0

Не могли бы вы рассказать об этой сторонней системе? – akarnokd

ответ

2

Редактировать 2: Я редко использую AudioInputStream, но способ, которым вы выписываете необработанные данные, кажется довольно сложным. Файл представляет собой всего лишь несколько последующих байтов, поэтому вы можете записать свой массив байтов аудио с помощью одного вызова FileOutputStream.write(). Система может использовать формат большого конца, тогда как WAV-файл хранится в небольшом конце (?). Тогда ваш звук может воспроизводиться, но, к примеру, очень тихо.

Редактировать 3

Убрана образец кода.

Есть ли причина, по которой вы записываете аудио байты в виде строк в файл с символами перевода строки? Я бы подумал, что система ожидает аудиоданные в двоичном формате, а не в строчном формате.

+0

Спасибо за помощь. Я принял ваш ответ, учитывая, что вы намекали на большой/маленький endian :) – William

+0

@ kd304 После написания байтов в массив байтов, используя метод чтения AudioInputStream, возможно ли преобразовать этот массив в аудио/извлечение аудио из этого байта массив? –

2

Мне просто удалось разобраться.

Мне пришлось добавить эту строку после создания ByteBuffer.

bb.order(ByteOrder.LITTLE_ENDIAN); 
Смежные вопросы