Байтовый массив Android получается из алгоритма onFftDataCapture () to BPM звуковой дорожки - PullRequest
0 голосов
/ 27 октября 2011

Это мой первый пост SO, поэтому, пожалуйста, извините меня, в чем-то неясно.

Я занимаюсь разработкой приложения для Android, которое должно взять любую звуковую дорожку и рассчитать BPM и продолжительность песни.

У меня проблемы с пониманием байтовых массивов

public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate)
{
// BEGIN Magnitude of sound algorithm               
    float mag[] = new float[(bytes.length-1)/2];
    for (int i = 0; i < (bytes.length-1)/2; i++)
    {
        mag[i] = bytes[2*i]*bytes[2*i] + bytes[2*i+1]*bytes[2*i+1];
    }

//END Magnitude of sound algorithm

    Stars.updateMagData(mag);
    long songDuration = System.nanoTime() - startTime;
    Stars.updateSongDuration(songDuration);
    Stars.updateFftData(bytes);
}

Я протестировал с тем же файлом ogg, где я панорамировал все аудио влево, вправо и усилил звуковую дорожку, используя Audacity.

Величина звуковой энергии отслеживается mag [], но я не уверен, если

mag[i] = bytes[2*i]*bytes[2*i] + bytes[2*i+1]*bytes[2*i+1]; is correct

В принципе, как мы можем получить от наличия потокового байта [] до вычисленияпесни BPM?

Я пытался увидеть Log.d () байтов, например:

//Log.d("bytes.toString()",bytes.toString());
//Log.d("Byte.toString(bytes[bytes.length-1])", bytes[bytes.length-1] );
//Log.d("mag[i] amp", String.valueOf(mag[mag.length-1] ));

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

Спасибо, если вы прочитали это далеко,

...