Как многократные амплитудные замирания работают на каскаде? - PullRequest
3 голосов
/ 05 августа 2011

Я хочу, чтобы трек входил и выходил в определенные временные коды. Например, я хотел бы взять аудиофайл и:

Start it at 100% Volume 
Fade it to 20%  at 2 seconds
Fade it to 100% at 4 seconds
Fade it to 20%  at 6 seconds
Fade it to 100% at 8 seconds
Fade it to 20%  at 10 seconds
Fade it to 100% at 12 seconds
Fade it to 0 at 14 seconds

Я проверял это с помощью постоянного тона, генерируемого ecasound, чтобы я мог открыть полученный файл в Audacity и увидеть результаты визуально. Насколько я могу судить, увеличение амплитуды является относительным, а уменьшение - нет. Кажется, что если я увеличиваю амплитуду вверх, это влияет на относительную громкость всего трека, а не только в определенное время, когда я устанавливаю постепенное изменение, где я теряюсь.

Примеры команд

# generate the tone
ecasound -i tone,sine,880,20 -o:tone.wav

# Just the test to see that i can fade start it at 100 and fade it to 20.
ecasound -a:1 -i tone.wav -ea:100 -kl2:1,100,20,2,1 -a:all -o:test_1.mp3

# Fade it out and in
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,100,20,2,1 \
         -ea:100 -kl2:1,20,100,4,1 \
         -a:all -o:test_2.mp3

# Fade it out and in with a peak of 500
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,100,20,2,1 \
         -ea:100 -kl2:1,20,500,4,1 \
         -a:all -o:test_3.mp3

# Fade it out from 500, out, and then back to 500
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,500,20,2,1 \
         -ea:100 -kl2:1,20,500,4,1 \
         -a:all -o:test_4.mp3

# Fade it out from 500, out to a low of 10, and then back to 500
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,500,10,2,1 \
         -ea:100 -kl2:1,10,500,4,1 \
         -a:all -o:test_5.mp3

# Fade it out from 1000, out to a low of 10, and then back to 1000
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,1000,10,2,1 \
         -ea:100 -kl2:1,10,1000,4,1 \
         -a:all -o:test_6.mp3

# The eventual result I'm looking for
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,500,20,2,1 \
         -ea:100 -kl2:1,20,500,4,1 \
         -ea:100 -kl2:1,500,20,6,1 \
         -ea:100 -kl2:1,20,500,8,1 \
         -ea:100 -kl2:1,500,20,10,1 \
         -ea:100 -kl2:1,20,500,12,1 \
         -ea:100 -kl2:1,500,0,14,4 \ 
         -a:all -o:test_7.mp3

Результаты

enter image description here

Лучшее, что я могу сказать по этим результатам, это то, что амплитуда всей дорожки относительно разности между низким и максимальным значениями всех эффектов затухания. Я не уверен, ожидается ли этот результат, но он очень запутанный.

Кроме того, в последнем результате (от второго к последнему на изображении), затухания больше не занимают полных секунд каждый. Чтобы выяснить, почему это может быть, я снял окончательный переход от нуля к нулю, и длительности вернулись к норме. Это не похоже на ожидаемое поведение.

# "Fixing" the fade durations
ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,500,20,2,1 \
         -ea:100 -kl2:1,20,500,4,1 \
         -ea:100 -kl2:1,500,20,6,1 \
         -ea:100 -kl2:1,20,500,8,1 \
         -ea:100 -kl2:1,500,20,10,1 \
         -ea:100 -kl2:1,20,500,12,1 \
         -a:all -o:test_8.mp3

В качестве примечания я также попытался изменить значения -ea на «текущую» амплитуду для каждой строки. Это не имело никакого значения (независимо от того, что я установил -ea)

У меня установлена ​​самая последняя версия из git (2.8.1 + dev). У меня были те же проблемы с 2.7.0, поэтому я обновился и в итоге оказался здесь.

Я делаю это неправильно?

1 Ответ

4 голосов
/ 05 августа 2011

-kl2

После нескольких часов царапин на голове, я, наконец, думаю, что понял это.Амплитуда «От» на каждом затухании должна быть 100. Если вы увеличиваете амплитуду, амплитуда «К» равна maximum / from * to.

Так что, если вы пытаетесь перейти от 20 до 100, это100 / 20 * 100 или 500.Если вы пытаетесь добраться до 120: 100 / 20 * 120 или 600.Я предполагаю, что все это имеет смысл для кого-то, но я был совершенно озадачен.

Рабочий пример (с чуть более высоким нижним диапазоном в середине для демонстрации):

ecasound -a:1 -i tone.wav \
         -ea:100 -kl2:1,100,20,2,1 \
         -ea:100 -kl2:1,100,500,4,1 \
         -ea:100 -kl2:1,100,40,6,1 \
         -ea:100 -kl2:1,100,250,8,1 \
         -ea:100 -kl2:1,100,20,10,1 \
         -ea:100 -kl2:1,100,500,12,1 \
         -ea:100 -kl2:1,100,0,14,1 \
         -a:all -o:test_7.mp3

Ивывод: enter image description here

Имейте в виду, что эти амплитуды все еще являются относительными.Если вы переходите с 45% до 90%: 100 / 45 * 90 = 200, а затем теперь, если вы снизитесь до 20% от текущей амплитуды, это на самом деле 18% (.20 * 90), поэтому возврат к 100 будет 100 / 18 * 100 = 555.56

-klg

Как только я понял это и пришел сюда, чтобы написать, я получил ответ из списка рассылки ecasound.Это не прямой ответ на проблему kl2, но предлагает альтернативный, более простой для понимания ответ, который является параметром klg.

-klg: fx-param, low-value, high-value, point_count, pos1, value1, ..., posN, valueN Общий линейный конверт.Этот источник контроллера можно использовать для сопоставления пользовательских конвертов с параметрами оператора цепочки.Количество точек конверта указывается в 'point_count'.Каждая точка огибающей состоит из позиции и соответствующего значения.Количество пар должно соответствовать 'point_count' (то есть 'N == point_count').Параметры posX задаются в секундах (от начала потока).Точки огибающей задаются как значения с плавающей точкой в ​​диапазоне '[0,1]'.Прежде чем значения огибающей сопоставляются с параметрами оператора, они сопоставляются с целевым диапазоном «[низкое значение, высокое значение]».Например, значение «0» установит параметр оператора на «низкое значение», а значение «1» установит его на «высокое значение».Для начального сегмента '[0, pos1]' конверт выведет значение 'value1' (например, 'low-value').

Вот команда, чтобы сделать то, что мне нужно, используя klg вместо kl2:

ecasound -a:1 -i:tone.wav -ea:100 \
-klg:1,0,100,14,2,1,3,0.20,4,0.20,5,1,6,1,7,0.40,8,0.40,9,1,10,1,11,0.20,12,0.20,13,1,14,1,15,0 \
-o:test.mp3

Вывод точно такой же, как и у второй дорожки на изображении.

Эта результирующая командная строка определенно немного сложнее для чтения и, следовательно, отладки, но на самом деле может быть проще генерировать динамически.Несмотря на это, теперь у меня есть 2 рабочих варианта для решения этой проблемы.

И, наконец, вот мои заметки о том, как я выяснил координаты команды klg.Звездочки - это «точки», перечисленные в параметре klg, числа сверху - секунды:

     0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2
     1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
1.0  --*     *-*     *-*     *-*   
 ~      \   /   \._./   \   /   \
0.2      *-*             *-*     \
0.0                              *----------

Надеюсь, это поможет кому-то сэкономить хотя бы столько волос, сколько я потерял, поцарапавмоя голова.

...