Это мой первый пост 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] ));
, но ни одно из этих значений не имеет большого смысла, учитывая ту же звуковую дорожку, панорамированиеили усилено
Спасибо, если вы прочитали это далеко,