У меня была похожая проблема некоторое время назад, и осмотр вокруг не нашел хорошего решения - он работал на некоторых платформах, но не надежно.
Я так и не понял, почему, но мой обходной путь читал байтыот линии данных, а затем при вычислении уровня через RMS (среднеквадратичное значение) всех байтов в последних, скажем, 100 мс (в зависимости от того, какой интервал обновления вы хотите.) Это простой фрагмент кода, нохорошо выполняет свою работу.