Скрипты для Demagog

Говорящий текстовый редактор с открытым кодом, предназначенный для чтения вслух и записи в аудиофайл текстовых файлов с использованием пакетов речевых функций SAPI4\SAPI5.

Модератор: flegont

Ответить
Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#151

Сообщение tonio_k »

Сравнение звучания аудио при изменении скорости воспроизведения:
► Показать

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#152

Сообщение flegont »

Sox - Максим говорит, как будто в пустой комнате. В параметрах, наверное, реверберация включена?

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#153

Сообщение tonio_k »

Sox - скопировал параметры "как есть" которые balaamster в примере привел. С чем экспериментировать не знаю. У Sox такой огромный мануал. :library:


Отправлено спустя 15 минут 16 секунд:
flegont писал(а):
24 ноя 2018 23:40
и потом: os.execute('tmp.bat') ?
не рассматривал по причине страха проблем с кодировками DOS. Надо попробовать...

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#154

Сообщение flegont »

Как я понял, параметры реверберации в строке, приведенной balaamster - это reverb 20 40 40 Вот их и убрать

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#155

Сообщение tonio_k »

flegont писал(а):
25 ноя 2018 10:52
reverb 20 40 40 Вот их и убрать
отлично помогло!

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#156

Сообщение flegont »

Кстати, тест Максима с реверберацией мне даже понравился. Создается впечатление, что это реальный человек, в некоем реальном окружении (пустая комната/студия) читает текст.
Если вот только бы реверберацию чуток ослабить :smile1:

Вспомнился роман Роберта Хайнлайна "Луна - суровая хозяйка". Вождем грядущей революции выбрали суперкомпьютер. Уж он-то не предаст и не струсит. Суперкомп "Майк" общался с подпольщиками е-мейлами и телефонными звонками. Но, возникла проблема: голос "товарища Адама Селена" звучал "мертво", т.к. отсутствовал звуковой фон. Тогда добавили разные эффекты: легкую реверберацию, шорохи; иной раз голос секретарши сообщал, что тов. Адам говорит по другому телефону. Потом слышался звук спускаемой воды в унитазе, шаги, и голос тов. Адама: "Алло, Адам Селен слушает!" :smile3:

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#157

Сообщение tonio_k »

Моя логика: ускорение воспроизведения оригинальной записи должна быть без искажений. Это линейная задача без ответвлений. На выходе должно получится оригинал, но ускоренный. Всё остальное это уже побочный поиск "чего то нового". :nasyalnika:
Теперь о "фломастерах": :jokingly:
Ревербация сначала мною воспринималась как искажение от очень дёшевых наушников. Но это от того, что прямо под рукой есть оригинал.
Это как переход олдскульников от Николая Елановича к Максиму Ивонычу. Надо полчаса - час непрерывной прослушки текста в новом режиме. Только после этого становится понятно, нравится ли вам эта обнова или нет. И уже к Николаю не захочется вернуться. Потому что при попытке "обратной" привязки от Максима к Николаю скорее всего всего "возврат" уже не получится. :wink:
К стати, игра с ревербацией может оказаться неплохим обезбаливающим для ушей тем, кто желает от Николая отдохнуть.


Отправлено спустя 1 минуту 49 секунд:
А вот на счёт программы MP3 speed по скорости она работает намного быстрее Sox

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#158

Сообщение flegont »

К стати, игра с ревербацией может оказаться неплохим обезбаливающим для ушей тем, кто желает от Николая отдохнуть.
:thumbs_up:
MP3 speed по скорости она работает намного быстрее Sox
Ну, Sox - такой комбайн с таким множеством функций, что быстро ездить не может :big_smile:

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#159

Сообщение tonio_k »

flegont писал(а):
25 ноя 2018 14:18
Sox - такой комбайн быстро ездить не может
а что если в sox скорость менять напрямую? Может это даст небольшой прирост в скорости самой обработки:thinking:
В Демагоге в настройках аудио сохранять аудио в формате WAV, а в Sox сразу конвертировать WAV в ускоренный mp3?

