5

Я использую sox 14.2.0 на Centos 6.0.

У меня есть два моно WAV-файла, left.wav и right.wav . Мне нужно объединить их в один файл stereo.ogg , с панорамированием left.wav 80% влево и панорамированием right.wav 80% вправо.

Я не смог придумать варианты sox, необходимые для этого. Как мне это сделать?

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

4 ответа4

4

Команда haimgs не совсем верна. Классически вы панорамируете, уменьшая громкость только одного канала. Это означает: если вы хотите, чтобы ваш сигнал оставался на 80% левым, левый канал сохраняет исходную громкость, тогда как правый канал получает только 20% от первоначальной громкости. По крайней мере, именно так поступил код панорамирования sox (и то, что Алан Блюмлейн, похоже, поддержал, изобретая стерео).

Также его команда может быть сокращена с помощью опции remix.

Поэтому исправленная и сокращенная команда:

sox left.wav right.wav stereo.ogg remix 1,2v0.2 1v0.2,2

отредактируйте в ответе на комментарий haimgs:

Сокс предупредит вас, если произойдет отсечение. Но да, это возможно. С опцией remix громкость каждого канала масштабируется с коэффициентом 1/n, где n - количество входных каналов. Но это используется, только если для выходного канала не указано NO VULME OPTION (поэтому ваши 100% + 20% верны).

У sox также есть возможность масштабировать любой канал без явной информации о томе, просто добавьте «-a» после "remix" (например, «remix -a 1,2v0.2 1v0.2,2»), и объемы будут равны 50 % + 20% = 70%. Это довольно запутанно, и сейчас я не уверен, придется ли вам масштабировать громкость панорамируемых каналов на 1/n, что приведет к "remix -a 1,2v0.1 1v0.1,2" или 50% + 10% = 60%. Мне придется продолжить расследование в этом направлении. Тем временем вы можете прочитать раздел ремиксов на странице руководства sox (также доступной на домашней странице sox).

редактировать после дальнейшего отражения:

Подумав об этом, я почти уверен, что вам придется масштабировать и объемы панорамирования на 1/n.

О проблеме отсечения: эта проблема не может возникнуть, если разделить ВСЕ объемы на количество каналов. Но это не сохраняет исходную мощность сигнала, потому что мощность сигнала является логарифмической, а не линейной. Чем больше каналов вы микшируете, тем тише должен быть сигнал. Вот почему у sox есть опции для этого, когда объемы масштабируются на 1/sqrt(n). Чтобы использовать это, просто возьмите "p" вместо "v" в remix-части и измените значения соответствующим образом, а также добавьте «-p» -опцию после оператора remix. Вы можете увидеть разницу масштабирования на 1/n и 1/sqrt(n) здесь.

Вот как я думаю вычислить правильные значения мощности: для каждого канала вы должны решить 20 * log_10(коэффициент). Коэффициент 2 приведет к ~ 6(дБ), коэффициент 0,5 приведет к ~ -6(дБ). Это именно то, что написано в руководстве по sox, так что я думаю, что это правильно.

Итак, наконец, команда в вашем случае должна быть:

sox left.wav right.wav stereo.ogg remix -p -a 1,2p-6 1p-6,2

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

3

Вот как это делается:

sox left.wav right.wav --channels 2 - объединить слияние стерео.ogg микшер 0.8,0.2,0.2,0.8

2

Как-то все вышеперечисленное сгенерировало для меня ошибки. Вот что у меня сработало (SOX на Ubuntu 14.04):

sox -M -c 1 lef.wav -c 1 right.wav output.mp3 
0

Используйте sox с параметром панорамирования, чтобы переместить один файл в крайнее правое положение, а другой - в крайнее левое (1 и -1 соответственно). Затем используйте soxmix, чтобы смешать их вместе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .