Я никогда не работал ни с ALExtractor, ни с ALSoundExtractor, но вот то, что я знаю.
в старом Naoqi «ALExtractor»
- мог запускаться либо из основного процесса (с использованием autoload.ini), либо из другого (известного как удаленный режим ). В фреймворке qi поддерживается только удаленный режим.
- может наследовать от ALExtractor или ALAudioExtractor, чтобы исключить некоторый код. Эти классы не были перенесены в платформу qi. Так что, если вы не хотите продолжать использовать libnaoqi, вам следует найти способ обойтись без них.
Хорошие новости: наследование от них никогда не было действительно необходимым. Вы окажетесь в том же положении, что и в следующем вопросе, где экстрактор реализован в python (и, следовательно, не может наследовать от класса C ++ и не может быть загружен в основной процесс из autoload.ini). Проблемы со звуком удаленного робота NAO
Как объявить функцию, которая переопределяет виртуальную функцию - технически функция базового класса process () ожидает переменных в старом соглашении AL ::.
Каждый раз, когда вы используете "старый Naoqi "вы фактически используете слой совместимости поверх qi framework. Так что всякий раз, когда вы используете «старый Naoqi», вы уже используете фреймворк qi. libqi qi :: AnyValue расширяется во время выполнения, libnaoqi расширяет его, чтобы дать ему знать, как обрабатывать ALValue: как преобразовать его в примитивные типы (число с плавающей запятой, список целых чисел, строка, буфер и т. д. c.).
Итак, всякий раз, когда старый ALSoundExtractor получает AL :: ALvalue, на самом деле это qi :: AnyValue, которое было преобразовано в ALValue непосредственно перед вызовом метода process (). Если вы не связываетесь с libnaoqi, вы не сможете использовать это значение как ALValue, но вы можете использовать его как qi :: AnyValue или даже как примитивный тип.
исходный прототип (cfr doxygen http://doc.aldebaran.com/2-8/ref/libalaudio/classAL_1_1ALSoundExtractor.html) is
void ALSoundExtractor::process (const int &nbOfChannels, const int &nbrOfSamplesByChannel, const AL_SOUND_FORMAT *buffer, const ALValue ×tamp);
Поскольку временная метка, вероятно, представляет собой список из двух целых чисел, я бы попробовал что-то вроде этого
void TmpSoundExtractor::process (const int &nbOfChannels, const int &nbrOfSamplesByChannel, qi::AnyValue buffer, const std::vector<int> ×tamp);
Я не уверен, как обрабатывать буферную переменную, но позвольте сначала поработать остальным.