Аватара пользователя
balaamster
Обыватель

Скрипты для Demagog

#160

Сообщение balaamster »

tonio_k писал(а):
25 ноя 2018 15:09
В Демагоге в настройках аудио сохранять аудио в формате WAV, а в Sox сразу конвертировать WAV в ускоренный mp3?
Я ранее писал, что добавление sox в настройки внешнего кодировщика должно работать.
Проверил, из скрипта выводится нормально, например через WAudio(1,"C:\\temp\\",false).
► Показать
То есть без перекодировок, сразу в нужный формат.
Ещё из параметров SoX, помимо reverb 20 40 40, можно убрать pitch -50, это я для более гибкого понижения тона использовал.


Отправлено спустя 26 минут 46 секунд:
Попробовал с генерацией временных bat, как предложил flegont - тоже работает.
► Показать

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#161

Сообщение tonio_k »

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')

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#162

Сообщение flegont »

Такой возможности нет. Я с самого начала исходил из того, что "конвертер пользователя" либо находится прямо в рабочей папке Демагога (как и 4 штатных: lame, ogg и т.п.); либо указывается полное имя конвертера. В последем случае конвертер может находиться где угодно на компьютере пользователя.

Аватара пользователя
balaamster
Обыватель

Скрипты для Demagog

#163

Сообщение balaamster »

tonio_k писал(а):
25 ноя 2018 16:55
что бы эта папка могла стать частью моей сборки "portabl"
Придумал такой трюк.
Создаём скрипт "ConfigureEncoder.lua":
► Показать
Остаётся только заново запустить ConfigureEncoder.lua и открыть Demagog после его автоматического закрытия.
Что интересно, os.exit() не даёт Demagog'у сохранить свой конфиг, поверх изменённого.
О оригинальный конфиг сохраняется в виде $.cfg_bkp, на всякий случай

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#164

Сообщение tonio_k »

В любом случае предполагается "отдельный" запуск отдельно созданного скрипта использовать. Думаю универсальнее будет один раз настроить в самом Демагоге выходной аудио формат wav.
А Для реализации идеи с "portabl" добавлять в скрипты строки с генерацией консольных команд в temp.bat, для создания которых во всю можно будет применять функцию HomeFolder('sox')
Здесь можно прописать применение и lame.exe или другие консольные скачанные на свой вкус конверторы

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#165

Сообщение flegont »

Хм... А ведь подобным "конфигурационным" скриптом можно любые желаемые настройки в $.cfg править. Какое-нибудь большое меню - выбрать, что именно править... потом подменю правки той или иной настройки, окошки ввода новых значений параметров и т.д. и т.п.
Получится скрипт по управлению настройками. Интересно :hug:


Отправлено спустя 11 минут 6 секунд:
P.S. os.exit() - сразу прекращается выполнение программы-хозяина. Например:
Лимонадный Джо каждый день приходил в салун, говорил собравшимся: "Всем привет!" и бармену: "Стаканчик виски!" Выпивал, занюхивал рукавом, говорил: "Заплачу завтра" и уходил, гордо звякая шпорами.
И вот, однажды он вошел, сказал "Всем привет...", тут же был схвачен за шиворот и вышвырнут из салуна. Виски осталось в бутылке в целости и сохранности. Точно так же и Демагог не успевает затереть $.cfg, будучи вовремя выпровожен за дверь :big_smile:

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#166

Сообщение tonio_k »

balaamster, лень взяла свое. :yawn:
Решил ваш скрипт, вносящий изменения в $.cfg - взять на вооружение.
создал !!!_ЗАПУСТИТЬ ОДИН РАЗ ПРИ ПЕРВОМ ЗАПУСКЕ ДЕМАГОГа.lua и поместил туда ваш код.
в нем добавил строки перед os.exit():

