amix
масштабирует громкость каждого входа на 1/n
, где n = нет. активных входов. Это оценивается для каждого звукового кадра. Таким образом, когда вход выпадает, объем остальных входов уменьшается на меньшую величину, поэтому их объемы увеличиваются.
Изменение перехода dropout_ransition для всех более ранних входов, как это предлагается в других ответах, является одним из подходов, но я думаю, что это приведет к грубым модуляционным модуляциям. Лучший способ - нормализовать звук после amix.
В настоящее время у вас есть две опции: громкоговоритель или фильтр dynaudnorm . Последнее намного быстрее
Синтаксис заключается в том, чтобы добавить его после amix, поэтому
[aud11][aud12]amix=inputs=13:duration=first:dropout_transition=0,dynaudnorm"
Прочитайте документацию, если вы хотите настроить параметры для максимальной громкости или нормализации режима RMS. .etc
Принятие Вас означало, "Как делают я тестирую против вещей, которые твердо/невозможно дразнить":
Если у Вас есть класс, который "выходит и получает объект Win32_LogicalDisk для сервера" И делает что-то еще (использует объект 'Win32_LogicalDisk' в некотором роде), предполагая, что Вы хотите протестировать части класса, которые используют этот объект, можно использовать Внедрение зависимости, чтобы позволить Вам дразнить объект 'Win32_LogicalDisk'. Например:
class LogicalDiskConsumer(object):
def __init__(self, arg1, arg2, LogicalDiskFactory)
self.arg1=arg1
self.arg2=arg2
self.LogicalDisk=LogicalDiskFactory()
def consumedisk(self):
self.LogicalDisk.someaction()
Затем в Вашем коде модульного теста, передайте в 'LogicalDiskFactory', который возвращает фиктивный объект для 'Win32_LogicalDisk'.
Самый легкий способ протестировать вещи, которые трудно дразнить, состоит в том, чтобы осуществить рефакторинг код в способе, которым Ваш код (логика, которую стоит протестировать) находится в одном месте и других вещах, которые Ваше использование кода находятся в отдельном модуле (модулях). Модуль легко дразнить и этот способ, которым можно сфокусироваться на бизнес-логике.
Вы могли бы создать ряд "тестовых тупиков", которые заменяют стандартные программы оперативной библиотеки и возвращают известные значения, возможно, после подходящих задержек.
Как пример, я недавно должен был разработать код для выполнения в стороннем продукте. Проблема состояла в том, что наш "партнер" будет делать компиляцию и интеграцию с их основным кодом: Мне не разрешили посмотреть на их код ни в какой форме! Моя стратегия состояла в том, чтобы создать очень простой эмулятор, который сделал то, что я думал, что их код сделал, на основе информации от их инженеров. Мы использовали язык, который помог переключить различные части эмулятора в и из каждой сборки, таким образом, я мог сделать огромный объем тестирования прежде, чем вовлечь нашего партнера для создания каждого нового повторения.
Я использовал бы тот же метод снова, как программные проблемы в том конкретном продукте - о порядке величины меньше, чем в нашем следующем самом надежном продукте!