def cycle(**opts, &block)
      cycle_input_node =
        if @input_nodes[@used_input_nodes]
          @input_nodes[@used_input_nodes]
        else
          @base_input_node.clone.tap do |node|
            @input_nodes << node
          end
        end

      Negasonic::LoopedEvent::Sequence.new(cycle_input_node, **opts).tap do |the_cycle|
        the_cycle.instance_eval(&block)
        @used_input_nodes += 1
        @cycles << the_cycle
      end
    end
def cycle(**opts, &block)
      cycle_input_node =
        if @input_nodes[@used_input_nodes]
          @input_nodes[@used_input_nodes]
        else
          @base_input_node.clone.tap do |node|
            @input_nodes << node
          end
        end

      Negasonic::LoopedEvent::Sequence.new(cycle_input_node, **opts).tap do |the_cycle|
        the_cycle.instance_eval(&block)
        @used_input_nodes += 1
        @cycles << the_cycle
      end
    end
DSL