LINUX.ORG.RU

Make REPL


0

1

Допустим, у нас есть некие исходные файлы, которые мы хотим каким-то образом скомпоновать. Например, есть некоторое количество pdf-ок, и мы хотим сделать из них единый документ - не написать что-то новое, а просто правильным образом склеить. Или у нас есть какие-то mp3-шки, и мы хотим составить единую композицию.

Инструменты для этого есть - скажем, pstops, sox, whatever. Но, понятное дело, нам потребуется некоторое количество экспериментов, чтобы подобрать такие параметры, при которых результат будет наиболее правильным. Скажем, когда я составлял музыку для нашего танцевального номера, мне приходилось ползать по mp3-шкам с точностью до двадцатых долей секунды.

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

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

Соответственно, вопрос. Есть какая-то система, подобное автоматизирующая? Или велосипедить своё?

Update

Для примера. Недавно составлял музыку к нашему танцевальному номеру. В итоге получилось следующее:

sox waltz.wav w.wav trim 0 =16.2 =52.7 splice 16.2,0.5
sox kafe.mp3 kafe.wav trim 2 20
sox vw.wav before.wav trim -62.7 20 fade t 3 vol 0.2
sox -m kafe.wav before.wav Before.mp3
sox vw.wav VienneseWaltz.mp3 trim -43.2 36.3
sox Before.mp3 VienneseWaltz.mp3 VienneseWaltzFull.mp3 splice -t 20,0.5,0
sox kafe.mp3 kafe2.wav trim 50 5
sox -n -r 44100 silence.wav trim 0 3
sox silence.wav Cork_shampane.mp3 cork.wav trim 0 5 vol 0.1
sox -M cork.wav cork.wav cork2.wav
sox -m kafe2.wav cork2.wav Between.mp3
sox t.wav Tango.mp3 trim 0.7 37.4
sox clock.mp3 clock.mp3 5.mp3 splice 4.09,0.5
sox 5.mp3 5.mp3 9.mp3 splice 7.15,0.5
sox 9.mp3 clock.mp3 11.mp3 splice 13.29,0.5
sox 11.mp3 effect3.mp3 trim 0.3 fade 0 13.8 0.3
sox t.wav t1.wav trim 38.1 fade t 0 8 2 vol 0.2
sox -m effect3.mp3 t1.wav Tango2Waltz.mp3
sox w.wav Waltz.mp3 trim 0 =54.6 =2:58.4 -5 splice 54.6,0.3
sox Tango.mp3 Tango2Waltz.mp3 Waltz.mp3 TangoAndWaltz.mp3
sox VienneseWaltzFull.mp3 Between.mp3 TangoAndWaltz.mp3 Full.mp3 splice -t 55.35,0.5,0

Исходниками были файлы waltz.wav (медленный вальс), t.wav (танго), vw.wav (венский вальс), kafe.mp3 (шум голосов), Cork_shampane.mp3 (звук вылетающей пробки), clock.mp3 (бой часов). В итоге получился файл Full.mp3. Между каждой парой строчек я оценивал на слух, насколько хорошо получилось. Если получилось плохо — повторял с другими параметрами. Если всё равно не получалось — возвращался к предыдущим шагам.

★★★★★

Последнее исправление: Miguel (всего исправлений: 1)

Ответ на: комментарий от userid2

А как ты будешь оценивать промежуточный результат в общем случае?

Я не буду этого делать в общем случае. Я это буду делать только в частных случаях.

Miguel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Порезать makefile на куски и вызывать друг из друга?

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

Miguel ★★★★★
() автор топика
Ответ на: комментарий от Miguel

Тогда ты строишь слишком абстрактную систему. И так как у тебя есть заведомо неавтоматизируемый компонент в системе(ты), задача вряд ли вообще автоматизируется.

userid2
()

Реквестирую велосипед. Набор хаскеллных функций и ghci были бы удобны.

zinfandel ★★
()

То есть ты модифицируешь какие-то объекты в ФС (файлы, например) и хочешь иметь возможность откатиться к какому-то произвольному моменту времени? Возможно тебе просто нужна ФС со снапшотами? Или там versioning file system?

anonymous
()

