Android-приложение, извлекающее данные о громкости и/или частоте из mp3-потока

Все еще начинающий разработчик Java, мне нужно создать приложение для Android, которое

1 передает один mp3 с предоставленного URL-адреса, а затем

2 извлекает данные громкости и/или частоты звука из mp3-потока

3 запускает световое шоу на основе данных в # 2

У меня есть возможное решение № 1, и я работаю над № 2,

Может ли кто-нибудь предложить конкретные классы в SDK, на которые мне следует обратить внимание?

Существуют ли какие-либо существующие проекты Android на github или где-либо еще, которые извлекают данные о частоте и/или объеме из потоковых mp3-файлов, которые я мог бы изучить и извлечь из них уроки?


person Bachalo    schedule 21.12.2013    source источник
comment
Для частоты mp3 вы можете увидеть этот ответ SO: stackoverflow.com/a/5189581/1739882   -  person Chintan Soni    schedule 30.12.2013
comment
Вопрос требует уточнения его частотного значения. Означал ли OP битрейт кодирования или частоту звука?   -  person Stan    schedule 30.12.2013
comment
Я думаю, что, следуя третьему требованию, они имеют в виду частоту звуковой волны, но могу поспорить, что на самом деле им нужен анализ БПФ.   -  person    schedule 31.12.2013
comment
Вы можете посмотреть ссылку ниже, она может помочь вам stackoverflow.com/questions/4708613/   -  person venkat530    schedule 02.01.2014
comment
Надеюсь, это поможет - BeatDetectorByFrequency.java   -  person vijaykumarg    schedule 27.01.2014


Ответы (3)


Echo Nest (http://developer.ehonest.com/) — отличный инструмент для анализа файлов MP3, громкость, частота, биение и другие данные.

Есть библиотека Java, которая работает с Android.

person Darrell    schedule 21.12.2013

Вот еще один хороший ресурс для вашего проекта: http://therandomlab.blogspot.nl/2013/05/fft-audio-frequency-analysis-with.html

Удачи

person Willem van Doesburg    schedule 29.12.2013

Вы захотите открыть буфер, лежащий в основе чтения, чтобы вы могли получить производный уровень громкости... Это может означать использование какого-либо другого API, кроме «MediaPlayer», который может НЕ отображать уровень RMS для громкости.

Каждый раз, когда вы выполняете буферизованное чтение в MP3, вы можете генерировать данные по осям x и y из тома с помощью следующего:

while (mIsPlaying) {
    double sum = 0;
    int readSize = mRecorder.read(mBuffer, 0, mBuffer.length);
    for (int i = 0; i < readSize; i++) {
        output.writeShort(mBuffer[i]);
        sum += mBuffer[i] * mBuffer[i];
    }
// PrBar needs RMS as int
//log base2 for the rms expression on the Volume from the mic
    if (readSize > 0) {
        mProgressBar.setProgress((int)Math.sqrt( sum / readSize ));
        handleRMS((Math.log(Math.sqrt( sum / readSize ))/Math.log(2))); 


    }
}

...

private void handleRMS(double rms){

    rmscnt++;
    rmssum += rms;
    if(rms > rmsmax)rmsmax=rms;
    if(rms< rmsmin)rmsmin=rms;
    double myamt=(rmsmax - rmsmin) / 10 +rmsmin;
    if (rms < myamt) decile++; 
    if(rmscnt % 5 ==0){
        if (rmssum / 5 < myamt) {                                       
        if( Long.valueOf(System.currentTimeMillis())
          - tslist.get(tslist.size()-1) - segmenttime > 0 ){
            tslist.add(Long.valueOf(System.currentTimeMillis()));
        };
    };
    rmssum = 0;
}
}
   * feature - select the TS corresponding to a 'pause' in the speech stream       *   arriving from microphone        * ''pause' in algorythm and

нормальный среднеквадратический уровень громкости на синусоидальной схеме * наблюдайте за последним значением среднеквадратичного значения в свете синусоидальной волны * мин. и макс. являются значениями «ось Y» на волне * поле «myamt» представляет собой пороговое значение, которое в настоящее время 10 процентов дельты ( макс - мин ) * на практике пауза должна иметь ряд смежных среднеквадратичных значений со средним значением МЕНЬШЕ, чем * некоторое значение конфигурации. * После того, как TS для паузы принят, есть другое минимальное значение времени, которое должно * пройти перед поиском другой паузы в речи. * Полезный совет - от 5 до 10% среднеквадратичных значений должны увеличивать «дециль». * В противном случае на радаре недостаточно событий низкой громкости для идентификации пауз в речи.

Чтобы открыть буферы, вместо API MediaPlayer вам может понадобиться что-то вроде 'AudioTrack' для обработки вашего mp3. Для образцов, я думаю, вы можете перейти к этому проекту на git

RMS и обработчик объясняют здесь

person Robert Rowntree    schedule 01.01.2014