Код: Выделить всё

local home = HomeFolder('_Tests_')
os.remove(home..'\\!!!_ЗАПУСТИТЬ ОДИН РАЗ ПРИ ПЕРВОМ ЗАПУСКЕ ДЕМАГОГа.lua')
ShowMessage('Первый запуск - готово! Перезапустите Демагог')
os.exit()
Получился скрипт, который после отработки самоуничтожается.

Аватара пользователя
balaamster
Обыватель

Скрипты для Demagog

#167

Сообщение balaamster »

Благодаря напоминанию:
Lecron писал(а):
25 ноя 2018 15:24
Еще, ускорение умеет делать комбайн ffmpeg.
с портативной версией всё становится гораздо проще:
Копируем 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) идёт одним экзешником, то не потребуется править конфиг.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#168

Сообщение tonio_k »

:thank_you: потестю. Есть предположение что скорость обработки будет быстрее


Отправлено спустя 13 часов 48 минут 15 секунд:
balaamster, Все работает отлично! :howdoyoudo: И скорость хорошая.
Единственный минус - это размер в 45Мб - тяжеленький для консольной утилиты :training1:

Вопрос. В lame -b64 -f (-f это низкое качество) А как в ffmpeg сделать низкое качество?
Вроде -q за это отвечает причем 1 - высшее качество. Но вот шкалу вариации качества не нашел. Может там только два значения? 1 или 0?

Аватара пользователя
balaamster
Обыватель

Скрипты для Demagog

#169

Сообщение balaamster »

tonio_k писал(а):
26 ноя 2018 11:34
Единственный минус - это размер в 45Мб
Ну да, такой размер - расплата за поддержку очень большого набора аудио- и видеокодеков,
фильтров и контейнеров.
tonio_k писал(а):
26 ноя 2018 11:34
Вроде -q за это отвечает
Да, -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

#170

Сообщение tonio_k »

flegont писал(а):
27 ноя 2018 09:51
"Все подходящие" выводятся в окно Статистики в алфавитном порядке, с игнорирование дубликатов.
А скриптом можно как то мою проблему решить?

Дело в том, что "вывести всё" - это единственный известный мне способ работы со словарями rex или dic по "фильтру". А если результат будет отсортирован без сохранения последовательности как в оригинале, то может быть нарушен порядок их срабатывания ( для rex).

Вот и хотелось бы решить эту задачу хотя бы через скрипт. Схему работы со словарями представляю примерно по такой схеме:
Вывод всех целых строк с сохранением последовательности строк как в оригинале с пользовательскими условиями выборки:
1)Слово / Часть слова (С учётом регистра / без учёта регистра) находящегося в левой части правила
2)Слово / Часть слова (С учётом регистра / без учёта регистра) находящегося в правой части правила
3) с возможностью дополнительно активировать режим: поиск по пунктам 1 и 2 с заменой найденных строк в оригинале на "пусто", но при этом (на всякий случай) полученный результат поиска дополнительно сохранить во временном текстовом файле - пусть перезаписывается каждый раз после команды "найти".

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#171

Сообщение flegont »

Если текст не содержит символов Юникода (например, транскрипцию IPA), то средствами Lua можно (в принципе) делать с текстом что угодно. В Lua есть свой собственный язык "регулярных выражений" - простенький, но позволяет формулировать запросы поиска. Например: %a+ найти слово целиком. И т.д. и т.п.
Трудность будет представлять только один нюанс. Lua - язык регистро-чувствительный, и в нем нет функций, позволяющих искать в тексте без учета регистра. Известен трюк для обхода этого ограничения, но, насколько он будет затормаживать процесс поиска - сведений не имею.
Более содержательный ответ даст только эксперимент.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#172

Сообщение tonio_k »

А насколько критично в поиск/замена добавь возможность отключить /включить сортировку? Что бы выводило"как есть"?


