|
|
Автор | Сообщение | Консольное приложение |
---|
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 26.02.13 19:42 |  |
| Пользователи давно просили меня создать вариант "Балаболки" в виде консольного приложения, работающего в режиме командной строки. Сейчас я нашел время для реализации этого проекта. Утилита будет получать текст (либо из обычных текстовых файлов с расширением *.TXT, либо из буфера обмена, либо непосредственно в командной строке), применять правила из словарей коррекции произношения, а затем будет читать текст вслух или записывать звуковой файл формата WAV.
---
Уже есть хорошая утилита "Govorilka CP", поддерживающая голоса SAPI 4/SAPI 5; жаль, что она не работает с Юникодом, поэтому нельзя использовать ее для озвучивания текстов на иностранных языках. Бесплатный программный продукт "eSpeak" имеет в своем составе утилиту командной строки, так что можно использовать и его как консольное приложение (но качество бесплатных голосов eSpeak пока очень далеко от совершенства, увы).
Мне также встречались и другие утилиты для чтения вслух, работающие в режиме командной строки. Поэтому не претендую на то, чтобы создать что-то абсолютно новое в этом классе; это просто еще одна консольная программа, где реализована работа с компьютерными голосами.
Со временем напишу еще одно консольное приложение - для извлечения текста из файлов различных форматов, разбиения извлеченного текста на части и сохранения на диске в виде текстовых файлов.
---
Консольное приложение не имеет графического интерфейса и выполняется в текстовом режиме. Режим работы программы может быть задан при помощи параметров командной строки или файла конфигурации. Консольное приложение представляет собой упрощенный вариант программы "Балаболка" и может быть использовано в других программных приложениях для автоматизации задач, связанных с синтезом речи.
Командная строка
Программа может быть настроена с помощью параметров командной строки. Они отделяются от указания пути пробелом и начинаются с символа "-" (дефис). Полный список параметров командной строки можно получить, введя команду balabolka_console.exe с параметрами -? или -h.
-l Показать список голосов, установленных на компьютере.
-f имя_файла Открыть текстовый файл.
-w имя_файла Записать звуковой файл в формате WAV. Если параметр задан, звуковой файл будет создан. Если параметр не задан, текст будет прочитан вслух.
-n имя_голоса Имя голоса (достаточно указать часть имени). Если параметр не задан, будет использоваться голос, выбранный в панели управления Windows.
-c Использовать текст из буфера обмена.
-i Использовать текст из стандартного потока ввода (STDIN).
-t строка_текста Использовать текст из командной строки.
-s число SAPI 4: установить скорость речи в диапазоне от 0 до 100 (значение по умолчанию отсутствует). SAPI 5 и Microsoft Speech Platform: установить скорость речи в диапазоне от -10 до 10 (по умолчанию значение равно 0).
-p число SAPI 4: установить тембр речи в диапазоне от 0 до 100 (значение по умолчанию отсутствует). SAPI 5 и Microsoft Speech Platform: установить тембр речи в диапазоне от -10 до 10 (по умолчанию значение равно 0).
-v число SAPI 4: параметр не используется. SAPI 5 и Microsoft Speech Platform: установить громкость в диапазоне от 0 до 100 (по умолчанию значение равно 100).
-e число Установить длину пауз между предложениями (в миллисекундах). По умолчанию значение равно 0.
-a число Установить длину пауз между абзацами (в миллисекундах). По умолчанию значение равно 0.
-d имя_файла Использовать словарь для коррекции произношения (файл с расширением *.REX или *.DIC). Командная строка может содержать несколько параметров -d.
-? или -h Показать описание параметров командной строки.
Примеры команд запуска консольного приложения:
balabolka_console.exe -l
balabolka_console.exe -f "d:\Text\book.txt" -w "d:\Sound\book.wav" -n "Emma"
balabolka_console.exe -n "Olga" -c -d "d:\rex\rules.rex" -d "d:\dic\rules.dic"
balabolka_console.exe -n "Alyona" -t "Текст будет прочитан медленно." -s -5 -v 70
Файл конфигурации
Параметры можно сохранить как файл конфигурации balabolka_console.cfg в той же папке, что и консольное приложение. Пример содержимого файла:
- Код:
-f d:\Text\book.txt -w d:\Sound\book.wav -n Microsoft Anna -s 2 -p -1 -v 95 -e 300 -d d:\rex\rules.rex -d d:\dic\rules.dic Программа может комбинировать параметры из файла конфигурации и командной строки.
Веб-страница: http://www.cross-plus-a.ru/bconsole.html |
|
|
 | |
