Белый шум, смешивающий 2 байта аудио - PullRequest
0 голосов
/ 15 февраля 2012

Я смешиваю 2 массива аудио байтов, получая микс с небольшим белым шумом.

for (int i=0;i<bytes1.getB1().length;i++){
        mixBytes[i]=(byte) (bytes1[i]+bytes2[i]);
    }

Кто-нибудь знает, как решить проблему белого шума?

Я получаю байты этим методом, удаляя первые 44 байта в качестве заголовка wav.

private byte[] getISByteArray(InputStream is){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    int length;
    try {
        while ((length = is.read()) != -1) {
            stream.write(length);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    byte[] b=stream.toByteArray();
    byte[] b2=new byte[b.length-44];
    //System.arraycopy(b, 44, b2, 0, b2.length);
    for (int i=0;i<b.length;i++){
        if (i>44) b2[i-44]=b[i];
    }
    return b2;  

}

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Я сразу вижу две потенциальные проблемы:

  • Вы обрабатываете входные данные, как если бы они были потоками по одному байту на выборку. Они действительно?
  • Вы ничего не делаете с переполнением, которое будет принимать два байта значения 100 и получит, например, отрицательное число.

В последнем случае это может помочь - хотя это зависит от того, являются ли байты действительно линейной амплитудой и т. Д., Просто взяв среднее:

mixBytes[i]=(byte) ((bytes1[i]+bytes2[i]) / 2);

Я подозреваю, что это сделает немного лучше, но это все еще не очень хорошая функция микширования ...

0 голосов
/ 15 февраля 2012

Сверните исходный сигнал с помощью фильтра нижних частот Гаусса , и вы удалите белый шум.

...