Comment detail

タイムコードを表すクラス (Nested Flatten)

そのまんまなのですが、こういうことなんでしょうか

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class TimeCode

    attr_reader :h, :m, :s, :frame, :frame_rate

    def initialize(h, m, s, frame, frame_rate)
        @h, @m, @s, @frame, @frame_rate = h, m, s, frame, frame_rate
        if frame > (frame_rate == "ntsc" ? 29.97 : frame_rate)
            raise ArgumentError, "Invalid frame number."
        end
    end

    def frame_rate=(v)
        @frame_rate = v
    end

    def to_s
        if @frame_rate == "ntsc" && @m != 10 && @s == 0 && (@frame == 0 || @frame == 1)
            "%02d:%02d:%02d;%02d" % [@h, @m, @s, @frame]
        else
            "%02d:%02d:%02d:%02d" % [@h, @m, @s, @frame]
        end
    end

end

p TimeCode.new( 0,  0,  0,  0, "ntsc").to_s #=> "00:00:00;00"
p TimeCode.new( 0,  0,  0,  1, "ntsc").to_s #=> "00:00:00;01"
p TimeCode.new( 0,  0,  0,  2, "ntsc").to_s #=> "00:00:00:02"
p TimeCode.new( 0, 10,  0,  0, "ntsc").to_s #=> "00:10:00:00"
p TimeCode.new( 0, 10,  0,  1, "ntsc").to_s #=> "00:10:00:01"
p TimeCode.new( 0, 10,  0,  2, "ntsc").to_s #=> "00:10:00:02"

p TimeCode.new( 0,  0,  0,  0, 10).to_s #=> "00:00:00:00"
p TimeCode.new( 0,  0,  0, 11, 10).to_s #=> ArgumentError

あ、ドロップフレームの処理を読みまちがえていました。こうでしょうか。そもそもなんか違うのかもしれないですが

1
2
3
4
5
6
7
    def to_s
        if @frame_rate == "ntsc" && (@m % 10 != 0) && @s == 0 && (@frame == 0 || @frame == 1)
            "%02d:%02d:%02d;%02d" % [@h, @m, @s, @frame]
        else
            "%02d:%02d:%02d:%02d" % [@h, @m, @s, @frame]
        end
    end

Index

Feed

Other

Link

Pathtraq

loading...