Lecron Посетитель
Сообщений : 28
Репутация : 17
 | 27.02.13 10:22 |  |
| Что-то мне по ссылке "загрузить консольное приложение", прилетает файл 7.5Мб с обычной portable Балаболкой. А где консольная версия на 295Кб?
Сразу замечание. Нужен вывод аудио в STDOUT.
PS. Замечание по скачаному файлу полной Балаболки. Почему так раздулся экзешник? с 2 мегабайт в 2.6.0.536 до 6.5 в последней. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 03.04.13 13:24 |  |
| После переписки с посетителем форума Lecron в соседней "ветке" я сделал вывод, что нужно дать пояснения касательно работы консольного приложения со стандартным потоком вывода (STDOUT). Дело в том, что хотя такая опция и присутствует в программе, я не рекомендую ее использовать для записи больших по размеру текстов.
Увы, но мне так и не удалось найти решение всех проблем, связанных с записью аудиоданных в STDOUT. Главная из оставшихся проблем - это то, что записываемые в поток данные должны содержать заголовок формата RIFF, а в этом заголовке должен быть указан размер данных. Это значение нельзя узнать до тех пор, пока весь текст не будет преобразован в речь; поэтому первоначально аудиоданные записываются в память, и лишь затем целиком пересылаются в стандартный поток вывода STDOUT, вместе с заголовком.
Такой метод сводит на нет все достоинства работы со стандартным потоком вывода: нет никакой разницы, будут ли данные сохранены в файле формата WAVE или накоплены в оперативной памяти компьютера - программы-перекодировщики всё равно вынуждены ждать завершения процесса преобразования текста в речь.
Но и это еще не всё: также выяснилось, что запись аудиоданных в память работает существенно медленнее, чем запись данных в файл формата WAVE. Могу предположить, что это связано с необходимостью выделять всё новые и новые "куски" памяти для новых аудиоданных.
Таким образом получается, что нет никакого выигрыша от использования стандартного потока вывода вместо записи в файл. Как уже писал в предыдущем посте, это всё стало для меня неприятным сюрпризом; пока не нашел способа решить данную проблему.
---
Как вариант, можно записывать в стандартный поток вывода аудиоданные без заголовка (это называется "RAW PCM"). Но тогда уже сам пользователь, если захочет перекодировать такие данные в звуковой файл какого-либо формата, должен будет указать программе-перекодировщику, что это именно данные без заголовка, указать количество каналов, частоту, битрейт и т.д. Например, для утилиты LAME.EXE это будут параметры из раздела справки "Input options for RAW PCM".
Так как у данных нет заголовка, то нет необходимости узнавать размер данных и, соответственно, нет необходимости ждать завершения процесса преобразования текста в речь. Можно сразу пересылать данные в поток вывода, как только голос начнет преобразовывать первое предложение.
Такой способ не кажется мне удобным для обычных пользователей, так как для преобразования аудиоданных нужно знать их параметры. То есть, нужно заранее знать, что, например, "Алена" пишет данные в режиме "моно", с частотой 22,05 кГц (16 bits per sample). Наличие заголовка у аудиоданных избавляет от подобных хлопот. |
|
|
 | |
Lecron Посетитель
Сообщений : 28
Репутация : 17
 | 03.04.13 15:33 |  |
| Возможно есть вариант. Для WAV потока, каким-то образом, может осуществляться потоковое вещание. Например в VLC. В этом случае, тоже заранее продолжительность не известна. Но вещание работает. Значит и для потокового "вещания" в STDOUT также не должно быть принципиальных запретов. Но как это сделано, я не знаю. А что будет, если в заголовке указать все параметры потока, кроме продолжительности? |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 03.04.13 16:21 |  |
| У меня нет информации, как именно осуществляется потоковое вещание в WAV.
- Lecron пишет:
- А что будет, если в заголовке указать все параметры потока, кроме продолжительности?
Какое-то значение все равно надо указать, там ведь не может быть пустота. Пробовал разные значения, от 0 до максимального целого, всё это приводит к тому, что кодеки создают звуковые файлы, в которых нет аудиоданных.
Сейчас я склоняюсь к мысли разрешить, всё-таки, сохранение аудиоданных в виде RAW PCM (т.е. без заголовка). Тогда можно будет запускать lame.exe, например, с такой командной строкой:
- Код:
lame.exe -r -s 22.05 -m m -b 128 - test.mp3 (данные из стандартного потока ввода, без заголовка, с частотой 22,05 кГц, моно)
Буду думать еще на эту тему. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 22.08.13 20:14 |  |
| Версия 1.09 Добавлена настройка для кодировки текста из стандартного потока ввода.
--encoding кодировка Кодировка текста из стандартного потока ввода ("ansi", "utf8" или "unicode"). По умолчанию значение равно "ansi". |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 03.01.14 12:00 |  |
| Версия 1.15 Небольшие улучшения. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 19.01.14 15:19 |  |
| Версия 1.16 Добавлен параметр для показа иконки приложения в области уведомлений Windows.
Небольшие улучшения.
-tray Показать иконку программы в области уведомлений операционной системы. Это позволит пользователю следить за прогрессом выполнения операции, а также прервать процесс при помощи пункта контекстного меню "Стоп". |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 26.01.14 18:50 |  |
| Версия 1.17 Исправлены мелкие ошибки. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 30.08.14 22:36 |  |
| Версия 1.20 Небольшие улучшения. |
|
|
 | |