Отправлено спустя 6 минут 47 секунд:
Или вообще сортировку отключить по умолчанию. Ведь по идее, результат всегда можно и самостоятельно отсортировать правая клавиша-сортировка строк-без дубликатов. Зато не будет "потерян" нужный промежуточный результат в оригинальной последовательности.

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#173

Сообщение flegont »

Зато не будет "потерян" нужный промежуточный результат в оригинальной последовательности.
На заре создания опции "Найти/Заменить" я однажды в большом тестовом примере вывел "Все подходящие" для ключа поиска "все". Дубликаты тогда не отсеивались и я получил много-много тысяч строк вида:
все
все
все
все
все
...
все

И что? Это как-то помогло мне определить место каждого этого/того же самого слова в оригинальном тексте? :big_smile:
Во избежание подобных огромных и практически бессодержательных отчетов о "всех подходящих", было сделано так, как сделано. Алфавитный порядок без дубликатов.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#174

Сообщение tonio_k »

В принципе Notepad++ может искать по шаблону REX и выводить результат в последовательности как в оригинале. Пока в нём поработаю.

Что касается скрипта, надо будет придумать как превратить поисковую строку REX

Код: Выделить всё

^[^=]*=[^=]*искомое_слово[^=]*$
@^[^=]*=[^=]*искомое_слово[^=]*$
в аналогичную и понятную для Lua


Отправлено спустя 2 часа 1 минуту :
flegont, вспомнил, что в стандартной комплектации Демагог есть скрипт Fragments with given words.lua очень похоже, что StrMatch(string.lower(w[j]),fnd) как раз и находит строку без учета регистра (при условии, что в строку поиска я ввожу слово в нижнем регистре). Но мозгов у меня не хватит подсунуть маску для поиска ^[^=]*=[^=]*fnd[^=]*$ подскажите как это сделать. :boy_blushed:


Отправлено спустя 2 минуты 53 секунды:
И добавить строчку в скрипт по замене найденной строки на ""

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#175

Сообщение flegont »

Кажется, мы ведем наступление в одном направлении и танковые клинья вот-вот возьмут противника в клещи :big_smile:
StrMatch() в данном случае не подойдет, т.к. она использует обычный, примитивный поиск по маске со * или без нее. Но в составе Демагога есть функция PosR() - поиск в строке по регулярному выражению.
Я попробую импортировать ее в интерпретатор. Чтобы ею можно было пользоваться прямо из скрипта.Теоретически - всё должно работать. При условии, что в маске поиска - регулярном выражении, и в исследуемой строке нет символов Юникода.

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#176

Сообщение flegont »

Версия 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 - не поддерживаются.

Примеры использования
► Показать

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#177

Сообщение tonio_k »

Пример использования RexMatch(s, mask, pos) .
Всё то же самое, но с окном ввода и сохранением последнего поискового запроса (вытащил из Fragments with given words.lua)
► Показать
Единственная просьба, подскажите, как можно сделать так, что бы все найденные фрагменты в оригинале - удалялись?


Отправлено спустя 12 минут 12 секунд:
к стати, такой вариант запроса скорее всего будет более правильный:

Код: Выделить всё

r = [[@^.*=.*вОрон\b.*$]]



Отправлено спустя 6 минут 6 секунд:
P.S. в "диалоговое окно" регулярное выражение надо вводить без окаймляющих [[ ]]


Отправлено спустя 9 минут 20 секунд:
И опять возникла "потребность" в возможности назначения горячей клавиши для скрипта. Пусть эта горячая клавиша запускает скрипт с уникальным именем (и желательно вне общего списка скриптов) - его содержимое пользователь сам меняет под свои нужды.

Пока работал с поиском RexMatch(s, mask, pos) . - Пару раз щелкнул не по тому скрипту и понеслась... :sleigh:

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#178

Сообщение flegont »

