Получите амплитуду или частоту звука, воспроизводимого в медиаплеере на Android

Я новичок в Android. Я хочу найти плотность частоты или амплитуду громкости в Android или с помощью Android Media Player для файла mp3. Я пробовал много разных способов, но у меня ничего не вышло. Не могли бы вы помочь мне с этим.

Я нашел этот код, но он дает значение getMaxAmplitude () во время записи звука, но не получает значение во время воспроизведения файла mp3. Ниже приводится ссылка: Что делает функция Android getMaxAmplitude () для MediaRecorder на самом деле дать мне?

public double getNoiseLevel() 
{
    Log.d("SPLService", "getNoiseLevel() ");
    int x = mRecorder.getMaxAmplitude();
    double x2 = x;
    Log.d("SPLService", "x="+x);
    double db = (20 * Math.log10(x2 / REFERENCE));
    //Log.d("SPLService", "db="+db);
    if(db>0)
    {
        return db;
    }
    else
    {
        return 0;
    }
}

Я также имею в виду ссылку на ringdroid: https://code.google.com/p/ringdroid/

Я также проверил БПФ, но это во время записи. Мне нужно определить частоту / амплитуду при воспроизведении аудиофайла (файла mp3).


person dhruvvarde    schedule 31.07.2014    source источник
comment
Включите то, что вы пробовали. Помогает, если вы покажете, какие части документации вы проверили, и если что-то вас смутило.   -  person keyser    schedule 31.07.2014
comment
Для анализа звука вам необходимо использовать FFT (быстрое преобразование Фурье).   -  person Phantômaxx    schedule 31.07.2014


Ответы (1)


mRecorder.getMaxAmplitude() Возвращает максимальную абсолютную амплитуду, измеренную с момента последнего вызова, или 0 при первом вызове

Это эквивалентно:

max(abs(signal));

Вам нужно проверить, что ваша переменная Reference использует 1.0 для представления данных с плавающей запятой или 32767 для короткого int!

Чтобы преобразовать максимальную абсолютную амплитуду в дБ, вам нужно сделать 20 * log10(x/Reference)

Эквивалентный код в Matlab показывает концепцию:

% create a audio signal in float point at 90dB
signal = 10^(90/20)*sin(2*pi*f/Fs*t)';
%equivalent of mRecorder.getMaxAmplitude()
x = max(abs(signal));
%find dB (Reference for this example is 1.0 data in float point)
decibel = 20 * log10(x/1.0)

Результат 89.9955

Чтобы показывать децибелы при воспроизведении mp3 файла, вам нужно вызывать getNoiseLevel() для каждого обработанного кадра!

person ederwander    schedule 31.07.2014