Android Visualizer getWaveForm () ведет себя странно на больших объемах - PullRequest
3 голосов
/ 12 ноября 2011

Я использую визуализатор Android для получения данных формы волны аудиопотока и вычисления их среднеквадратичного значения.

public int[] getFormattedData(byte[] rawVizData) {
    for (int i = 0; i < formattedVizData.length; i++) {
        // convert from unsigned 8 bit to signed 16 bit
        int tmp = ((int) rawVizData[i] & 0xFF) - 128;
        formattedVizData[i] = tmp;
    }
    return formattedVizData;
}

//...

double rms = 0;
int[] formattedVizData = getFormattedData(buffer);
if (formattedVizData.length > 0) {
        for (int i = 0; i < formattedVizData.length; i++) {
            int val = formattedVizData[i];
            rms += val * val;
        }
        rms = Math.sqrt(rms / formattedVizData.length);
}

Я установил размер захвата равным 1024 и ожидал, что среднеквадратичное значение сигналарасти, если громкость воспроизведения выше.Я тестирую с синусоидальным тоном 440 Гц и получаю следующие результаты:

     VOLUME        RMS  MIN VALUE  MAX VALUE  
      6.67%        5.5         -8          7
     13.33%       13.3        -19         18
     20.00%       28.1        -40         39
     26.67%       42.6        -60         59
     33.33%         68        -96         95
     40.00%         54        -77         76
     46.67%         81       -115        114
     53.33%         64        -91         90
     60.00%         51        -91         90
     66.67%         68        -97         96
     73.33%         48        -69         68
     80.00%         68        -97         96
     86.67%         45        -65         64
     93.33%         64        -91         90
    100.00%         90       -128        127

Почему мое предположение больше не выполняется для объемов> 33,33%?Что мне здесь не хватает?Есть ли какая-то очевидная ошибка в моем коде, которую я просто не могу найти?

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

Любая помощь очень ценится.

...