чтобы все найденные фрагменты в оригинале - удалялись
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)  -- обновляем исходный текст
Вроде, работает :wink:
горячей клавиши для скрипта
Т.с. "динамической" горячей клавиши. Назначил, переназначил, отменил...
Что-нибудь придумаю.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#179

Сообщение tonio_k »

flegont писал(а):
28 ноя 2018 15:13
z = k + #fnd
s = string.sub(s,1,k-1)..string.sub(s,z+1,#s)
не удаляет :dont_know: может потому что k не меняется?

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#180

Сообщение flegont »

k меняется при каждом обороте цикла. Пример выше у меня сработал.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#181

Сообщение tonio_k »

:lardhead: понял :sarcastic: . Я то думал это пример 2 в 1 (и находит и удаляет).
Скопировал - вставил и жду когда "хорошо" наступит :smoke: .
А это, оказывается, пример только удаления по шаблону.
Удаление - все работает! :thank:


Отправлено спустя 2 часа 20 минут 42 секунды:
Допустим, после отработки скрипта вместо удаленных ячеек у меня вставляются строки:
#_вырезано
#_вырезано
Вопрос, как можно через скрипт найти любую из них, что бы курсор переместится на найденную строку и соответственно отображение экрана сместилось к этой строке?

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#182

Сообщение flegont »

Можно один и тот же каменный топор использовать для всех хозяйственных нужд :smile1:

Код: Выделить всё

-- найти и выделить в тексте в окне 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)
А насчет прокрутки экрана к найденному - надо как-то в следующей версии функцию WSel() модернизировать.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#183

Сообщение tonio_k »

flegont писал(а):
28 ноя 2018 20:13
WSel() модернизировать.
такими темпами Демагог по программным кирпичикам разберём. "Демагог конструктор" - собери свою модель. :smile3:

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#184

Сообщение flegont »

Да, у Демагога модульная структура. Он, действительно, чем-то похож на конструктор :big_smile:

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#185

Сообщение flegont »

функцию WSel() модернизировать.
Проверил. Ничего не надо, нормально работает, автоматом переводит экран к найденному.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#186

Сообщение tonio_k »

flegont писал(а):
28 ноя 2018 15:13
fnd, k = RexMatch(s,r,k)
скажите, а есть возможность его применения в виде замены с захватами типа:
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

#187

Сообщение flegont »

В следующей версии попробую сделать.
Демагоговский модуль function PosR(...), который я импортировал в Lua под именем RexMatch, имеет дополнительный параметр: строку - шаблон замены, с обработкой захватов. Просто я этот параметр имортиртировать не стал, решил, что это уже лишнее.
Непродуманное было решение, однако :suspect:

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#188

Сообщение tonio_k »

скрипт работает, но если в окне, к которому хотим применить этот скрипт выделить текст, то происходит странное - в окне остается только выделенный текст, а в окне статистики пусто

Код: Выделить всё

-- печать всех строк текста из окна 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

#189

Сообщение flegont »

Я точно не помню, надо глянуть в программе: как работает WText(). Возможно, там остался "артефакт" - возврат строки, равной не всему тексту, а только выделенному фрагменту (если таковой имелся). Это - нехорошо. Буду разбираться.

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#190

Сообщение flegont »

замены с захватами
Это должны быть 2 новые функции:

RexRepl(s, p, q) - замены в строке s, где p - регулярное выражение для поиска, возможно, с захватами; q - РВ для замены. p, q можно считать левой и правой частью некоторого правила из rex-словаря

DicRepl(s, p, q) - аналогично, p и q - понимаются, как левая и правая части некоторого dic-правила

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#191

Сообщение tonio_k »

RexRepl(s, p, q) навело на мысль о создании скрипта - диалогового окна для тестирования правил регулярного выражения. Внешний вид -Три текстовых окна:
1) для регулярного выражения
2) входящий текст
3) результат работы регулярного выражения
Главное - что бы можно было выбрать размер шрифта для текста или сразу сделать его по крупнее.


