Russian Qt Forum

Qt => Вопросы новичков => Тема начата: arzamas16 от Декабрь 18, 2013, 18:30



Название: Вопрос по взаимодействию методов классов
Отправлено: 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();

Как можно по сигналу таймера остановить запись, и начать сразу же новую.


Название: Re: Вопрос по взаимодействию методов классов
Отправлено: gil9red от Декабрь 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();


Название: Re: Вопрос по взаимодействию методов классов
Отправлено: arzamas16 от Декабрь 18, 2013, 20:05
Спасибо, CmAudio унаследовано от QObject, а как лучше будет, запихать распознавание и запись в один класс или по разным?


Название: Re: Вопрос по взаимодействию методов классов
Отправлено: Bepec от Декабрь 18, 2013, 20:16
Если распознавание будет приличным (%70-80 с посторонними шумами) то буду благодарен за выложенный класс :)


Название: Re: Вопрос по взаимодействию методов классов
Отправлено: arzamas16 от Декабрь 18, 2013, 20:36
Распознавание на основе Google Speech


Название: Re: Вопрос по взаимодействию методов классов
Отправлено: Bepec от Декабрь 18, 2013, 20:38
ааа, тогда не надо. Кстати примеров вроде полным полно по гуглю на С++.

PS моё "кошка кошка раз два три" он никогда не распознаёт :(


Название: Re: Вопрос по взаимодействию методов классов
Отправлено: arzamas16 от Декабрь 22, 2013, 08:45
Еще вопрос, не совсем по теме, как можно сделать проверку сигнала на входе микрофона, если уровень звука превышен начать запись? Может быть audioprobe?