Lecron Посетитель
Сообщений : 28
Репутация : 17
 | 09.09.14 13:21 |  |
| Нельзя ли ускорить инициализацию приложения при старте? На запуск уходит 5-6 секунд, даже с SSD и RAM дисков. При обработке 128кБ текстовых ANSI файлов, время увеличивается с 4:30 минут для 4 файлов, до 10:30 минут для 50 файлов, или на 133%. GUI версия дает лишь 25% увеличение времени. А средняя книга при разбиении на фрагменты, в соответствии с логической структурой, дает в среднем 120-150 файлов (от 50 до 350). |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 10.09.14 10:48 |  |
| Lecron Ускорить не получится, там и так выполняется лишь необходимый минимум операций по получению списка голосов, установленных в системе, и инициализации выбранного голоса. Убирать просто-напросто нечего.
Не сталкивался с описанной Вами проблемой. Если и происходит какая-то задержка в полсекунды, то только при первом обращении к какому-то определенному голосу; можно предположить, что голос выполняет свои собственные действия при инициализации (например, проверяет лицензию). При втором и последующем обращениях к голосу задержек нет вообще. Проверял на разных машинах, с разными наборами голосов и различными версиями Windows.
Ищите корень проблемы в своем компьютере. Проверьте, что из программного обеспечения запущено в данный момент и не может ли это повлиять на запуск консольных приложений. Антивирус, файрвол, контроль учетных записей Windows и т.д. Может быть, какое-то приложение пытается подключиться куда-либо; проверить надо все возможности. У меня сейчас нет предположений, с чем связана такая большая задержка. |
|
|
 | |
Lecron Посетитель
Сообщений : 28
Репутация : 17
 | 10.09.14 12:23 |  |
| Проблема действительно оказалась на моей стороне. Виноват Outpost Security suite. Извиняюсь что хотел сделать вас крайним, просто такого ни с одной другой программой не случалось, все стартуют меньше чем за секунду, вот и... После его отключения, время обработки лишь на 6 секунд превысило результат GUI версии, что находится в пределах погрешности измерений. Осталось разобраться Кто виноват и Что теперь делать. Спасибо за ответ.
|
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
kingdog Наблюдатель
Сообщений : 3
Репутация : 0
 | 06.03.15 23:07 |  |
| Здравствуйте, пользуюсь консольным приложением уже больше года, очень удобно. Хочу предложить добавить возможность чтения строки под определенным номером из текстового файла. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 07.03.15 14:19 |  |
| kingdog Спасибо за идею, добавлю такой параметр командной строки в следующей версии утилиты. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
kingdog Наблюдатель
Сообщений : 3
Репутация : 0
 | 14.03.15 23:46 |  |
| Дааа! Спасибо огромное за возможность выбора строки для чтения из файлов!! А то какие хитрости только ни применял, и различные скрипты, строронние программы... В общем спасибо! Еще хотелось бы видеть возможность выставления уровня громкости прочтения для удобства. |
|
|
 | |
kingdog Наблюдатель
Сообщений : 3
Репутация : 0
 | 14.03.15 23:58 |  |
| И еще бы чтение не только определенной строки, но и определенных символов/слов в ней, заранее спасибо! |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 07.06.15 19:41 |  |
| Версия 1.23 Обновлено применение правил из словарей формата REX. |
|
|
 | |
Felix Наблюдатель
Сообщений : 3
Репутация : 0
 | 25.06.15 19:11 |  |
| Спасибо за консольную версию. А можно ли попросить добавить паузу, часто нужно?
И еще у меня быстрая скорость кажется не регулируется(голос Elan Nikolai Digalo SAPI 4), Опция -s от 0 до 70 быстрая, но постоянно одна и та же, после 70 замедленная, с медленной все в порядке - она изменяется. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 26.06.15 1:08 |  |
| Felix Пожалуйста. Среди параметров командной строки есть паузы между предложениями и паузы между абзацами. Других пауз добавлять не планирую. Попробуйте вставлять в текст теги SAPI 5, если нужны еще паузы.
На скорость голоса "Николай" никак повлиять нельзя, это всё на совести разработчиков голоса. |
|
|
 | |
