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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по взаимодействию методов классов  (Прочитано 3431 раз)
arzamas16
Гость
« : Декабрь 18, 2013, 18:30 »

Добрый вечер. Прошу вашей помощи, окончательно запутался в ООП.
Пишу приложение, управляемое голосом. Обработка голосовых команд (аудиозапись, распознавание) производится в отдельном потоке.
Алгоритм примерно такой: в отдельном потоке работает цикл (запись 2 секунды, распознавание) если распознано ключевое слово, то выходим из цикла и записываем фразу, распознаем.
Не получается это все связать.
Код:
    cmAudio = new CmAudio;

    timer = new QTimer;
    timer->setInterval(2000);
    

    connect(timer, SIGNAL(timeout()), cmAudio, SLOT(stopRecording()) );
  
    timer->start();
    cmAudio->startRecording();

Как можно по сигналу таймера остановить запись, и начать сразу же новую.
« Последнее редактирование: Декабрь 18, 2013, 18:34 от arzamas16 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Декабрь 18, 2013, 19:36 »

CmAudio наследуется от QObject или другого его потомка?
Если нет, то придется отнаследоваться, чтоб сигналами и слотами пользоваться

Или написать создание экземпляра и вызов функций CmAudio в классе, наследуемом QObject или другого его потомка Улыбающийся

Что-то вроде такого:
Код
C++ (Qt)
class MyCmAudio : public QObject
{
Q_OBJECT
 
public:
MyCmAudio( QObject * parent = 0 ) : QObject( parent )
{
cmAudio = new CmAudio();
}
 
private:
CmAudio * cmAudio;
 
public slots:
 inline void startRecording()
 {
  cmAudio->startRecording();
 }
 inline void stopRecording()
 {
  cmAudio->stopRecording();
 }
 inline void restartRecording()
 {
   stopRecording();
   startRecording();
 }
 
signals:
 void started();
 void stopped();
};
 

Код
C++ (Qt)
cmAudio = new MyCmAudio();
 
timer = new QTimer;
timer->setInterval(2000);
connect(timer, SIGNAL(timeout()), cmAudio, SLOT(restartRecording()) );
 
   timer->start();
   cmAudio->startRecording();
Записан

arzamas16
Гость
« Ответ #2 : Декабрь 18, 2013, 20:05 »

Спасибо, CmAudio унаследовано от QObject, а как лучше будет, запихать распознавание и запись в один класс или по разным?
Записан
Bepec
Гость
« Ответ #3 : Декабрь 18, 2013, 20:16 »

Если распознавание будет приличным (%70-80 с посторонними шумами) то буду благодарен за выложенный класс Улыбающийся
Записан
arzamas16
Гость
« Ответ #4 : Декабрь 18, 2013, 20:36 »

Распознавание на основе Google Speech
Записан
Bepec
Гость
« Ответ #5 : Декабрь 18, 2013, 20:38 »

ааа, тогда не надо. Кстати примеров вроде полным полно по гуглю на С++.

PS моё "кошка кошка раз два три" он никогда не распознаёт Грустный
Записан
arzamas16
Гость
« Ответ #6 : Декабрь 22, 2013, 08:45 »

Еще вопрос, не совсем по теме, как можно сделать проверку сигнала на входе микрофона, если уровень звука превышен начать запись? Может быть audioprobe?
« Последнее редактирование: Декабрь 22, 2013, 12:00 от arzamas16 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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