Работа на одиночных аудиоканалах без деинтерлейсинга

0

Я обрабатываю форму волны, хранящуюся в векторе. Звуковые каналы чередуются. Я должен обрабатывать каналы отдельно, а затем предоставлять конечный результат в виде чередования (снова). Функции, которые работают на каждом отдельном канале, принимают диапазон, ограниченный итераторами произвольного доступа, и предполагают, что диапазон непрерывный.

Поскольку эти операции должны выполняться в режиме реального времени (или вроде), я хотел бы подделать фазу деперемежения: в других терминах я ищу способ заставить одноканальные функции работать на определенном канале, обратное перемежение и без влияния на их текущий код, предполагающий, что оператор итератора ++ (или --) перемещается к следующему (или предыдущему) элементу.

Что ты предлагаешь? В настоящее время я думаю о написании пользовательского итератора произвольного доступа. Есть ли другое жизнеспособное решение? Я бы предпочел не использовать boost.

Теги:
iterator
audio-processing

1 ответ

1
Лучший ответ

Вы должны предоставить пользовательский итератор, который реализует operator++() и operator--() w/r/t количество каналов для сохранения чередования. Вы можете сделать это без использования boost.

Однако вам также придется адаптировать векторный класс для использования новых итераторов. Таким образом, текущий код должен измениться с помощью нового векторного класса.

  • 0
    Текущий код не предполагает, что он работает с экземплярами std::vector . К счастью, он состоит из STL-подобных функций с допустимыми диапазонами итераторов произвольного доступа.
  • 1
    Я думаю, что иметь собственный итератор - лучший вариант. Он скрывает детали реализации от пользователя и делает то, что он хочет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню