Скрипты для Demagog
Модератор: flegont
- tonio_k
- V.I.P.
Скрипты для Demagog
Сравнение звучания аудио при изменении скорости воспроизведения:
► Показать
Аудио ускоренное с помощью Sox
Аудио ускоренное в программе MP3 Speed
Субъективное ощущение, Sox - как будто Максим в стакан говорит. MP3 Speed дает более "чистый" результат на выходе- flegont
- V.I.P.
Скрипты для Demagog
Sox - Максим говорит, как будто в пустой комнате. В параметрах, наверное, реверберация включена?
- tonio_k
- V.I.P.
Скрипты для Demagog
Sox - скопировал параметры "как есть" которые balaamster в примере привел. С чем экспериментировать не знаю. У Sox такой огромный мануал.
Отправлено спустя 15 минут 16 секунд:
Отправлено спустя 15 минут 16 секунд:
не рассматривал по причине страха проблем с кодировками DOS. Надо попробовать...
- flegont
- V.I.P.
Скрипты для Demagog
Как я понял, параметры реверберации в строке, приведенной balaamster - это reverb 20 40 40 Вот их и убрать
- tonio_k
- V.I.P.
- flegont
- V.I.P.
Скрипты для Demagog
Кстати, тест Максима с реверберацией мне даже понравился. Создается впечатление, что это реальный человек, в некоем реальном окружении (пустая комната/студия) читает текст.
Если вот только бы реверберацию чуток ослабить
Вспомнился роман Роберта Хайнлайна "Луна - суровая хозяйка". Вождем грядущей революции выбрали суперкомпьютер. Уж он-то не предаст и не струсит. Суперкомп "Майк" общался с подпольщиками е-мейлами и телефонными звонками. Но, возникла проблема: голос "товарища Адама Селена" звучал "мертво", т.к. отсутствовал звуковой фон. Тогда добавили разные эффекты: легкую реверберацию, шорохи; иной раз голос секретарши сообщал, что тов. Адам говорит по другому телефону. Потом слышался звук спускаемой воды в унитазе, шаги, и голос тов. Адама: "Алло, Адам Селен слушает!"
Если вот только бы реверберацию чуток ослабить
Вспомнился роман Роберта Хайнлайна "Луна - суровая хозяйка". Вождем грядущей революции выбрали суперкомпьютер. Уж он-то не предаст и не струсит. Суперкомп "Майк" общался с подпольщиками е-мейлами и телефонными звонками. Но, возникла проблема: голос "товарища Адама Селена" звучал "мертво", т.к. отсутствовал звуковой фон. Тогда добавили разные эффекты: легкую реверберацию, шорохи; иной раз голос секретарши сообщал, что тов. Адам говорит по другому телефону. Потом слышался звук спускаемой воды в унитазе, шаги, и голос тов. Адама: "Алло, Адам Селен слушает!"
- tonio_k
- V.I.P.
Скрипты для Demagog
Моя логика: ускорение воспроизведения оригинальной записи должна быть без искажений. Это линейная задача без ответвлений. На выходе должно получится оригинал, но ускоренный. Всё остальное это уже побочный поиск "чего то нового".
Теперь о "фломастерах":
Ревербация сначала мною воспринималась как искажение от очень дёшевых наушников. Но это от того, что прямо под рукой есть оригинал.
Это как переход олдскульников от Николая Елановича к Максиму Ивонычу. Надо полчаса - час непрерывной прослушки текста в новом режиме. Только после этого становится понятно, нравится ли вам эта обнова или нет. И уже к Николаю не захочется вернуться. Потому что при попытке "обратной" привязки от Максима к Николаю скорее всего всего "возврат" уже не получится.
К стати, игра с ревербацией может оказаться неплохим обезбаливающим для ушей тем, кто желает от Николая отдохнуть.
Отправлено спустя 1 минуту 49 секунд:
А вот на счёт программы MP3 speed по скорости она работает намного быстрее Sox
Теперь о "фломастерах":
Ревербация сначала мною воспринималась как искажение от очень дёшевых наушников. Но это от того, что прямо под рукой есть оригинал.
Это как переход олдскульников от Николая Елановича к Максиму Ивонычу. Надо полчаса - час непрерывной прослушки текста в новом режиме. Только после этого становится понятно, нравится ли вам эта обнова или нет. И уже к Николаю не захочется вернуться. Потому что при попытке "обратной" привязки от Максима к Николаю скорее всего всего "возврат" уже не получится.
К стати, игра с ревербацией может оказаться неплохим обезбаливающим для ушей тем, кто желает от Николая отдохнуть.
Отправлено спустя 1 минуту 49 секунд:
А вот на счёт программы MP3 speed по скорости она работает намного быстрее Sox
- flegont
- V.I.P.
Скрипты для Demagog
К стати, игра с ревербацией может оказаться неплохим обезбаливающим для ушей тем, кто желает от Николая отдохнуть.
Ну, Sox - такой комбайн с таким множеством функций, что быстро ездить не можетMP3 speed по скорости она работает намного быстрее Sox
- tonio_k
- V.I.P.
Скрипты для Demagog
а что если в sox скорость менять напрямую? Может это даст небольшой прирост в скорости самой обработки
В Демагоге в настройках аудио сохранять аудио в формате WAV, а в Sox сразу конвертировать WAV в ускоренный mp3?
- balaamster
- Обыватель
Скрипты для Demagog
Я ранее писал, что добавление sox в настройки внешнего кодировщика должно работать.
Проверил, из скрипта выводится нормально, например через WAudio(1,"C:\\temp\\",false).
► Показать
Ещё из параметров SoX, помимо reverb 20 40 40, можно убрать pitch -50, это я для более гибкого понижения тона использовал.
Отправлено спустя 26 минут 46 секунд:
Попробовал с генерацией временных bat, как предложил flegont - тоже работает.
► Показать
- tonio_k
- V.I.P.
Скрипты для Demagog
balaamster,
Думаю самое правильное решение как раз ваш первый вариант с
Общие настройки -> Аудио
D:\Demagog\sox\sox.exe | -G --multi-threaded -q %1 -C 64.01 %2 tempo -s 1.1 | mp3
тогда ничего со скриптами не нужно придумывать.
В любом случае WAudio берет свои настройки записи из этого окна.
flegont, Общие настройки -> Аудио
а есть возможность "как то" прописать Demagog\sox\sox.exe что бы эта папка могла стать частью моей сборки "portabl"
что то вроде HomeFolder('sox')
Думаю самое правильное решение как раз ваш первый вариант с
Общие настройки -> Аудио
D:\Demagog\sox\sox.exe | -G --multi-threaded -q %1 -C 64.01 %2 tempo -s 1.1 | mp3
тогда ничего со скриптами не нужно придумывать.
В любом случае WAudio берет свои настройки записи из этого окна.
flegont, Общие настройки -> Аудио
а есть возможность "как то" прописать Demagog\sox\sox.exe что бы эта папка могла стать частью моей сборки "portabl"
что то вроде HomeFolder('sox')
- flegont
- V.I.P.
Скрипты для Demagog
Такой возможности нет. Я с самого начала исходил из того, что "конвертер пользователя" либо находится прямо в рабочей папке Демагога (как и 4 штатных: lame, ogg и т.п.); либо указывается полное имя конвертера. В последем случае конвертер может находиться где угодно на компьютере пользователя.
- balaamster
- Обыватель
Скрипты для Demagog
Придумал такой трюк.
Создаём скрипт "ConfigureEncoder.lua":
► Показать
Что интересно, os.exit() не даёт Demagog'у сохранить свой конфиг, поверх изменённого.
О оригинальный конфиг сохраняется в виде $.cfg_bkp, на всякий случай
- tonio_k
- V.I.P.
Скрипты для Demagog
В любом случае предполагается "отдельный" запуск отдельно созданного скрипта использовать. Думаю универсальнее будет один раз настроить в самом Демагоге выходной аудио формат wav.
А Для реализации идеи с "portabl" добавлять в скрипты строки с генерацией консольных команд в temp.bat, для создания которых во всю можно будет применять функцию HomeFolder('sox')
Здесь можно прописать применение и lame.exe или другие консольные скачанные на свой вкус конверторы
А Для реализации идеи с "portabl" добавлять в скрипты строки с генерацией консольных команд в temp.bat, для создания которых во всю можно будет применять функцию HomeFolder('sox')
Здесь можно прописать применение и lame.exe или другие консольные скачанные на свой вкус конверторы
- flegont
- V.I.P.
Скрипты для Demagog
Хм... А ведь подобным "конфигурационным" скриптом можно любые желаемые настройки в $.cfg править. Какое-нибудь большое меню - выбрать, что именно править... потом подменю правки той или иной настройки, окошки ввода новых значений параметров и т.д. и т.п.
Получится скрипт по управлению настройками. Интересно
Отправлено спустя 11 минут 6 секунд:
P.S. os.exit() - сразу прекращается выполнение программы-хозяина. Например:
Лимонадный Джо каждый день приходил в салун, говорил собравшимся: "Всем привет!" и бармену: "Стаканчик виски!" Выпивал, занюхивал рукавом, говорил: "Заплачу завтра" и уходил, гордо звякая шпорами.
И вот, однажды он вошел, сказал "Всем привет...", тут же был схвачен за шиворот и вышвырнут из салуна. Виски осталось в бутылке в целости и сохранности. Точно так же и Демагог не успевает затереть $.cfg, будучи вовремя выпровожен за дверь
Получится скрипт по управлению настройками. Интересно
Отправлено спустя 11 минут 6 секунд:
P.S. os.exit() - сразу прекращается выполнение программы-хозяина. Например:
Лимонадный Джо каждый день приходил в салун, говорил собравшимся: "Всем привет!" и бармену: "Стаканчик виски!" Выпивал, занюхивал рукавом, говорил: "Заплачу завтра" и уходил, гордо звякая шпорами.
И вот, однажды он вошел, сказал "Всем привет...", тут же был схвачен за шиворот и вышвырнут из салуна. Виски осталось в бутылке в целости и сохранности. Точно так же и Демагог не успевает затереть $.cfg, будучи вовремя выпровожен за дверь
- tonio_k
- V.I.P.
Скрипты для Demagog
balaamster, лень взяла свое.
Решил ваш скрипт, вносящий изменения в $.cfg - взять на вооружение.
создал !!!_ЗАПУСТИТЬ ОДИН РАЗ ПРИ ПЕРВОМ ЗАПУСКЕ ДЕМАГОГа.lua и поместил туда ваш код.
в нем добавил строки перед os.exit():
Получился скрипт, который после отработки самоуничтожается.
Решил ваш скрипт, вносящий изменения в $.cfg - взять на вооружение.
создал !!!_ЗАПУСТИТЬ ОДИН РАЗ ПРИ ПЕРВОМ ЗАПУСКЕ ДЕМАГОГа.lua и поместил туда ваш код.
в нем добавил строки перед os.exit():
Код: Выделить всё
local home = HomeFolder('_Tests_')
os.remove(home..'\\!!!_ЗАПУСТИТЬ ОДИН РАЗ ПРИ ПЕРВОМ ЗАПУСКЕ ДЕМАГОГа.lua')
ShowMessage('Первый запуск - готово! Перезапустите Демагог')
os.exit()
- balaamster
- Обыватель
Скрипты для Demagog
Благодаря напоминанию:
Копируем ffmpeg.exe (нужно скачать "static" версию) в папку с Demagog, прописываем настройки:
Custom encoder
ffmpeg.exe
-loglevel -8 -y -i %1 -af atempo=1.1 -b:a 64k %2
mp3
Для реверберации нужно прописать такие настройки:
-loglevel -8 -y -i %1 -af "aecho=0.8:0.6:20|40:0.2|0.2, atempo=1.1" -b:a 64k %2
Так как ffmpeg (static) идёт одним экзешником, то не потребуется править конфиг.
с портативной версией всё становится гораздо проще:
Копируем ffmpeg.exe (нужно скачать "static" версию) в папку с Demagog, прописываем настройки:
Custom encoder
ffmpeg.exe
-loglevel -8 -y -i %1 -af atempo=1.1 -b:a 64k %2
mp3
Для реверберации нужно прописать такие настройки:
-loglevel -8 -y -i %1 -af "aecho=0.8:0.6:20|40:0.2|0.2, atempo=1.1" -b:a 64k %2
► Показать
- tonio_k
- V.I.P.
Скрипты для Demagog
потестю. Есть предположение что скорость обработки будет быстрее
Отправлено спустя 13 часов 48 минут 15 секунд:
balaamster, Все работает отлично! И скорость хорошая.
Единственный минус - это размер в 45Мб - тяжеленький для консольной утилиты
Вопрос. В lame -b64 -f (-f это низкое качество) А как в ffmpeg сделать низкое качество?
Вроде -q за это отвечает причем 1 - высшее качество. Но вот шкалу вариации качества не нашел. Может там только два значения? 1 или 0?
Отправлено спустя 13 часов 48 минут 15 секунд:
balaamster, Все работает отлично! И скорость хорошая.
Единственный минус - это размер в 45Мб - тяжеленький для консольной утилиты
Вопрос. В lame -b64 -f (-f это низкое качество) А как в ffmpeg сделать низкое качество?
Вроде -q за это отвечает причем 1 - высшее качество. Но вот шкалу вариации качества не нашел. Может там только два значения? 1 или 0?
- balaamster
- Обыватель
Скрипты для Demagog
Ну да, такой размер - расплата за поддержку очень большого набора аудио- и видеокодеков,
фильтров и контейнеров.
Да, -q. Принимает значения от 0 до 9. 0 - максимальное качество, 9 - минимальное.
Получается так:
-loglevel -8 -y -i %1 -af atempo=1.1 -b:a 64k -q:a 9 %2
- tonio_k
- V.I.P.
Скрипты для Demagog
А скриптом можно как то мою проблему решить?
Дело в том, что "вывести всё" - это единственный известный мне способ работы со словарями rex или dic по "фильтру". А если результат будет отсортирован без сохранения последовательности как в оригинале, то может быть нарушен порядок их срабатывания ( для rex).
Вот и хотелось бы решить эту задачу хотя бы через скрипт. Схему работы со словарями представляю примерно по такой схеме:
Вывод всех целых строк с сохранением последовательности строк как в оригинале с пользовательскими условиями выборки:
1)Слово / Часть слова (С учётом регистра / без учёта регистра) находящегося в левой части правила
2)Слово / Часть слова (С учётом регистра / без учёта регистра) находящегося в правой части правила
3) с возможностью дополнительно активировать режим: поиск по пунктам 1 и 2 с заменой найденных строк в оригинале на "пусто", но при этом (на всякий случай) полученный результат поиска дополнительно сохранить во временном текстовом файле - пусть перезаписывается каждый раз после команды "найти".
- flegont
- V.I.P.
Скрипты для Demagog
Если текст не содержит символов Юникода (например, транскрипцию IPA), то средствами Lua можно (в принципе) делать с текстом что угодно. В Lua есть свой собственный язык "регулярных выражений" - простенький, но позволяет формулировать запросы поиска. Например: %a+ найти слово целиком. И т.д. и т.п.
Трудность будет представлять только один нюанс. Lua - язык регистро-чувствительный, и в нем нет функций, позволяющих искать в тексте без учета регистра. Известен трюк для обхода этого ограничения, но, насколько он будет затормаживать процесс поиска - сведений не имею.
Более содержательный ответ даст только эксперимент.
Трудность будет представлять только один нюанс. Lua - язык регистро-чувствительный, и в нем нет функций, позволяющих искать в тексте без учета регистра. Известен трюк для обхода этого ограничения, но, насколько он будет затормаживать процесс поиска - сведений не имею.
Более содержательный ответ даст только эксперимент.
- tonio_k
- V.I.P.
Скрипты для Demagog
А насколько критично в поиск/замена добавь возможность отключить /включить сортировку? Что бы выводило"как есть"?
Отправлено спустя 6 минут 47 секунд:
Или вообще сортировку отключить по умолчанию. Ведь по идее, результат всегда можно и самостоятельно отсортировать правая клавиша-сортировка строк-без дубликатов. Зато не будет "потерян" нужный промежуточный результат в оригинальной последовательности.
Отправлено спустя 6 минут 47 секунд:
Или вообще сортировку отключить по умолчанию. Ведь по идее, результат всегда можно и самостоятельно отсортировать правая клавиша-сортировка строк-без дубликатов. Зато не будет "потерян" нужный промежуточный результат в оригинальной последовательности.
- flegont
- V.I.P.
Скрипты для Demagog
На заре создания опции "Найти/Заменить" я однажды в большом тестовом примере вывел "Все подходящие" для ключа поиска "все". Дубликаты тогда не отсеивались и я получил много-много тысяч строк вида:Зато не будет "потерян" нужный промежуточный результат в оригинальной последовательности.
все
все
все
все
все
...
все
И что? Это как-то помогло мне определить место каждого этого/того же самого слова в оригинальном тексте?
Во избежание подобных огромных и практически бессодержательных отчетов о "всех подходящих", было сделано так, как сделано. Алфавитный порядок без дубликатов.
- tonio_k
- V.I.P.
Скрипты для Demagog
В принципе Notepad++ может искать по шаблону REX и выводить результат в последовательности как в оригинале. Пока в нём поработаю.
Что касается скрипта, надо будет придумать как превратить поисковую строку REX в аналогичную и понятную для Lua
Отправлено спустя 2 часа 1 минуту :
flegont, вспомнил, что в стандартной комплектации Демагог есть скрипт Fragments with given words.lua очень похоже, что StrMatch(string.lower(w[j]),fnd) как раз и находит строку без учета регистра (при условии, что в строку поиска я ввожу слово в нижнем регистре). Но мозгов у меня не хватит подсунуть маску для поиска ^[^=]*=[^=]*fnd[^=]*$ подскажите как это сделать.
Отправлено спустя 2 минуты 53 секунды:
И добавить строчку в скрипт по замене найденной строки на ""
Что касается скрипта, надо будет придумать как превратить поисковую строку REX
Код: Выделить всё
^[^=]*=[^=]*искомое_слово[^=]*$
@^[^=]*=[^=]*искомое_слово[^=]*$
Отправлено спустя 2 часа 1 минуту :
flegont, вспомнил, что в стандартной комплектации Демагог есть скрипт Fragments with given words.lua очень похоже, что StrMatch(string.lower(w[j]),fnd) как раз и находит строку без учета регистра (при условии, что в строку поиска я ввожу слово в нижнем регистре). Но мозгов у меня не хватит подсунуть маску для поиска ^[^=]*=[^=]*fnd[^=]*$ подскажите как это сделать.
Отправлено спустя 2 минуты 53 секунды:
И добавить строчку в скрипт по замене найденной строки на ""
- flegont
- V.I.P.
Скрипты для Demagog
Кажется, мы ведем наступление в одном направлении и танковые клинья вот-вот возьмут противника в клещи
StrMatch() в данном случае не подойдет, т.к. она использует обычный, примитивный поиск по маске со * или без нее. Но в составе Демагога есть функция PosR() - поиск в строке по регулярному выражению.
Я попробую импортировать ее в интерпретатор. Чтобы ею можно было пользоваться прямо из скрипта.Теоретически - всё должно работать. При условии, что в маске поиска - регулярном выражении, и в исследуемой строке нет символов Юникода.
StrMatch() в данном случае не подойдет, т.к. она использует обычный, примитивный поиск по маске со * или без нее. Но в составе Демагога есть функция PosR() - поиск в строке по регулярному выражению.
Я попробую импортировать ее в интерпретатор. Чтобы ею можно было пользоваться прямо из скрипта.Теоретически - всё должно работать. При условии, что в маске поиска - регулярном выражении, и в исследуемой строке нет символов Юникода.
- flegont
- V.I.P.
Скрипты для Demagog
Версия 361, сборка от 28.11.2018
Открыт доступ (в тестовых целях) к функциям встроенного интерпретатора:
RexMatch(s, mask, pos) - ищет совпадение в строке s по регулярному выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0
DicMatch(s, mask, pos) - ищет совпадение в строке s по dic-выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0
Замечание: юникодные символы в s и mask - не поддерживаются.
Примеры использования
Открыт доступ (в тестовых целях) к функциям встроенного интерпретатора:
RexMatch(s, mask, pos) - ищет совпадение в строке s по регулярному выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0
DicMatch(s, mask, pos) - ищет совпадение в строке s по dic-выражению mask с начальной позиции pos (по умолчанию 1); возвращает совпавший фрагмент и позицию его начала. Если не найдено, то возвращает '', 0
Замечание: юникодные символы в s и mask - не поддерживаются.
Примеры использования
► Показать
- tonio_k
- V.I.P.
Скрипты для Demagog
Пример использования RexMatch(s, mask, pos) .
Всё то же самое, но с окном ввода и сохранением последнего поискового запроса (вытащил из Fragments with given words.lua)
Единственная просьба, подскажите, как можно сделать так, что бы все найденные фрагменты в оригинале - удалялись?
Отправлено спустя 12 минут 12 секунд:
к стати, такой вариант запроса скорее всего будет более правильный:
Отправлено спустя 6 минут 6 секунд:
P.S. в "диалоговое окно" регулярное выражение надо вводить без окаймляющих [[ ]]
Отправлено спустя 9 минут 20 секунд:
И опять возникла "потребность" в возможности назначения горячей клавиши для скрипта. Пусть эта горячая клавиша запускает скрипт с уникальным именем (и желательно вне общего списка скриптов) - его содержимое пользователь сам меняет под свои нужды.
Пока работал с поиском RexMatch(s, mask, pos) . - Пару раз щелкнул не по тому скрипту и понеслась...
Всё то же самое, но с окном ввода и сохранением последнего поискового запроса (вытащил из Fragments with given words.lua)
► Показать
Отправлено спустя 12 минут 12 секунд:
к стати, такой вариант запроса скорее всего будет более правильный:
Код: Выделить всё
r = [[@^.*=.*вОрон\b.*$]]
Отправлено спустя 6 минут 6 секунд:
P.S. в "диалоговое окно" регулярное выражение надо вводить без окаймляющих [[ ]]
Отправлено спустя 9 минут 20 секунд:
И опять возникла "потребность" в возможности назначения горячей клавиши для скрипта. Пусть эта горячая клавиша запускает скрипт с уникальным именем (и желательно вне общего списка скриптов) - его содержимое пользователь сам меняет под свои нужды.
Пока работал с поиском RexMatch(s, mask, pos) . - Пару раз щелкнул не по тому скрипту и понеслась...
- flegont
- V.I.P.
Скрипты для Demagog
UPDATE. Первое, что приходит в голову:чтобы все найденные фрагменты в оригинале - удалялись
Код: Выделить всё
-- Удаление из текста по шаблону
s = WText(1)
r = [[\bвсе\b\s+\w+\s+\w+ло\b]]
k = 1
while k > 0 do
fnd, k = RexMatch(s,r,k)
if k > 0 then
z = k + #fnd
s = string.sub(s,1,k-1)..string.sub(s,z+1,#s) -- вырезаем найденное
end
end
WNew(1,s) -- обновляем исходный текст
Т.с. "динамической" горячей клавиши. Назначил, переназначил, отменил...горячей клавиши для скрипта
Что-нибудь придумаю.
- tonio_k
- V.I.P.
- flegont
- V.I.P.
- tonio_k
- V.I.P.
Скрипты для Demagog
понял . Я то думал это пример 2 в 1 (и находит и удаляет).
Скопировал - вставил и жду когда "хорошо" наступит .
А это, оказывается, пример только удаления по шаблону.
Удаление - все работает!
Отправлено спустя 2 часа 20 минут 42 секунды:
Допустим, после отработки скрипта вместо удаленных ячеек у меня вставляются строки:
#_вырезано
#_вырезано
Вопрос, как можно через скрипт найти любую из них, что бы курсор переместится на найденную строку и соответственно отображение экрана сместилось к этой строке?
Скопировал - вставил и жду когда "хорошо" наступит .
А это, оказывается, пример только удаления по шаблону.
Удаление - все работает!
Отправлено спустя 2 часа 20 минут 42 секунды:
Допустим, после отработки скрипта вместо удаленных ячеек у меня вставляются строки:
#_вырезано
#_вырезано
Вопрос, как можно через скрипт найти любую из них, что бы курсор переместится на найденную строку и соответственно отображение экрана сместилось к этой строке?
- flegont
- V.I.P.
Скрипты для Demagog
Можно один и тот же каменный топор использовать для всех хозяйственных нужд
Отправлено спустя 9 минут 17 секунд:
А вот вариант с поиском стандартной функцией Lua string.find()
Замечание. os.setlocale переключает дефолтную кодовую страницу Lua на учет местной локали, т.е. при поиске буквами будут считаться буквы английского и русского языка.
А насчет прокрутки экрана к найденному - надо как-то в следующей версии функцию WSel() модернизировать.
Код: Выделить всё
-- найти и выделить в тексте в окне 4 слово "история"
s = WText(4)
mask = [[история]]
fnd, k = RexMatch(s,mask,1)
if k > 0 then WSel(4,k-1,#fnd) end
Отправлено спустя 9 минут 17 секунд:
А вот вариант с поиском стандартной функцией Lua string.find()
Замечание. os.setlocale переключает дефолтную кодовую страницу Lua на учет местной локали, т.е. при поиске буквами будут считаться буквы английского и русского языка.
Код: Выделить всё
cl = os.setlocale('', 'ctype') -- !
s = WText(4)
mask = [[история]]
k = string.find(s,mask,1,true)
if k then WSel(4,k-1,#mask) end
os.setlocale(cl)
- tonio_k
- V.I.P.
Скрипты для Demagog
такими темпами Демагог по программным кирпичикам разберём. "Демагог конструктор" - собери свою модель.
- flegont
- V.I.P.
Скрипты для Demagog
Да, у Демагога модульная структура. Он, действительно, чем-то похож на конструктор
- flegont
- V.I.P.
Скрипты для Demagog
Проверил. Ничего не надо, нормально работает, автоматом переводит экран к найденному.функцию WSel() модернизировать.
- tonio_k
- V.I.P.
Скрипты для Demagog
скажите, а есть возможность его применения в виде замены с захватами типа:
r = [[\bвсе\b\s+(\w+)\s+(\w+ло)\b]]
v = [[всЁ $1 $2]]
аналог \bвсе\b\s+(\w+)\s+(\w+ло)\b=всЁ $1 $2 из словаря rex
- flegont
- V.I.P.
Скрипты для Demagog
В следующей версии попробую сделать.
Демагоговский модуль function PosR(...), который я импортировал в Lua под именем RexMatch, имеет дополнительный параметр: строку - шаблон замены, с обработкой захватов. Просто я этот параметр имортиртировать не стал, решил, что это уже лишнее.
Непродуманное было решение, однако
Демагоговский модуль function PosR(...), который я импортировал в Lua под именем RexMatch, имеет дополнительный параметр: строку - шаблон замены, с обработкой захватов. Просто я этот параметр имортиртировать не стал, решил, что это уже лишнее.
Непродуманное было решение, однако
- tonio_k
- V.I.P.
Скрипты для Demagog
скрипт работает, но если в окне, к которому хотим применить этот скрипт выделить текст, то происходит странное - в окне остается только выделенный текст, а в окне статистики пусто
Код: Выделить всё
-- печать всех строк текста из окна 1, отвечающих заданному регулярному выражению
-- поиск идет с учетом регистра (символ @ в начале РВ)
ind = WActive()
s = WText(ind)
header = 'Поиск фрагментов с заданными словами'
askname = 'Регулярное выражение (REX):'
defname = [[^(.)*(.)*=(.)*(.)*$]]
if FileExists('#rexFind.@') then
fnd = LoadFromFile('#rexFind.@')[1]
else
fnd = defname
end
fnd = Input(header,{askname..'='..fnd})
if not fnd then goto HALT end
fnd = fnd[1]
SaveToFile({fnd},'#rexFind.@')
--поиск
WNew(0)
r = fnd
k = 1
while k > 0 do
fnd, k = RexMatch(s,r,k)
WLog(fnd)
if k > 0 then k = k+#fnd+1 end
end
--удаление найденного
k = 1
while k > 0 do
fnd, k = RexMatch(s,r,k)
if k > 0 then
z = k + #fnd
s = string.sub(s,1,k-1)..'#_вырезано\r'..string.sub(s,z+1,#s) -- вырезаем найденное
end
end
WNew(ind,s) -- обновляем исходный текст
--s_0 = WText(0)
--SaveToFile({s_0},'#tempVirezka.txt')
--WActive(0)
-- установить курсор на позиции найденного
--s = WText(ind)
--mask = '#_вырезано'
--fnd, k = RexMatch(s,mask,1)
--if k > 0 then WSel(ind,k-1,#fnd) end
--SaveToFile({s},'#tempSlovar.txt')
::HALT::
- flegont
- V.I.P.
Скрипты для Demagog
Я точно не помню, надо глянуть в программе: как работает WText(). Возможно, там остался "артефакт" - возврат строки, равной не всему тексту, а только выделенному фрагменту (если таковой имелся). Это - нехорошо. Буду разбираться.
- flegont
- V.I.P.
Скрипты для Demagog
Это должны быть 2 новые функции:замены с захватами
RexRepl(s, p, q) - замены в строке s, где p - регулярное выражение для поиска, возможно, с захватами; q - РВ для замены. p, q можно считать левой и правой частью некоторого правила из rex-словаря
DicRepl(s, p, q) - аналогично, p и q - понимаются, как левая и правая части некоторого dic-правила
- tonio_k
- V.I.P.
Скрипты для Demagog
RexRepl(s, p, q) навело на мысль о создании скрипта - диалогового окна для тестирования правил регулярного выражения. Внешний вид -Три текстовых окна:
1) для регулярного выражения
2) входящий текст
3) результат работы регулярного выражения
Главное - что бы можно было выбрать размер шрифта для текста или сразу сделать его по крупнее.
Отправлено спустя 35 минут 58 секунд:
Хм.... Или попробовать сделать скрипт под одно окно Демагога. Который будет работать с текстовым файлом в виде:
1) для регулярного выражения
2) входящий текст
3) результат работы регулярного выражения
Главное - что бы можно было выбрать размер шрифта для текста или сразу сделать его по крупнее.
Отправлено спустя 35 минут 58 секунд:
Хм.... Или попробовать сделать скрипт под одно окно Демагога. Который будет работать с текстовым файлом в виде:
Код: Выделить всё
Сюда вводим правило rex
#--------------------------------------
Текст
#--------------------------------------
Результат
- flegont
- V.I.P.
Скрипты для Demagog
1) Кнопка "T" в панели инструментов - настройка вида и размера шрифта.
А колесико мыши при одновременно нажатой левой клавише - масштаб. Его величина в % показывается в Строке состояния. В разных окнах можно задавать прокруткой колесика разный масштаб. Выбранные масштабы действуют в течение сеанса. При закрытии Демагога сбрасываются на 100% по умолчанию.
2) И так можно. Или, с каким-то словом-разделителем:
Правило rex +debug+ Текст
После выполнения скрипта текст приобретает вид, как на примере выше. Вверху правило, внизу текст, за ним результат
Или "операционные скобки" <<<правило>>>текст<<<end>>> обрамляющие любые фрагменты книги, которые надо протестировать. Причем с разными правилами. А результат в Статистику.
Вариантов масса.
А колесико мыши при одновременно нажатой левой клавише - масштаб. Его величина в % показывается в Строке состояния. В разных окнах можно задавать прокруткой колесика разный масштаб. Выбранные масштабы действуют в течение сеанса. При закрытии Демагога сбрасываются на 100% по умолчанию.
2) И так можно. Или, с каким-то словом-разделителем:
Правило rex +debug+ Текст
После выполнения скрипта текст приобретает вид, как на примере выше. Вверху правило, внизу текст, за ним результат
Или "операционные скобки" <<<правило>>>текст<<<end>>> обрамляющие любые фрагменты книги, которые надо протестировать. Причем с разными правилами. А результат в Статистику.
Вариантов масса.
- tonio_k
- V.I.P.
Скрипты для Demagog
Все же скриптом - не очень удобно. Нужно нажать кнопку вызова окна со скриптами, найти нужный среди прочих, запустить его. Для этой задачи нужно отдельное рабочее окно - внёс корректировку в правило - нажал кнопку - смотрим результат и редактируем на месте.
- flegont
- V.I.P.
Скрипты для Demagog
Ну, для этого давно есть опция Ctrl+T - Показать применение правил.
В одном окне открыт словарь, он отмечен в Панели словарей.
Меняю правило, сохраняю изменение.
В окне, где текст, выделяю исследуемый фрагмент.
Ctrl+T
Появляется окно просмотра.
Результат в верхней его половине, примененное правило в нижней.
В одном окне открыт словарь, он отмечен в Панели словарей.
Меняю правило, сохраняю изменение.
В окне, где текст, выделяю исследуемый фрагмент.
Ctrl+T
Появляется окно просмотра.
Результат в верхней его половине, примененное правило в нижней.
- balaamster
- Обыватель
Скрипты для Demagog
Попробовал написать конвертер, который будет добавлять фон, устанавливать начало затухания фона, в зависимости от длительности речевого файла.
В тестовом варианте входные/выходные форматы mp3,wav,ogg.
Добавление фона отключается в диалоговом окне.
Есть выбор входного и выходного каталогов.
Архив необходимо распаковать в папку с Demagog. В папку fon скопировать mp3-файлы с фоновым звуком. ffmpeg должен лежать также в папке с Demagog.
В тестовом варианте входные/выходные форматы mp3,wav,ogg.
Добавление фона отключается в диалоговом окне.
Есть выбор входного и выходного каталогов.
Архив необходимо распаковать в папку с Demagog. В папку fon скопировать mp3-файлы с фоновым звуком. ffmpeg должен лежать также в папке с Demagog.
- tonio_k
- V.I.P.
Скрипты для Demagog
balaamster, сначала создаем как обычно книгу в mp3,wav,ogg со своими настройками в изменении скорости воспроизведения (-af atempo=1.1)
Потом запускаем Ваш скрипт, который запускает converter.exe задает вопросы и начинает конвертировать по второму кругу.
Я правильно понял?
Отправлено спустя 4 минуты 12 секунд:
тогда "до кучи" может и (-af atempo=1.1) в скрипт добавить?
Отправлено спустя 11 минут 45 секунд:
Интересно, а можно как то "присобачить" mp3info.exe как Custom Encoder Напрямую в настройки к Демагогу может он какие то ini файлы поддерживает?
Отправлено спустя 10 часов 10 минут 13 секунд:
Вот готовый вариант скрипта по тестированию правил по шаблону REX. Самому понравилось как он работает
Плюсы: можно вводить сразу несколько строк правил rex - что бы увидеть как они в совокупности отрабатывают.
Минусы: - в обрабатываемом тексте не должен присутствовать знак равенства (=).
Знак равенства для скрипта является критерием отличия правила REX от обрабатываемого текста. Зато нет необходимости в разделителях между правилами REX и обычным текстом. Правило REX можно вводить как перед так и после обрабатываемого текста.
Если в всплывающем окне сравниваемые тексты не вмещаются, то их копия находится в окне статистики
Потом запускаем Ваш скрипт, который запускает converter.exe задает вопросы и начинает конвертировать по второму кругу.
Я правильно понял?
Отправлено спустя 4 минуты 12 секунд:
тогда "до кучи" может и (-af atempo=1.1) в скрипт добавить?
Отправлено спустя 11 минут 45 секунд:
Интересно, а можно как то "присобачить" mp3info.exe как Custom Encoder Напрямую в настройки к Демагогу может он какие то ini файлы поддерживает?
Отправлено спустя 10 часов 10 минут 13 секунд:
flegont, именно это для меня самое большое неудобство. Постоянно висит словарь среди основных. Можно про него забыть и он может сработать с основными словарями, а потом ищи где и почему не так работает .
Вот готовый вариант скрипта по тестированию правил по шаблону REX. Самому понравилось как он работает
Плюсы: можно вводить сразу несколько строк правил rex - что бы увидеть как они в совокупности отрабатывают.
Минусы: - в обрабатываемом тексте не должен присутствовать знак равенства (=).
Знак равенства для скрипта является критерием отличия правила REX от обрабатываемого текста. Зато нет необходимости в разделителях между правилами REX и обычным текстом. Правило REX можно вводить как перед так и после обрабатываемого текста.
Если в всплывающем окне сравниваемые тексты не вмещаются, то их копия находится в окне статистики
- flegont
- V.I.P.
Скрипты для Demagog
Скромненько, но со вкусом Всё работает как надо. А в новой версии, которую я сейчас тестирую, достаточно, введя правило и текст, нажать Shift+F2 для получения ответа.
(Shift+F2 - хоткей для прикрепления к нему какого-нибудь, часто используемого скрипта. Вот я и проверил, прикрепив .ТЕСТ REX ПРАВИЛА.lua )
(Shift+F2 - хоткей для прикрепления к нему какого-нибудь, часто используемого скрипта. Вот я и проверил, прикрепив .ТЕСТ REX ПРАВИЛА.lua )
- tonio_k
- V.I.P.
Скрипты для Demagog
получается "быстрый запуск скрипта" назначается только для одного любого скрипта? Или, например, Shift+F3 для ещё одного и так далее для нескольких скриптов?
- flegont
- V.I.P.
Скрипты для Demagog
Пока тестовый вариант прикрепления только для одного скрипта. Но хочется чего-нибудь вроде:
Базовый хоткей+0
Базовый хоткей+1
...
Базовый хоткей+9
Так сказать, чтобы можно было назначить TOP-10 самых нужных скриптов. Этого - более чем достаточно.
Что выбрать для базового хоткея - еще надо подумать. Практически все комбинации уже задействованы в тех или иных пунктах меню. Ну а F2 изначально использовалась для запуска скрипта из окна, может, из нее и надо что-то строить...
Отправлено спустя 1 час 31 минуту 6 секунд:
P.S. Прикинул, TOP-5 дефолтных скриптов будет достаточно, имхо
Базовый хоткей+0
Базовый хоткей+1
...
Базовый хоткей+9
Так сказать, чтобы можно было назначить TOP-10 самых нужных скриптов. Этого - более чем достаточно.
Что выбрать для базового хоткея - еще надо подумать. Практически все комбинации уже задействованы в тех или иных пунктах меню. Ну а F2 изначально использовалась для запуска скрипта из окна, может, из нее и надо что-то строить...
Отправлено спустя 1 час 31 минуту 6 секунд:
P.S. Прикинул, TOP-5 дефолтных скриптов будет достаточно, имхо
- balaamster
- Обыватель
Скрипты для Demagog
Сразу не описал порядок действий, в голове то у меня картина есть, а то что надо описать как оно работает - забыл
► Показать
Заменил mp3info на более тяжеловесный MediaInfo, который может получить длительность не только mp3, но и других форматов.
Теоретически можно.
В CustomEncoder прописать bat-файл, который будет получать имена входного и выходного файла, а вся сценарная логика обработки будет прописана в bat. Это максимально неудобный вариант. Работа со строками в bat реализована отвратительно, по сравнению с другими скриптовыми языками. Да и много других неудобств будет при реализации скрипта.
В CustomEncoder прописать bat-файл, который будет получать имена входного и выходного файла.
Папку Demagog дополнить интерпретатором lua.exe и из bat вызывать lua-скрипт.
Возможно, попробую реализовать какой-нибудь вариант. При наличии свободного времени.
Отправлено спустя 1 день 2 часа 53 минуты 19 секунд:
Сделал интеграцию Mediainfo и FFmpeg через bat-сценарий.
Теперь всё как обычно:
распаковываем conv.bat в папку с Demagog. (Mediainfo.exe и FFmpeg.exe должны также лежать там)
прописываем полный путь к conv.bat (просто conv.bat у меня не работает)
в строку параметров конвертера: %1 %2 64 1.0
порядок параметров получается такой: путь_входного_файла путь_выходного_файла битрейт темп
формат прописываем mp3 или ogg
Открываем текст, ctrl+m и погнали