2014-09-12 2 views
0

В настоящее время я разработал приложение Java в Eclipse, основанный на Audio Capture учебнике, написанном Richard G. Baldwin на http://www.developer.com/java/other/article.php/1579071/Java-Sound-Getting-Started-Part-2-Capture-Using-Specified-Mixer.htmJava: Sound Capture и Waveform Plotting

Это прекрасно работает, от того, что я могу сказать.

Я могу собирать данные и хранить их в ByteOutputStreamObject.

Я хотел бы воспользоваться этими данными и построить их.

Для заговора я использую плагин SWTChart (swtchart.org).

Однако все значения Построенные близки к 0, -256, 256.

Моя коллекция AudioFormat является:

SampleRate = 8000.0F 
SampleSize = 8 bits 
Channels = 1 
Signed = true 
bigEndian = False 

Я преобразование ByteOutputStream через:

ySeries = toDoubleArray(byteArrayOutputStream.toByteArray()); 

...

public static double[] toDoubleArray(byte[] byteArray){ 
    int times = Double.SIZE/Byte.SIZE; 
    double[] doubles = new double[byteArray.length/times]; 
    for(int i=0;i<doubles.length;i++){ 
     doubles[i] = ByteBuffer.wrap(byteArray, i*times, times).getShort(); 
    } 
    return doubles; 
} 

Двойной формат требуемый вход для

lineSeries.setYSeries(ySeries); 

Если изменить метод выше, от getShort к getDouble, полученный массив удваивается, но по заказу (+ -) 10^300 - 10^320.

Может кто-нибудь помочь мне понять, что мне нужно сделать здесь?

ответ

1

Ваш аудиоформат - это 8-битные подписанные данные (как правило, 8-битный звук без знака, поэтому будьте осторожны), поэтому образцы находятся в диапазоне от -128 до 127. Я предполагаю, что вы пытаетесь перемасштабировать их до двойника в диапазоне - 1.0 до 1.0. Для этого для каждого байта вы умножаете каждый байт на 1/128.0. Обратите внимание, что из-за асимметрии вы не получите до 1.0.

public static double[] toDoubleArray(byte[] byteArray){ 
    double[] doubles = new double[byteArray.length]; 
    for(int i=0;i<doubles.length;i++){ 
     doubles[i] = byteArray[i]/128.0; 
    } 
    return doubles; 
} 
+0

Вопрос заключается в подписании аудиоформата. Это назначение 'times' больше не используется. –

+0

@ greg-449 - спасибо. Я редактировал сообщение. – jaket