Felix Наблюдатель
Сообщений : 3
Репутация : 0
 | 26.06.15 17:22 |  |
| balabolka Спасибо за ответ. Я имел в виду паузу в процессе чтения, чтоб потом с этого места на котором остановился можно было продолжить. Если нет, значит нет. )
|
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 26.06.15 17:48 |  |
| Felix Поставить процесс чтения на паузу возможно, если запустить программу с параметром "-tray". В этом случае в системном трее появится иконка приложения; в меню этой иконки есть пункт "Пауза". |
|
|
 | |
Felix Наблюдатель
Сообщений : 3
Репутация : 0
 | 26.06.15 19:47 |  |
| balabolka Спасибо). |
|
|
 | |
Lecron Посетитель
Сообщений : 28
Репутация : 17
 | 29.06.15 16:58 |  |
| balabolka, случайно нет расхождения по скорости между GUI и CLI версией? Именно в рамках задания параметров по умолчанию? Заметил, что фрагмент аудио от CLI версии немного короче. Когда в ней поставил скорость голоса (Loquendo Olga) на "-1", продолжительность совпала с GUI версией идеально.
Версии CLI - 1.23 (последняя), GUI - 2.7.0.545 portable (устаревшая) |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 30.06.15 4:00 |  |
| Lecron Действительно, в консольной версии по умолчанию при выборе голоса SAPI 5 не устанавливается значение скорости речи. Это значение задается в панели управления Windows ("Преобразование текста в речь" - "Скорость голоса"); видимо, на Вашем компьютере там установлено значение "-1".
Я так и не принял окончательного решения, каким должно быть значение скорости по умолчанию в консольной версии ("0" или значение из панели управления Windows). В "Балаболке" всё по-другому - там специально скорость речи задается самой программой, чтобы "Балаболка" никак не зависела от панели управления операционной системы. |
|
|
 | |
Lecron Посетитель
Сообщений : 28
Репутация : 17
 | 30.06.15 9:21 |  |
| Действительно, была установлена системная скорость выше средней. Спасибо.
Мне кажется, более прозрачно устанавливать принудительно, без оглядки на системную. Меньше зависимостей, тем более таких скрытых, меньше недопонимания. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 05.07.15 14:16 |  |
| Версия 1.24 Исправлены мелкие ошибки. |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | 03.01.16 14:17 |  |
| Версия 1.26 Исправлены мелкие ошибки. |
|
|
 | |
Dimsok Участник
Сообщений : 55
Репутация : 1
 | 25.03.16 20:50 |  |
| Можно как-нибудь заставить её работать в содружестве с экстрактором текста? То есть для чтения их других форматов, отличных от txt? Если можно, то только путём какого-нибдь бат файла с начальным извлечением в txt файл, его последующим чтением и удалением? Мало что знаю об stdin и stdout, поэтому вопрос может показаться глупым. Их использование может позволить пропускать пункт конвертанции в txt файл, а напрямую перенаправлять извлечённый текст на балаболку? |
|
|
 | |
balabolka V.I.P.
Сообщений : 1212
Репутация : 986
 | |
 | |
Dimsok Участник
Сообщений : 55
Репутация : 1
 | 26.03.16 16:59 |  |
| - Цитата :
- Если извлекается текст на иностранном языке, то кодировка должна быть "utf8".
Ну это ведь смотря на каком иностранном. Для английского в большинстве случаев ansi хватает |
|
|
 | |
Dimsok Участник
Сообщений : 55
Репутация : 1
 | 22.04.16 15:07 |  |
| balabolka_text.exe -f file.fb2 -o | balabolka_cp.exe -i Alyona
Читает не весь файл и чтение заканчивается минуты через 3, и в трее прогресс в процентах быстро меняется.
При остановке в трее вылазит ошибка balabolka_text.exe. Если просто закрыть консольное окно, ошибки нет. При чтении из utf8 ошибка при остановке через трей нет, но русский текст в этой кодировке не читает.
В чем причина, в балаболке или экстракторе текста? |
|
|
 | |
Dimsok Участник
Сообщений : 55
Репутация : 1
 | 22.04.16 15:33 |  |
| Аудио по указанному вами примеру аналогично не сохраняется полностью из книги, только первые 5 мин |
|
|
 | |
|
Консольное приложение |
---|