Отправлено спустя 35 минут 58 секунд:
Хм.... Или попробовать сделать скрипт под одно окно Демагога. Который будет работать с текстовым файлом в виде:

Код: Выделить всё

Сюда вводим правило rex
#--------------------------------------
Текст
#--------------------------------------
Результат

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#192

Сообщение flegont »

1) Кнопка "T" в панели инструментов - настройка вида и размера шрифта.
А колесико мыши при одновременно нажатой левой клавише - масштаб. Его величина в % показывается в Строке состояния. В разных окнах можно задавать прокруткой колесика разный масштаб. Выбранные масштабы действуют в течение сеанса. При закрытии Демагога сбрасываются на 100% по умолчанию.

2) И так можно. Или, с каким-то словом-разделителем:
Правило rex +debug+ Текст
После выполнения скрипта текст приобретает вид, как на примере выше. Вверху правило, внизу текст, за ним результат
Или "операционные скобки" <<<правило>>>текст<<<end>>> обрамляющие любые фрагменты книги, которые надо протестировать. Причем с разными правилами. А результат в Статистику.
Вариантов масса.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#193

Сообщение tonio_k »

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

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#194

Сообщение flegont »

Ну, для этого давно есть опция Ctrl+T - Показать применение правил.
В одном окне открыт словарь, он отмечен в Панели словарей.
Меняю правило, сохраняю изменение.
В окне, где текст, выделяю исследуемый фрагмент.
Ctrl+T
Появляется окно просмотра.
Результат в верхней его половине, примененное правило в нижней.

Аватара пользователя
balaamster
Обыватель

Скрипты для Demagog

#195

Сообщение balaamster »

Попробовал написать конвертер, который будет добавлять фон, устанавливать начало затухания фона, в зависимости от длительности речевого файла.
В тестовом варианте входные/выходные форматы mp3,wav,ogg.
Добавление фона отключается в диалоговом окне.
Есть выбор входного и выходного каталогов.
conv.zip
(69.96 КБ) 226 скачиваний
Архив необходимо распаковать в папку с Demagog. В папку fon скопировать mp3-файлы с фоновым звуком. ffmpeg должен лежать также в папке с Demagog.

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#196

Сообщение tonio_k »

balaamster, сначала создаем как обычно книгу в mp3,wav,ogg со своими настройками в изменении скорости воспроизведения (-af atempo=1.1)
Потом запускаем Ваш скрипт, который запускает converter.exe задает вопросы и начинает конвертировать по второму кругу.
Я правильно понял?


Отправлено спустя 4 минуты 12 секунд:
тогда "до кучи" может и (-af atempo=1.1) в скрипт добавить? :wink:


Отправлено спустя 11 минут 45 секунд:
Интересно, а можно как то "присобачить" mp3info.exe как Custom Encoder Напрямую в настройки к Демагогу может он какие то ini файлы поддерживает?


Отправлено спустя 10 часов 10 минут 13 секунд:
flegont писал(а):
30 ноя 2018 23:11
В одном окне открыт словарь, он отмечен в Панели словарей.
flegont, именно это для меня самое большое неудобство. Постоянно висит словарь среди основных. Можно про него забыть и он может сработать с основными словарями, а потом ищи где и почему не так работает :no: .

Вот готовый вариант скрипта по тестированию правил по шаблону REX.
.ТЕСТ REX ПРАВИЛА.zip
(1010 байт) 246 скачиваний
Самому понравилось как он работает :boast:

Плюсы: можно вводить сразу несколько строк правил rex - что бы увидеть как они в совокупности отрабатывают.
Минусы: - в обрабатываемом тексте не должен присутствовать знак равенства (=).
Знак равенства для скрипта является критерием отличия правила REX от обрабатываемого текста. Зато нет необходимости в разделителях между правилами REX и обычным текстом. Правило REX можно вводить как перед так и после обрабатываемого текста.

Если в всплывающем окне сравниваемые тексты не вмещаются, то их копия находится в окне статистики

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#197

