Программирование на интерфейсах дает несколько преимуществ:
Требуется для шаблонов типов GoF, таких как шаблон посетителей
Позволяет для альтернативных реализаций. Например, множественные реализации объекта доступа к данным могут существовать для одного интерфейса, который абстрагирует используемое ядро базы данных (AccountDaoMySQL и AccountDaoOracle могут оба реализовывать AccountDao)
Класс может реализовывать несколько интерфейсов. Java не позволяет множественное наследование конкретных классов.
Абстрагирует подробности реализации. Интерфейсы могут включать только общедоступные методы API, скрывая детали реализации. Преимущества включают четко документированный публичный API и хорошо документированные контракты.
В значительной степени используется современными структурами внедрения зависимостей, такими как http://www.springframework.org/ .
В Java интерфейсы могут использоваться для создания динамических прокси - http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Proxy.html . Это может быть очень эффективно использовано в таких средах, как Spring, для выполнения аспектно-ориентированного программирования. Аспекты могут добавить очень полезную функциональность в классы без непосредственного добавления кода Java в эти классы. Примеры этой функциональности включают ведение журнала, аудит, мониторинг производительности, разграничение транзакций и т. Д. http://static.springframework.org/spring/docs/2.5.x/reference/aop.html .
Макетные реализации, модульное тестирование. Когда зависимые классы являются реализациями интерфейсов, могут быть написаны фиктивные классы, которые также реализуют эти интерфейсы. Ложные классы могут быть использованы для облегчения модульного тестирования.
Среднеквадратическое значение часто используется для оценки громкости звуковых файлов. Это потому, что очень громкий звук может не восприниматься таким образом, если он очень короткий. Также помните, что мощность возрастает экспоненциально с квадратом амплитуды.
Аудио-фанаты из Hydrogen Audio знают толк в этом ... ознакомьтесь с их бесплатным Replay Gain программным обеспечением. Возможно, вам вообще не придется программировать.
РЕДАКТИРОВАТЬ: Включены комментарии по зависимости мощности от амплитуды.
Ну, не будучи экспертом в аудио и добавляя к предыдущему комментарию, вам следует выяснить, что вы определяете как «кратчайшее время для максимальной мощности», а затем просто преобразовать волну в необработанную с плавающей запятой и использовать RMS в течение определенного периода времени и непрерывно брать куски этого промежутка времени, найти MAX, и вы получите максимальную пиковую мощность.
Я мог бы быть далеко здесь, но, если у вас есть wavepad, вы можете загрузить несколько файлов и немного поработать с томами, чтобы все они были одинаковыми. Кроме того, если у вас есть определенные разделы файла, которые громче, вы можете выбрать этот раздел и уменьшить громкость для этого раздела.
РЕДАКТИРОВАТЬ: И извините, это не совсем «метод» для измерения громкости, но если вам просто нужно сделать их одинаковыми, все должно работать нормально.
Чтобы добавить к ответу PeterAllenWebb:
Перед вычислением среднеквадратичного значения вы должны сначала «центрировать» образец (подумайте о 5-минутном .wav, где каждый образец имеет максимальную + амплитуду ). Лучший способ сделать это - использовать фильтр верхних частот на дозвуковой частоте.
Это все равно не учитывает частоты, к которым люди чувствительны. Для этого вы можете использовать A-взвешивание. Есть страница, где вы можете рассчитать это онлайн: http://www.diracdelta.co.uk/science/source/a/w/aweighting/source.html
Код, похоже, находится здесь: http://www.diracdelta.co.uk/science/source/a/w/aweighting/multicalc.js
Чтобы повторить то, что говорили некоторые другие люди, используйте значение RMS для оценки «громкости» отрывка звука.
Но если вы имеете дело с импульсивными звуками, такими как щелканье или удары по барабанам, вам следует использовать скользящее среднеквадратичное значение и выбирать только пиковое среднеквадратичное значение. Измерьте 100 мс звука, сдвиньте окно, снова выполните измерение и т. Д., А затем выполните нормализацию в соответствии с наибольшим найденным значением.
Обязательно удалите любое значение DC перед выполнением RMS, и взвешивание по шкале А сделает его более похожим на то, как мы слышим. Вот код для A-взвешивания в MATLAB / Octave и Python .