насколько понял хочется чего-то по типу bwize (http://wiki.tcl.tk/8537 и http://wiki.tcl.tk/22190)? То есть построить data-flow и тюнить отдельные параметры узлов, проверяя промежуточный и конечный результаты..

боюсь на освоение bwize уйдёт слишком много сил и времени, но подобный функционал должен-же быть в звуковых редакторах: переформулируйте вопрос, тут много народу работает со звуком - подскажут годный тулз

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

bwize посмотрю, спасибо. Звук - не единственное применение подобной фигни; как я уже указывал, мне приходилось, например, обрабатывать pdf-ки подобным образом. Так что звуковые редакторы отпадают.

Miguel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Или там versioning file system?

Версионность - полдела. Нужно ещё запоминать, при помощи какой команды из одной версии получилась следующая.

Miguel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Возможно тебе просто нужна ФС со снапшотами? Или там versioning file system?

Это, конечно, HAMMER. Снепшоты, прозрачные для пользователя транзакции и все такие дела

shamaz
()
Ответ на: комментарий от Miguel

Так что звуковые редакторы отпадают

Однако твои пляски с sox'ом там автоматизированы по самое небалуйся. И никакая make-тулза до них не дотянется.

anonymous
()
Ответ на: комментарий от anonymous

Однако твои пляски с sox'ом

Опять-таки: это лишь один из примеров.

И никакая make-тулза до них не дотянется.

Почему именно?

Miguel ★★★★★
() автор топика

Оно, конечно, Ъ и консоль-хардкор, но почему бы не взять Audacity? Общие инструменты редко бывают удобнее специализированных.

anonymous
()
Ответ на: комментарий от Miguel

Почему именно?

Общий инструмент vs специализированный.

Опять-таки: это лишь один из примеров.

Комментить отдельные строчки в скрипте на порядок проще чем въезжать в какую-то НЕХ (она же чорноэкранная будет).

anonymous
()
Ответ на: комментарий от Miguel

Так можно же накостылить: или файл завести, в который записывается последняя команда, или прямо в комментарий её писать. Для графа, которому в добавок нужны состояния файлов, очень даже неплохо подходит.

anonymous
()
Ответ на: комментарий от Miguel

Опять же, WYSIWYG для pdf-а должен быть. Те же Acrobat/Foxit наверняка что-то такое умеют.

anonymous
()
Ответ на: комментарий от anonymous

(она же чорноэкранная будет).

У меня лично терминал всегда с белым фоном.

Miguel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Так можно же накостылить: или файл завести, в который записывается последняя команда, или прямо в комментарий её писать. Для графа, которому в добавок нужны состояния файлов, очень даже неплохо подходит.

Дык в том-то и дело, что состояния файлов не так уж нужны. Как правило в таких workflow файл либо полностью создаётся заново (причём старая версия уже никому нафиг не нужна), либо вообще не меняется. Возможность версионирования файлов — приятный, но необязательный бонус.

Miguel ★★★★★
() автор топика
Ответ на: комментарий от zinfandel

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

Miguel ★★★★★
() автор топика
Ответ на: комментарий от Miguel

Звук - не единственное применение подобной фигни; как я уже указывал, мне приходилось, например, обрабатывать pdf-ки подобным образом. Так что звуковые редакторы отпадают.

если штуковина востребована (и будет настрой), можно после НГ набросать..я подобную вещь когда-то делал, правда без GUI - в мат.моделях техпроцессов

MKuznetsov ★★★★★
()

Как-то пришлось разрезать и склеивать программно звуковые дорожки речи без щелчков и больших задержек.
Перепробовал все ...
Везде глюкавые полуфабрикаты и убийство вагонами времени + корявые интерфейсы с хреновыми доками.
Через неделю малопродуктивного секаса под линем, пришлось переползти с позором на вантуз и сделать всю работу за один день.))

bedcasus
()

Посмотрите на режим SCons:

scons --interactive

SCons — система сборки с описанием графа зависимостей на Python.

С опцией --interactive открывается простая консоль с парой команд. Вполне возможно есть возможности раширить набор команд. В этом случае разруливание графа зависимостей, пересборку его части, etc., SCons сделает за вас, нужно будет добавить только нужный интерфейс.

PS. http://blog.bfitz.us/?p=1712

gv
()
Последнее исправление: gv (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.