Сообщение flegont »

Скромненько, но со вкусом :up: Всё работает как надо. А в новой версии, которую я сейчас тестирую, достаточно, введя правило и текст, нажать Shift+F2 для получения ответа.
(Shift+F2 - хоткей для прикрепления к нему какого-нибудь, часто используемого скрипта. Вот я и проверил, прикрепив .ТЕСТ REX ПРАВИЛА.lua :wink: )

Аватара пользователя
tonio_k
V.I.P.

Скрипты для Demagog

#198

Сообщение tonio_k »

flegont писал(а):
01 дек 2018 12:50
Shift+F2
получается "быстрый запуск скрипта" назначается только для одного любого скрипта? Или, например, Shift+F3 для ещё одного и так далее для нескольких скриптов?

Аватара пользователя
flegont
V.I.P.

Скрипты для Demagog

#199

Сообщение flegont »

Пока тестовый вариант прикрепления только для одного скрипта. Но хочется чего-нибудь вроде:
Базовый хоткей+0
Базовый хоткей+1
...
Базовый хоткей+9
Так сказать, чтобы можно было назначить TOP-10 самых нужных скриптов. Этого - более чем достаточно.
Что выбрать для базового хоткея - еще надо подумать. Практически все комбинации уже задействованы в тех или иных пунктах меню. Ну а F2 изначально использовалась для запуска скрипта из окна, может, из нее и надо что-то строить...


Отправлено спустя 1 час 31 минуту 6 секунд:
P.S. Прикинул, TOP-5 дефолтных скриптов будет достаточно, имхо

Аватара пользователя
balaamster
Обыватель

Скрипты для Demagog

#200

Сообщение balaamster »

tonio_k писал(а):
01 дек 2018 12:22
сначала создаем как обычно книгу в mp3,wav,ogg со своими настройками в изменении скорости
Сразу не описал порядок действий, в голове то у меня картина есть, а то что надо описать как оно работает - забыл
► Показать
Дополнил скрипт выбором темпа речи.
Заменил mp3info на более тяжеловесный MediaInfo, который может получить длительность не только mp3, но и других форматов.
conv.zip
(4.68 МБ) 249 скачиваний
tonio_k писал(а):
01 дек 2018 12:22
Интересно, а можно как то "присобачить" mp3info.exe как Custom Encoder
Теоретически можно.
В CustomEncoder прописать bat-файл, который будет получать имена входного и выходного файла, а вся сценарная логика обработки будет прописана в bat. Это максимально неудобный вариант. Работа со строками в bat реализована отвратительно, по сравнению с другими скриптовыми языками. Да и много других неудобств будет при реализации скрипта.

В CustomEncoder прописать bat-файл, который будет получать имена входного и выходного файла.
Папку Demagog дополнить интерпретатором lua.exe и из bat вызывать lua-скрипт.
Возможно, попробую реализовать какой-нибудь вариант. При наличии свободного времени.


Отправлено спустя 1 день 2 часа 53 минуты 19 секунд:
tonio_k писал(а):
01 дек 2018 12:22
Интересно, а можно как то "присобачить" mp3info.exe как Custom Encoder Напрямую в настройки к Демагогу может он какие то ini файлы поддерживает?
Сделал интеграцию Mediainfo и FFmpeg через bat-сценарий.
Теперь всё как обычно:
распаковываем conv.bat в папку с Demagog. (Mediainfo.exe и FFmpeg.exe должны также лежать там)
прописываем полный путь к conv.bat (просто conv.bat у меня не работает)
в строку параметров конвертера: %1 %2 64 1.0
порядок параметров получается такой: путь_входного_файла путь_выходного_файла битрейт темп
формат прописываем mp3 или ogg

Открываем текст, ctrl+m и погнали :smile1:
conv.zip
(1.69 КБ) 235 скачиваний

Ответить

Вернуться в «Demagog»