1669
|
Qt / Вопросы новичков / [РЕШЕНО] Проблема с компиляцией (FMOD + minGW + Windows)
|
: Октябрь 28, 2012, 21:09
|
Здравствуйте! Работаю на Qt Creator 2.4.1 (minGW) Windows xp Решил попробовать аудибиблиотеку FMOD Скачал с официального сайта ( http://www.fmod.org/) установщик для виндовс Установил В папке api (D:\Program Files\FMOD SoundSystem\FMOD Programmers API Windows\api) мне нужны были папка inc с заголовочными, папка lib с библиотекой, и dll В папке lib было несколько библиотек, но используя документацию разработчика, нашел нужную - libfmodex.a Отрывок: If you want to use fmodex.dll: Visual Studio users - fmodex_vc.lib. Metrowerks Codewarrior users - fmodex_vc.lib. Borland users - fmodex_bc.lib. LCC-Win32 users - fmodex_lcc.lib. Dev-C++, MinGW and CygWin users - libfmodex.a.
Скопировал в папку проекта заголовочные и либу, потом пытался добавить либу, и тут у меня возникла проблема: пишет что не может найти -llibfmodex Как добавить в LIBS файла pro библиотеку формата *.а? Проект прилагается
|
|
|
1670
|
Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech)
|
: Октябрь 26, 2012, 14:45
|
xokc, спасибо за подробные пояснения В исходниках библиотеки eSpeak, есть и make-файл, и файл проекта, для виндовс - файлы *.dsp и *.dsw, так что у меня есть выбор, а это уже не мало
|
|
|
1672
|
Qt / Общие вопросы / Re: Событие смены языков ввода клавиатуры
|
: Октябрь 26, 2012, 04:52
|
Нашел нужно изменить changeEvent: void changeEvent(QEvent *event) { if(event->type() == QEvent::KeyboardLayoutChange) { qDebug() << getTheCurrentLanguageKeyboardLayouts(); }else QWidget::changeEvent(event); }
Соответственно QEvent::KeyboardLayoutChange будет вызываться при смене раскладки
|
|
|
1674
|
Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech)
|
: Октябрь 26, 2012, 02:15
|
Так собери из исходников DLL-ку и используй её через соотв. API. Документация - в файле speak_lib.h
Не умею никогда их не собирал вне IDE, да и на винде работаю, у нее вроде нету стандартной команды make
|
|
|
1675
|
Qt / Общие вопросы / [РЕШЕНО] Событие смены языков ввода клавиатуры
|
: Октябрь 26, 2012, 01:22
|
Здравствуйте! Как можно отследить, когда меняется раскладка клавиатуры, например с русского на английский, учитывая, что комбинация клавиш для этого может быть любой (мне удобнее lShift + lAlt, у кого то может быть своя)? Я это делал через changeEvent() и проверку: const int hexKeyLanguageRussian = 0x419; const int hexKeyLanguageEnglish = 0x409;
QString getTheCurrentLanguageKeyboardLayouts() { QString name; #ifdef Q_WS_WIN switch(LOWORD(GetKeyboardLayout(0))) { case hexKeyLanguageRussian: name = "Russian"; break; case hexKeyLanguageEnglish: name = "English"; break; } #endif return name; }
void changeEvent() { QString language = getTheCurrentLanguageKeyboardLayouts(); .... }
Но моя реализация не самая умная идея
|
|
|
1676
|
Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech)
|
: Октябрь 24, 2012, 14:10
|
Смог с этой консольной программой продвинуться, но пришлось сильно поизвращаться (что раздражает), потому что, если запускать ее через QProcess::start она не будет показываться, но во время выполнения будет блокировать главный поток, а если запустить через QProcess::startDetach то блокировки не будет, но ее консольное окно будет видно, сделал так: Создал второй проект, нужный только для запуска консольки espeak: #include <QtGui/QApplication> #include <QProcess>
int main(int argc, char *argv[]) { QApplication a(argc, argv);
QString pathToTTS = QApplication::applicationDirPath() + "\\" + "espeak.exe";
QString text = QString(argv[1]) + " " + QString(argv[2]) + " " + QString(argv[3]);
QProcess *processSpeak = new QProcess(); processSpeak->start(pathToTTS + " " + text, QIODevice::WriteOnly); processSpeak->waitForReadyRead();
return 0; }
этот код будет запускать ее, и будет поддерживать передачу 3 аргументов: язык (-vru, -ven, и т.д.), и флаг и значением, например: -f "Путь к файлу..." а второй проект, будет запускать первый, который называется "ServiceEspeak.exe" и запускать будет так чтобы не блокировать свой поток: void Widget::speak() { // если textedit не пуст if(!textEdit->toPlainText().isEmpty()) { QString pathToTTS = QApplication::applicationDirPath() + QDir::separator() + "ServiceEspeak.exe ";
QString text; // если есть выделенный текст if(!textEdit->textCursor().selectedText().isEmpty()) text = textInDoubleQuotes(textEdit->textCursor().selectedText()); else // иначе весь текст text = textInDoubleQuotes(textEdit->toPlainText());
QString pathToFile = QApplication::applicationDirPath() + QDir::separator() + "temp.txt";
QFile::remove(pathToFile);
QFile file(pathToFile); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&file); out.setCodec("utf-8"); out << text; file.close();
processSpeak = new QProcess(this); processSpeak->startDetached(pathToTTS + " -vru -f " + pathToFile);
processSpeak->waitForReadyRead(); processSpeak->close();
delete processSpeak; processSpeak = 0; } }
Но мне этот код жутко не нравится, потому что это говнокод не красиво получается По крайней мере, он работает, и может и по русский и по английски болтать, главное указать язык русский и тогда кирилицу он скажет на русском, а латиницу - на английском, даже если кирилица и латиница есть в одном файле, который синтезатор обрабатывает Да вот, еще заметил, что консолька espeak не хочет работать на рабочем столе (наверное из-за русских символов в пути), но если скинуть в корень дисков (хоть флешек, то все ок), да и понять бы как эту программку, переносить на другие компы, ведь ей для работы нужны несколько папок, я их кидал к ней - не получается, кидал в те же директории где они должны находиться при установке (C:\Program Files\eSpeak\) - опять не работается, и только делая установку, удавалось запускать
|
|
|
1678
|
Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech)
|
: Октябрь 23, 2012, 15:45
|
Нашел программу, которая подходит по условиям: мало весит, многоязычная, бесплатная называется eSpeak, вот ссылка на нее: http://espeak.sourceforge.net/download.htmlВ этой сборке есть консольная версия, находится в директории "command_line" Минимальный код запуска через свою программу: #include <QApplication> #include <QDebug> #include <QTextCodec> #include <QTime>
QString textInDoubleQuotes(QString text) { return QString('"' + text + '"'); }
int main(int argc, char *argv[]) { QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
QString pathToTTS = QApplication::applicationDirPath() + QDir::separator() + "espeak.exe"; QString lang; QString text; lang = " -ven "; text = textInDoubleQuotes("Current time: " + QTime::currentTime().toString("h") + " hours " + QTime::currentTime().toString("m") + " minutes " + QTime::currentTime().toString("s") + " seconds"); /* lang = " -vru "; text = textInDoubleQuotes(QObject::tr("Текущее время:") + QTime::currentTime().toString("h") + QObject::tr(" часов ") + QTime::currentTime().toString("m") + QObject::tr(" минут ") + QTime::currentTime().toString("s") + QObject::tr(" секунд")); */ QProcess proc; proc.start(pathToTTS + lang + text, QIODevice::WriteOnly);
if(!proc.waitForStarted()) { qDebug() << "Error starting process: " << proc.errorString(); return -1; }
proc.waitForReadyRead(); proc.close(); }
Для английского все работает, для русского - не совсем Цифры он прочтет на русском, а вот символы кирилицы...такое ощущение что он их код читает Может кто нибудь сталкивался с такой проблемой, или знаешь решение этой проблемы?
|
|
|
1679
|
Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech)
|
: Октябрь 23, 2012, 00:11
|
2) to Igors: Русскоязычный голосовой движок своими руками - пытался я сделать, ан нет, не всё так просто. Одних только сочетаний фонем дох... фига скажем так. Да и ещё отсутствие легкодоступной информации Я к этому не призывал. Просто copy/paste в TextEdit, там нажал в менюшке - вот и speech. Насколько я знаю уже неск лет. Наверно можно и прямо из клипборды, но и так неплохо. Конечно можно всегда сказать "мне это необходимо, такая задача" - и это не обсуждается. Но есть верная примета - если так тянет "в прибамбасы", значит основной ф-ционал слаб, вот и пытаются добавить привлекательности Приходится мучится с синтезом речи, потому что: - Основная задача программы: хранение информации в текстовом виде, для не зрячих понимание такой информации будет проблематичной
- Напоминания от программы хочется сделать удобными: захочет пользователь и в определенную дату/время по выбору будет какой то звуковой сигнал/открытие директорий/сайтов/запуск программ/воспроизведение музыки и к этому "безобразию" можно будет добавить прочтение содержимого напоминания
|
|
|
1680
|
Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech)
|
: Октябрь 22, 2012, 12:11
|
виндоусовое сапи вещь хорошая, да вот весит все таки многовато: в 5 раз больше самой моей программы, что не очень красиво Мне вот подсказали, что могло быть проще и лучше, не код пришивать, а программу-tts с собой носить Когда нужно текст озвучить запускать tts через QProcess, передавая файл или текст, который хотим услышать, да и QProcess вроде может отследить, когда "его" программа закрывается, или пытается контактировать с ос А если при этом программа-tts будет скрыта от пользователя, то он может и не заметит хитрость Как думаете, этот вариант лучше?
|
|
|
|
|