Sha256: 7c8cf432410dd40abdc52274ca2f2384af5631fe29ffb5c61735f0df480dcdea

Contents?: true

Size: 1.46 KB

Versions: 9

Compression:

Stored size: 1.46 KB

Contents

require 'pathname'

module Scissor
  class Fragment
    attr_reader :filename, :start, :pitch

    def initialize(filename, start, duration, reverse = false, pitch = 100, stretch = false)
      @filename = Pathname.new(filename).realpath
      @start = start
      @duration = duration
      @reverse = reverse
      @pitch = pitch
      @is_stretched = stretch

      freeze
    end

    def duration
      @duration * (100 / pitch.to_f)
    end

    def original_duration
      @duration
    end

    def reversed?
      @reverse
    end

    def stretched?
      @is_stretched
    end

    def create(remaining_start, remaining_length)
      new_fragment = nil

      if remaining_start >= duration
        remaining_start -= duration
      else
        if remaining_start + remaining_length >= duration
          new_fragment = self.class.new(
            filename,
            start + remaining_start * pitch.to_f / 100,
            (duration - remaining_start) * pitch.to_f / 100,
            false,
            pitch)

          remaining_length -= duration - remaining_start
          remaining_start = 0
        else
          new_fragment = self.class.new(
            filename,
            start + remaining_start * pitch.to_f / 100,
            remaining_length * pitch.to_f / 100,
            false,
            pitch)

          remaining_start = 0
          remaining_length = 0
        end
      end

      return new_fragment, remaining_start, remaining_length
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
scissor-0.2.5 lib/scissor/fragment.rb
scissor-0.2.4 lib/scissor/fragment.rb
scissor-0.2.3 lib/scissor/fragment.rb
scissor-0.2.2 lib/scissor/fragment.rb
scissor-0.2.1 lib/scissor/fragment.rb
scissor-0.2.0 lib/scissor/fragment.rb
scissor-0.1.2 lib/scissor/fragment.rb
scissor-0.1.1 lib/scissor/fragment.rb
scissor-0.1.0 lib/scissor/fragment.rb