Если вы выводите звук через SourceDataLine, можно проверить аудиоданные во время их обработки.Вот полезный пример кода, представленный в руководствах по Oracle Sound Trail, на странице Использование файлов и преобразователей формата в разделе «Чтение звуковых файлов».Важная точка в коде помечена комментарием "// Here, do something useful
"
. В этот момент вы должны преобразовать байты в значения аудио и использовать их как часть вычисления RMS.Детали для покрытия и вычисления среднеквадратичного значения должны быть доступны для поиска - я знаю, что видел объяснения для обоих в stackoverflow.
Как только вы вычислили среднеквадратичное значение, оно может быть отправлено в независимый поток, который обрабатываетграфическая визуализация.Следует использовать шаблон слабой связи, чтобы минимизировать объем работы, выполняемой с аудиопотоком, и избегать любых блокировок, которые могут повесить звук.
Например, поток визуализации может иметь метод setRMSValue, который просто обновляет переменную экземпляра, без какой-либо синхронизации или блокировки.Поток обработки звука может вызывать этот метод свободно, поскольку он генерирует новые точки данных RMS.Визуализатор может одновременно читать текущую переменную экземпляра с вашей скоростью анимации.Нет synchronization
необходимо.Если поток визуализации пропускает несколько точек данных RMS, это не должно вызывать проблем.