Russian Qt Forum
Март 29, 2024, 08:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 110 111 [112] 113 114 ... 122
1666  Qt / Вопросы новичков / Re: Проблема с компиляцией (FMOD + minGW + Windows) : Октябрь 30, 2012, 13:12
Спасибо за объяснение, я это запомню Улыбающийся
1667  Qt / Вопросы новичков / Re: Проблема с компиляцией (FMOD + minGW + Windows) : Октябрь 29, 2012, 22:16
Но мы все таки тыкаем компилятор в либу libfmodex.а?
просто (хз почему) нужно убирать lib символы в названии библиотек, получается так?
1668  Qt / Вопросы новичков / Re: Проблема с компиляцией (FMOD + minGW + Windows) : Октябрь 29, 2012, 21:12
Спасибо, xokc, собралось Улыбающийся

а почему именно fmodex, а не libfmodex? Непонимающий
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, так что у меня есть выбор, а это
уже не мало Улыбающийся
1671  Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech) : Октябрь 26, 2012, 09:54
эмммм...я вроде не писал, о помощи в сборке dll Улыбающийся
Кроме того, в составе Qt Creator'a, на котором пишу, видел утилиты make (я не про qmake Улыбающийся),
если нужно скачаю такую Улыбающийся
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 будет вызываться при смене раскладки Улыбающийся
1673  Qt / Общие вопросы / Re: Не работает поиск по справке в qt creator : Октябрь 26, 2012, 02:25
Может переустановить (или пересобрать) Qt Creator?
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\) - опять не работается, и только делая установку, удавалось запускать Грустный

1677  Qt / Общие вопросы / Re: Синтезаторы речи (Text-to-speech) : Октябрь 23, 2012, 20:18
Bepec, у вас на русском талдычит? Улыбающийся
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 будет скрыта от пользователя, то он может и не заметит хитрость Улыбающийся

Как думаете, этот вариант лучше? Улыбающийся
Страниц: 1 ... 110 111 [112] 113 114 ... 122

Страница сгенерирована за 0.101 секунд. Запросов: 23.