flame_channel_parser 3.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.travis.yml +4 -0
  2. data/Gemfile +10 -0
  3. data/History.txt +5 -0
  4. data/README.rdoc +4 -2
  5. data/Rakefile +23 -10
  6. data/bin/{bake_flame_timewarp → framecurve_from_flame} +5 -1
  7. data/bin/framecurve_to_flame +22 -0
  8. data/flame_channel_parser.gemspec +130 -0
  9. data/lib/builder.rb +86 -0
  10. data/lib/flame_channel_parser.rb +31 -4
  11. data/lib/framecurve_writers/base.rb +49 -0
  12. data/lib/framecurve_writers/batch_timewarp.rb +41 -0
  13. data/lib/framecurve_writers/kronos.rb +23 -0
  14. data/lib/framecurve_writers/softfx_timewarp.rb +82 -0
  15. data/lib/framecurve_writers/templates/BatchTW.xml +118 -0
  16. data/lib/framecurve_writers/templates/SampleKronos.F_Kronos +376 -0
  17. data/lib/framecurve_writers/templates/TW_Sample.timewarp +79 -0
  18. data/lib/framecurve_writers/templates/key.xml +10 -0
  19. data/lib/timewarp_extractor.rb +18 -2
  20. data/lib/xml_parser.rb +90 -0
  21. data/test/helper.rb +18 -0
  22. data/test/snaps/BatchTimewar_proper.xml +157 -0
  23. data/test/snaps/BatchTimewarp_ext1.timewarp_node +1 -0
  24. data/test/test_base_timewarp_writer.rb +22 -0
  25. data/test/test_batch_timewarp_writer.rb +18 -0
  26. data/test/test_channel.rb +1 -2
  27. data/test/test_cli.rb +14 -13
  28. data/test/test_cli_framecurve_to_flame.rb +45 -0
  29. data/test/test_cli_timewarp_extractor.rb +19 -9
  30. data/test/test_extractor.rb +1 -3
  31. data/test/test_flame_builder.rb +68 -0
  32. data/test/test_flame_channel_parser.rb +2 -2
  33. data/test/test_interpolator.rb +15 -5
  34. data/test/test_key.rb +2 -2
  35. data/test/test_kronos_timewarp_writer.rb +16 -0
  36. data/test/test_segments.rb +1 -2
  37. data/test/test_softfx_timewarp_writer.rb +16 -0
  38. data/test/test_timewarp_extractor.rb +2 -4
  39. data/test/test_xml_setup.rb +37 -0
  40. data/test/timewarp_examples/TW_16_010_v01.output.txt +430 -428
  41. data/test/timewarp_examples/simple.framecurve.txt +32 -0
  42. data/test/timewarp_export_samples/BatchTW.timewarp_node +145 -0
  43. data/test/timewarp_export_samples/Kronos.F_Kronos +403 -0
  44. data/test/timewarp_export_samples/SoftFX.timewarp +81 -0
  45. metadata +127 -168
  46. data/.gemtest +0 -0
  47. data/Manifest.txt +0 -52
@@ -1,13 +1,11 @@
1
- require "test/unit"
2
- require "stringio"
3
- require "tempfile"
4
- require "cli_test"
1
+ require "helper"
5
2
 
6
3
  class TestCli < Test::Unit::TestCase
7
4
 
8
5
  def setup
9
6
  binary = File.expand_path(File.dirname(__FILE__) + "/../bin/bake_flame_channel")
10
7
  @app = CLITest.new(binary)
8
+ assert_not_nil @app
11
9
  end
12
10
 
13
11
  def test_cli_with_no_args_produces_usage
@@ -39,20 +37,23 @@ class TestCli < Test::Unit::TestCase
39
37
 
40
38
  def test_cli_with_curve_limits
41
39
  full_path = File.expand_path(File.dirname(__FILE__)) + "/snaps/TW_015_010_v03.timewarp"
40
+
42
41
  status, output, e = @app.run(" --keyframed-range-only " + full_path)
43
42
  assert_equal 0, status
44
43
  assert_equal 531, output.split("\n").length, "Should have output 513 frames"
45
44
  end
46
45
 
47
46
  def test_cli_with_output_to_file
48
- tf = Tempfile.new("experiment")
49
- full_path = File.expand_path(File.dirname(__FILE__)) + "/snaps/TW.timewarp"
50
- status, output, e = @app.run(" --to-file " + tf.path + " " + full_path)
51
-
52
- assert_equal 0, status
53
- assert_equal 0, output.length
54
- assert_equal 747, File.read(tf.path).split("\n").length, "Should have output 816 frames"
55
- ensure
56
- tf.close!
47
+ begin
48
+ tf = Tempfile.new("experiment")
49
+ full_path = File.expand_path(File.dirname(__FILE__)) + "/snaps/TW.timewarp"
50
+ status, output, e = @app.run(" --to-file " + tf.path + " " + full_path)
51
+
52
+ assert_equal 0, status
53
+ assert_equal 0, output.length
54
+ assert_equal 747, File.read(tf.path).split("\n").length, "Should have output 816 frames"
55
+ ensure
56
+ tf.close!
57
+ end
57
58
  end
58
59
  end
@@ -0,0 +1,45 @@
1
+ require "helper"
2
+ require "set"
3
+
4
+ class TestCliFramecurveToFlame < Test::Unit::TestCase
5
+
6
+ BINARY = File.expand_path(File.dirname(__FILE__) + "/../bin/framecurve_to_flame")
7
+ FC_PATH = File.expand_path(File.dirname(__FILE__)) + "/timewarp_examples/simple.framecurve.txt"
8
+ RESULTS = %w(
9
+ simple.framecurve.txt.F_Kronos
10
+ simple.framecurve.txt.timewarp
11
+ simple.framecurve.txt.timewarp_node
12
+ )
13
+
14
+ # Run the binary under test with passed options, and return [exit_code, stdout_content, stderr_content]
15
+ def cli(commandline_arguments)
16
+ CLITest.new(BINARY).run(commandline_arguments)
17
+ end
18
+
19
+ def teardown
20
+ Dir.glob(FC_PATH + ".*").each do | export |
21
+ File.unlink(export)
22
+ end
23
+ end
24
+
25
+ def test_cli_with_no_args_produces_usage
26
+ status, o, e = cli('')
27
+ assert_equal(1, status)
28
+ assert_match( /No input file path provided/, e)
29
+ end
30
+
31
+ def test_cli_works
32
+ status, o, e = cli(FC_PATH)
33
+ assert_equal(0, status)
34
+ files = Dir.glob(FC_PATH + ".*")
35
+ assert_equal Set.new(RESULTS), Set.new(files.map{|f| File.basename(f)}), "Should have output these files"
36
+
37
+ files.each do | path |
38
+ channels = FlameChannelParser.parse_file_at(path)
39
+ the_channel = channels.find{|c| c.length == 30 }
40
+
41
+ assert_not_nil the_channel, "Should have exported at least one channel of 30 frames for #{path}"
42
+ end
43
+ end
44
+
45
+ end
@@ -1,17 +1,23 @@
1
- require "test/unit"
2
- require "stringio"
3
- require "tempfile"
4
- require "cli_test"
1
+ require "helper"
5
2
 
6
- class TestCli < Test::Unit::TestCase
3
+ class TestCliTimewarpExtractor < Test::Unit::TestCase
7
4
 
8
- BINARY = File.expand_path(File.dirname(__FILE__) + "/../bin/bake_flame_timewarp")
5
+ BINARY = File.expand_path(File.dirname(__FILE__) + "/../bin/framecurve_from_flame")
6
+ FC_PATH = File.expand_path(File.dirname(__FILE__)) + "/timewarp_examples/TW_016_010_v01.framecurve.txt"
7
+ TW_PATH = File.expand_path(File.dirname(__FILE__)) + "/timewarp_examples/TW_016_010_v01.timewarp"
9
8
 
10
9
  # Run the binary under test with passed options, and return [exit_code, stdout_content, stderr_content]
11
10
  def cli(commandline_arguments)
12
11
  CLITest.new(BINARY).run(commandline_arguments)
13
12
  end
14
13
 
14
+ def delete_test_files
15
+ File.unlink(FC_PATH) if File.exist?(FC_PATH)
16
+ end
17
+
18
+ alias_method :setup, :delete_test_files
19
+ alias_method :teardown, :delete_test_files
20
+
15
21
  def test_cli_with_no_args_produces_usage
16
22
  status, o, e = cli('')
17
23
  assert_equal( -1, status)
@@ -26,9 +32,13 @@ class TestCli < Test::Unit::TestCase
26
32
  end
27
33
 
28
34
  def test_cli_with_proper_output
29
- full_path = File.expand_path(File.dirname(__FILE__)) + "/timewarp_examples/TW_016_010_v01.timewarp"
30
- status, output, e = cli(" " + full_path)
35
+ status, output, e = cli(" " + TW_PATH)
36
+ assert_equal '', output
37
+ assert File.exist?(FC_PATH)
38
+
39
+ content = File.read(FC_PATH)
40
+ assert content.include?("framecurve.org/"), "Should include the framecurve URL"
31
41
  assert_equal 0, status
32
- assert_equal 428, output.split("\n").length, "Should have output 428 frames"
42
+ assert_equal 428, content.split("\r\n").length, "Should have output 428 lines to file (first 2 lines are comments)"
33
43
  end
34
44
  end
@@ -1,7 +1,5 @@
1
- require "test/unit"
2
- require "stringio"
1
+ require "helper"
3
2
 
4
- require File.dirname(__FILE__) + "/../lib/flame_channel_parser"
5
3
 
6
4
  class TestExtractor < Test::Unit::TestCase
7
5
 
@@ -0,0 +1,68 @@
1
+ require "helper"
2
+
3
+
4
+ class FlameBuilderTest < Test::Unit::TestCase
5
+ def setup
6
+ @s = ""
7
+ @b = FlameChannelParser::Builder.new(StringIO.new(@s))
8
+ end
9
+
10
+ def test_write_loose
11
+ @b.write_loose!("Foo")
12
+ assert_equal "Foo\n", @s
13
+ end
14
+
15
+ def test_write_tuple
16
+ @b.write_tuple!("Foo", 3)
17
+ assert_equal "Foo 3\n", @s
18
+ end
19
+
20
+ def test_write_tuple_with_true
21
+ @b.write_tuple!("Foo", true)
22
+ assert_equal "Foo yes\n", @s
23
+ end
24
+
25
+ def test_write_tuple_with_false
26
+ @b.write_tuple!("Foo", false)
27
+ assert_equal "Foo no\n", @s
28
+ end
29
+
30
+ def test_write_block
31
+ @b.write_block!("Foo", 1) do | b |
32
+ b.write_tuple!("Baz", 2)
33
+ end
34
+ assert_equal "Foo 1\n\tBaz 2\n\tEnd\n", @s
35
+ end
36
+
37
+ def test_write_block_with_no_arg
38
+ @b.foo {|c| c.bar }
39
+ assert_equal "Foo\n\tBar\n\tEnd\n", @s
40
+ end
41
+
42
+ def test_write_block_with_args
43
+ @b.foo(:bar) {|c| c.bar }
44
+ assert_equal "Foo bar\n\tBar\n\tEnd\n", @s
45
+ end
46
+
47
+ def test_automissing_with_values
48
+ @b.some_key(2)
49
+ assert_equal "SomeKey 2\n", @s
50
+ end
51
+
52
+ def test_automissing_with_block
53
+ @b.some_key(2) do | b |
54
+ b.some_subkey
55
+ end
56
+ assert_equal "SomeKey 2\n\tSomeSubkey\n\tEnd\n", @s
57
+ end
58
+
59
+ def test_linebreak
60
+ @b.linebreak!(5)
61
+ assert_equal "\n" * 5, @s
62
+ end
63
+
64
+ def test_color_hash
65
+ @b.color_hash!(:triplet, 10, 12, 15)
66
+ assert_equal "Triplet\n\tRed 10\n\tGreen 12\n\tBlue 15\n", @s
67
+ end
68
+ end
@@ -1,5 +1,5 @@
1
- require "test/unit"
2
- require File.dirname(__FILE__) + "/../lib/flame_channel_parser"
1
+ require "helper"
2
+
3
3
 
4
4
  class TestFlameChannelParser < Test::Unit::TestCase
5
5
  D = 0.0001
@@ -1,5 +1,5 @@
1
- require "test/unit"
2
- require "stringio"
1
+ require "helper"
2
+
3
3
 
4
4
  require File.dirname(__FILE__) + "/../lib/flame_channel_parser"
5
5
 
@@ -39,9 +39,19 @@ class TestInterpolator < Test::Unit::TestCase
39
39
  constants = FlameChannelParser.parse(data).find{|c| c.name == "constants"}
40
40
  interp = FlameChannelParser::Interpolator.new(constants)
41
41
 
42
- vs = [770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41,
43
- 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 1017.36, 1017.36]
44
-
42
+ vs = [770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41,
43
+ 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41,
44
+ 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41,
45
+ 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41, 770.41,
46
+ 770.41, 770.41, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177,
47
+ 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177,
48
+ 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177, 858.177,
49
+ 858.177, 858.177, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407,
50
+ 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407,
51
+ 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407,
52
+ 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407, 939.407,
53
+ 939.407, 939.407, 939.407, 1017.36, 1017.36]
54
+
45
55
  values = (-5..116).map{|f| interp.sample_at(f) }
46
56
  assert_equal vs, values
47
57
  end
@@ -1,5 +1,5 @@
1
- require "test/unit"
2
- require File.dirname(__FILE__) + "/../lib/flame_channel_parser"
1
+ require "helper"
2
+
3
3
 
4
4
  class TestKey < Test::Unit::TestCase
5
5
  D = 0.001
@@ -0,0 +1,16 @@
1
+ require "helper"
2
+
3
+ class TestKronosTimewarpWriter < Test::Unit::TestCase
4
+ def test_simple_export
5
+ buf = StringIO.new
6
+ w = FlameChannelParser::FramecurveWriters::Kronos.new
7
+ w.run_export(buf) do | key_writer |
8
+ key_writer.key(1, 123)
9
+ key_writer.key(15, 124)
10
+ key_writer.key(19, 200)
11
+ end
12
+
13
+ assert_same_buffer File.open(File.dirname(__FILE__) + "/timewarp_export_samples/Kronos.F_Kronos"), buf
14
+ end
15
+
16
+ end
@@ -1,5 +1,4 @@
1
- require "test/unit"
2
- require File.dirname(__FILE__) + "/../lib/flame_channel_parser"
1
+ require "helper"
3
2
 
4
3
 
5
4
  include FlameChannelParser::Segments
@@ -0,0 +1,16 @@
1
+ require "helper"
2
+
3
+ class TestSoftfxTimewarpWriter < Test::Unit::TestCase
4
+ def test_simple_export
5
+ buf = StringIO.new
6
+ w = FlameChannelParser::FramecurveWriters::SoftfxTimewarp.new
7
+ w.run_export(buf) do | key_writer |
8
+ key_writer.key(1, 40)
9
+ key_writer.key(15, 56)
10
+ key_writer.key(21, 63)
11
+ key_writer.key(102, 102)
12
+ end
13
+ assert_same_buffer File.open(File.dirname(__FILE__) + "/timewarp_export_samples/SoftFX.timewarp"), buf
14
+ end
15
+
16
+ end
@@ -1,13 +1,11 @@
1
- require "test/unit"
2
- require "flame_channel_parser"
3
- require "stringio"
1
+ require "helper"
4
2
 
5
3
  class TestTwextract < Test::Unit::TestCase
6
4
 
7
5
  def test_parse_with_interpolated_setup
8
6
  interpolated_io = StringIO.new
9
7
  FlameChannelParser::TimewarpExtractor.new.extract(File.dirname(__FILE__) + "/timewarp_examples/TW_TEST.F_Kronos", :destination => interpolated_io)
10
- assert_equal 77981, interpolated_io.pos
8
+ assert_equal 83053, interpolated_io.pos
11
9
  end
12
10
 
13
11
  def test_parse_kronos_setup
@@ -0,0 +1,37 @@
1
+ require "helper"
2
+
3
+
4
+ class TestXMLParser < Test::Unit::TestCase
5
+ D = 0.0001
6
+
7
+ def test_parsing_timewarp_from_2012
8
+ data = File.open(File.dirname(__FILE__) + "/snaps/BatchTimewarp_ext1.timewarp_node")
9
+ p = FlameChannelParser::XMLParser.new
10
+ channels = p.parse(data)
11
+
12
+ assert_equal 12, channels.length, "Should have pulled 12 channels"
13
+ timing = channels.find{|c| c.path == "Timing"}
14
+
15
+ assert_not_nil timing
16
+ assert_kind_of FlameChannelParser::Channel, timing
17
+ assert_equal 4, timing.length
18
+
19
+ first_k = timing[0]
20
+ assert first_k.has_2012_tangents?
21
+
22
+ assert_in_delta D, 1, first_k.frame
23
+ assert_in_delta D, 1, first_k.value
24
+ assert_equal :hermite, first_k.curve_mode
25
+ assert_equal :linear, first_k.curve_order
26
+ assert_in_delta D, 8.666667, first_k.r_handle_x
27
+ assert_in_delta D, 0.75, first_k.l_handle_y
28
+ end
29
+
30
+ def test_xml_detected
31
+ data = File.open(File.dirname(__FILE__) + "/snaps/BatchTimewarp_ext1.timewarp_node")
32
+ channels = FlameChannelParser.parse(data)
33
+ assert_equal 12, channels.length, "Should have pulled 12 channels"
34
+ timing = channels.find{|c| c.path == "Timing"}
35
+ assert_not_nil timing
36
+ end
37
+ end
@@ -1,428 +1,430 @@
1
- 1 1.00000
2
- 2 2.00000
3
- 3 3.00000
4
- 4 4.00000
5
- 5 5.00000
6
- 6 6.00000
7
- 7 7.00000
8
- 8 8.00000
9
- 9 9.00000
10
- 10 10.00000
11
- 11 11.00000
12
- 12 12.00000
13
- 13 13.00000
14
- 14 14.00000
15
- 15 15.00000
16
- 16 16.00000
17
- 17 17.00000
18
- 18 18.00000
19
- 19 19.00000
20
- 20 20.00000
21
- 21 21.00000
22
- 22 22.00000
23
- 23 23.00000
24
- 24 24.00000
25
- 25 25.00000
26
- 26 26.00000
27
- 27 27.00000
28
- 28 28.00000
29
- 29 29.00000
30
- 30 30.00000
31
- 31 31.00000
32
- 32 32.00000
33
- 33 33.00000
34
- 34 34.00000
35
- 35 35.00000
36
- 36 36.00000
37
- 37 37.00000
38
- 38 38.00000
39
- 39 39.00000
40
- 40 40.00000
41
- 41 41.00000
42
- 42 42.00000
43
- 43 43.00000
44
- 44 44.00000
45
- 45 45.00000
46
- 46 46.00000
47
- 47 47.00000
48
- 48 48.00000
49
- 49 49.00000
50
- 50 50.00000
51
- 51 51.00000
52
- 52 52.00000
53
- 53 53.00000
54
- 54 54.00000
55
- 55 55.00000
56
- 56 56.00000
57
- 57 57.00000
58
- 58 58.00000
59
- 59 59.00000
60
- 60 60.00000
61
- 61 61.00000
62
- 62 62.00000
63
- 63 63.00000
64
- 64 64.00000
65
- 65 65.00000
66
- 66 66.00000
67
- 67 67.00000
68
- 68 68.00000
69
- 69 69.00000
70
- 70 70.00000
71
- 71 71.00000
72
- 72 72.00000
73
- 73 73.00000
74
- 74 74.00000
75
- 75 75.00000
76
- 76 76.00000
77
- 77 77.00000
78
- 78 78.00000
79
- 79 79.00000
80
- 80 80.00000
81
- 81 81.00000
82
- 82 82.00000
83
- 83 83.00000
84
- 84 84.00000
85
- 85 85.00000
86
- 86 86.00000
87
- 87 87.00000
88
- 88 88.00000
89
- 89 89.00000
90
- 90 90.00000
91
- 91 91.00000
92
- 92 92.00000
93
- 93 93.00000
94
- 94 94.00000
95
- 95 95.00000
96
- 96 96.00000
97
- 97 97.00000
98
- 98 98.00000
99
- 99 99.00000
100
- 100 100.00000
101
- 101 101.00000
102
- 102 102.00000
103
- 103 103.00000
104
- 104 104.00000
105
- 105 105.00000
106
- 106 106.00000
107
- 107 107.00000
108
- 108 108.00000
109
- 109 109.00000
110
- 110 110.00000
111
- 111 111.00000
112
- 112 112.00000
113
- 113 113.00000
114
- 114 114.00000
115
- 115 115.00000
116
- 116 116.00000
117
- 117 117.00000
118
- 118 118.00000
119
- 119 119.00000
120
- 120 120.00000
121
- 121 121.00000
122
- 122 122.00000
123
- 123 123.00000
124
- 124 124.00000
125
- 125 125.00000
126
- 126 126.00000
127
- 127 127.00000
128
- 128 128.00000
129
- 129 129.00000
130
- 130 130.00000
131
- 131 131.00000
132
- 132 132.00000
133
- 133 133.00000
134
- 134 134.00000
135
- 135 135.00000
136
- 136 136.00000
137
- 137 137.00000
138
- 138 138.00000
139
- 139 139.00000
140
- 140 140.00000
141
- 141 141.00000
142
- 142 142.00000
143
- 143 143.00000
144
- 144 144.00000
145
- 145 145.00000
146
- 146 146.00000
147
- 147 147.00000
148
- 148 148.00000
149
- 149 149.00000
150
- 150 150.00000
151
- 151 151.00000
152
- 152 152.00000
153
- 153 153.00000
154
- 154 154.00000
155
- 155 155.00000
156
- 156 156.00000
157
- 157 157.00000
158
- 158 158.00000
159
- 159 159.00000
160
- 160 160.00000
161
- 161 161.02799
162
- 162 162.11214
163
- 163 163.25276
164
- 164 164.45013
165
- 165 165.70456
166
- 166 167.01633
167
- 167 168.38575
168
- 168 169.81310
169
- 169 171.29868
170
- 170 172.84278
171
- 171 174.44571
172
- 172 176.10775
173
- 173 177.82920
174
- 174 179.61036
175
- 175 181.45151
176
- 176 183.35296
177
- 177 185.31499
178
- 178 187.33791
179
- 179 189.42200
180
- 180 191.52283
181
- 181 193.59401
182
- 182 195.63295
183
- 183 197.63706
184
- 184 199.60372
185
- 185 201.53033
186
- 186 203.41431
187
- 187 205.25304
188
- 188 207.04393
189
- 189 208.78438
190
- 190 210.47179
191
- 191 212.10355
192
- 192 213.67706
193
- 193 215.18974
194
- 194 216.63897
195
- 195 218.02216
196
- 196 219.33670
197
- 197 220.58000
198
- 198 221.77282
199
- 199 222.93894
200
- 200 224.08026
201
- 201 225.19868
202
- 202 226.29610
203
- 203 227.37442
204
- 204 228.43555
205
- 205 229.48138
206
- 206 230.51382
207
- 207 231.53478
208
- 208 232.54614
209
- 209 233.54982
210
- 210 234.54772
211
- 211 235.54173
212
- 212 236.53376
213
- 213 237.52572
214
- 214 238.51950
215
- 215 239.51700
216
- 216 240.51700
217
- 217 241.51700
218
- 218 242.51700
219
- 219 243.51700
220
- 220 244.51700
221
- 221 245.51700
222
- 222 246.51700
223
- 223 247.51700
224
- 224 248.51700
225
- 225 249.51700
226
- 226 250.51700
227
- 227 251.51700
228
- 228 252.51700
229
- 229 253.51700
230
- 230 254.51700
231
- 231 255.51700
232
- 232 256.51700
233
- 233 257.51700
234
- 234 258.51700
235
- 235 259.51700
236
- 236 260.51700
237
- 237 261.51700
238
- 238 262.51700
239
- 239 263.51700
240
- 240 264.51700
241
- 241 265.51700
242
- 242 266.51700
243
- 243 267.51700
244
- 244 268.51700
245
- 245 269.51700
246
- 246 270.51700
247
- 247 271.51700
248
- 248 272.51700
249
- 249 273.51700
250
- 250 274.51700
251
- 251 275.51700
252
- 252 276.51700
253
- 253 277.51700
254
- 254 278.51700
255
- 255 279.51700
256
- 256 280.51700
257
- 257 281.51700
258
- 258 282.51700
259
- 259 283.51700
260
- 260 284.51700
261
- 261 285.51700
262
- 262 286.51700
263
- 263 287.51700
264
- 264 288.51700
265
- 265 289.51700
266
- 266 290.51700
267
- 267 291.51700
268
- 268 292.51700
269
- 269 293.51700
270
- 270 294.51700
271
- 271 295.51700
272
- 272 296.51700
273
- 273 297.51700
274
- 274 298.51700
275
- 275 299.51700
276
- 276 300.51700
277
- 277 301.51700
278
- 278 302.51700
279
- 279 303.51700
280
- 280 304.51700
281
- 281 305.51700
282
- 282 306.51700
283
- 283 307.51700
284
- 284 308.51700
285
- 285 309.51700
286
- 286 310.51700
287
- 287 311.51700
288
- 288 312.51700
289
- 289 313.51700
290
- 290 314.51700
291
- 291 315.51700
292
- 292 316.51700
293
- 293 317.51700
294
- 294 318.51700
295
- 295 319.51700
296
- 296 320.51700
297
- 297 321.51700
298
- 298 322.51700
299
- 299 323.51700
300
- 300 324.51700
301
- 301 325.51700
302
- 302 326.51700
303
- 303 327.51700
304
- 304 328.51700
305
- 305 329.51700
306
- 306 330.51700
307
- 307 331.51700
308
- 308 332.51700
309
- 309 333.51700
310
- 310 334.51700
311
- 311 335.51700
312
- 312 336.51700
313
- 313 337.51700
314
- 314 338.51700
315
- 315 339.51700
316
- 316 340.51700
317
- 317 341.51700
318
- 318 342.51700
319
- 319 343.51700
320
- 320 344.51700
321
- 321 345.51700
322
- 322 346.51700
323
- 323 347.51700
324
- 324 348.51700
325
- 325 349.51700
326
- 326 350.51700
327
- 327 351.51700
328
- 328 352.51700
329
- 329 353.51700
330
- 330 354.51700
331
- 331 355.51700
332
- 332 356.51700
333
- 333 357.51700
334
- 334 358.51700
335
- 335 359.51700
336
- 336 360.51700
337
- 337 361.51700
338
- 338 362.51700
339
- 339 363.51700
340
- 340 364.51700
341
- 341 365.51700
342
- 342 366.51700
343
- 343 367.51700
344
- 344 368.51700
345
- 345 369.51700
346
- 346 370.51700
347
- 347 371.51700
348
- 348 372.51700
349
- 349 373.51700
350
- 350 374.51700
351
- 351 375.51700
352
- 352 376.51700
353
- 353 377.51700
354
- 354 378.51700
355
- 355 379.51700
356
- 356 380.51700
357
- 357 381.51700
358
- 358 382.51700
359
- 359 383.51700
360
- 360 384.51700
361
- 361 385.51700
362
- 362 386.51700
363
- 363 387.51700
364
- 364 388.51700
365
- 365 389.51700
366
- 366 390.51700
367
- 367 391.51700
368
- 368 392.51700
369
- 369 393.51700
370
- 370 394.51700
371
- 371 395.51700
372
- 372 396.51700
373
- 373 397.51700
374
- 374 398.51700
375
- 375 399.51700
376
- 376 400.51700
377
- 377 401.51700
378
- 378 402.51700
379
- 379 403.51700
380
- 380 404.51700
381
- 381 405.51700
382
- 382 406.51700
383
- 383 407.51700
384
- 384 408.51700
385
- 385 409.51700
386
- 386 410.51700
387
- 387 411.51700
388
- 388 412.51700
389
- 389 413.51700
390
- 390 414.51700
391
- 391 415.51700
392
- 392 416.51700
393
- 393 417.51700
394
- 394 418.51700
395
- 395 419.51700
396
- 396 420.51700
397
- 397 421.51700
398
- 398 422.51700
399
- 399 423.51700
400
- 400 424.51700
401
- 401 425.51700
402
- 402 426.51700
403
- 403 427.51700
404
- 404 428.51700
405
- 405 429.51700
406
- 406 430.51700
407
- 407 431.51700
408
- 408 432.51700
409
- 409 433.51700
410
- 410 434.51700
411
- 411 435.51700
412
- 412 436.51700
413
- 413 437.51700
414
- 414 438.51700
415
- 415 439.51700
416
- 416 440.51700
417
- 417 441.51700
418
- 418 442.51700
419
- 419 443.51700
420
- 420 444.51700
421
- 421 445.51700
422
- 422 446.51700
423
- 423 447.51700
424
- 424 448.51700
425
- 425 449.51700
426
- 426 450.51700
427
- 427 451.51700
428
- 428 452.51700
1
+ # http://framecurve.org/specification-v1
2
+ # at_frame use_frame_of_source
3
+ 1 1.00000
4
+ 2 2.00000
5
+ 3 3.00000
6
+ 4 4.00000
7
+ 5 5.00000
8
+ 6 6.00000
9
+ 7 7.00000
10
+ 8 8.00000
11
+ 9 9.00000
12
+ 10 10.00000
13
+ 11 11.00000
14
+ 12 12.00000
15
+ 13 13.00000
16
+ 14 14.00000
17
+ 15 15.00000
18
+ 16 16.00000
19
+ 17 17.00000
20
+ 18 18.00000
21
+ 19 19.00000
22
+ 20 20.00000
23
+ 21 21.00000
24
+ 22 22.00000
25
+ 23 23.00000
26
+ 24 24.00000
27
+ 25 25.00000
28
+ 26 26.00000
29
+ 27 27.00000
30
+ 28 28.00000
31
+ 29 29.00000
32
+ 30 30.00000
33
+ 31 31.00000
34
+ 32 32.00000
35
+ 33 33.00000
36
+ 34 34.00000
37
+ 35 35.00000
38
+ 36 36.00000
39
+ 37 37.00000
40
+ 38 38.00000
41
+ 39 39.00000
42
+ 40 40.00000
43
+ 41 41.00000
44
+ 42 42.00000
45
+ 43 43.00000
46
+ 44 44.00000
47
+ 45 45.00000
48
+ 46 46.00000
49
+ 47 47.00000
50
+ 48 48.00000
51
+ 49 49.00000
52
+ 50 50.00000
53
+ 51 51.00000
54
+ 52 52.00000
55
+ 53 53.00000
56
+ 54 54.00000
57
+ 55 55.00000
58
+ 56 56.00000
59
+ 57 57.00000
60
+ 58 58.00000
61
+ 59 59.00000
62
+ 60 60.00000
63
+ 61 61.00000
64
+ 62 62.00000
65
+ 63 63.00000
66
+ 64 64.00000
67
+ 65 65.00000
68
+ 66 66.00000
69
+ 67 67.00000
70
+ 68 68.00000
71
+ 69 69.00000
72
+ 70 70.00000
73
+ 71 71.00000
74
+ 72 72.00000
75
+ 73 73.00000
76
+ 74 74.00000
77
+ 75 75.00000
78
+ 76 76.00000
79
+ 77 77.00000
80
+ 78 78.00000
81
+ 79 79.00000
82
+ 80 80.00000
83
+ 81 81.00000
84
+ 82 82.00000
85
+ 83 83.00000
86
+ 84 84.00000
87
+ 85 85.00000
88
+ 86 86.00000
89
+ 87 87.00000
90
+ 88 88.00000
91
+ 89 89.00000
92
+ 90 90.00000
93
+ 91 91.00000
94
+ 92 92.00000
95
+ 93 93.00000
96
+ 94 94.00000
97
+ 95 95.00000
98
+ 96 96.00000
99
+ 97 97.00000
100
+ 98 98.00000
101
+ 99 99.00000
102
+ 100 100.00000
103
+ 101 101.00000
104
+ 102 102.00000
105
+ 103 103.00000
106
+ 104 104.00000
107
+ 105 105.00000
108
+ 106 106.00000
109
+ 107 107.00000
110
+ 108 108.00000
111
+ 109 109.00000
112
+ 110 110.00000
113
+ 111 111.00000
114
+ 112 112.00000
115
+ 113 113.00000
116
+ 114 114.00000
117
+ 115 115.00000
118
+ 116 116.00000
119
+ 117 117.00000
120
+ 118 118.00000
121
+ 119 119.00000
122
+ 120 120.00000
123
+ 121 121.00000
124
+ 122 122.00000
125
+ 123 123.00000
126
+ 124 124.00000
127
+ 125 125.00000
128
+ 126 126.00000
129
+ 127 127.00000
130
+ 128 128.00000
131
+ 129 129.00000
132
+ 130 130.00000
133
+ 131 131.00000
134
+ 132 132.00000
135
+ 133 133.00000
136
+ 134 134.00000
137
+ 135 135.00000
138
+ 136 136.00000
139
+ 137 137.00000
140
+ 138 138.00000
141
+ 139 139.00000
142
+ 140 140.00000
143
+ 141 141.00000
144
+ 142 142.00000
145
+ 143 143.00000
146
+ 144 144.00000
147
+ 145 145.00000
148
+ 146 146.00000
149
+ 147 147.00000
150
+ 148 148.00000
151
+ 149 149.00000
152
+ 150 150.00000
153
+ 151 151.00000
154
+ 152 152.00000
155
+ 153 153.00000
156
+ 154 154.00000
157
+ 155 155.00000
158
+ 156 156.00000
159
+ 157 157.00000
160
+ 158 158.00000
161
+ 159 159.00000
162
+ 160 160.00000
163
+ 161 161.02799
164
+ 162 162.11214
165
+ 163 163.25276
166
+ 164 164.45013
167
+ 165 165.70456
168
+ 166 167.01633
169
+ 167 168.38575
170
+ 168 169.81310
171
+ 169 171.29868
172
+ 170 172.84278
173
+ 171 174.44571
174
+ 172 176.10775
175
+ 173 177.82920
176
+ 174 179.61036
177
+ 175 181.45151
178
+ 176 183.35296
179
+ 177 185.31499
180
+ 178 187.33791
181
+ 179 189.42200
182
+ 180 191.52283
183
+ 181 193.59401
184
+ 182 195.63295
185
+ 183 197.63706
186
+ 184 199.60372
187
+ 185 201.53033
188
+ 186 203.41431
189
+ 187 205.25304
190
+ 188 207.04393
191
+ 189 208.78438
192
+ 190 210.47179
193
+ 191 212.10355
194
+ 192 213.67706
195
+ 193 215.18974
196
+ 194 216.63897
197
+ 195 218.02216
198
+ 196 219.33670
199
+ 197 220.58000
200
+ 198 221.77282
201
+ 199 222.93894
202
+ 200 224.08026
203
+ 201 225.19868
204
+ 202 226.29610
205
+ 203 227.37442
206
+ 204 228.43555
207
+ 205 229.48138
208
+ 206 230.51382
209
+ 207 231.53478
210
+ 208 232.54614
211
+ 209 233.54982
212
+ 210 234.54772
213
+ 211 235.54173
214
+ 212 236.53376
215
+ 213 237.52572
216
+ 214 238.51950
217
+ 215 239.51700
218
+ 216 240.51700
219
+ 217 241.51700
220
+ 218 242.51700
221
+ 219 243.51700
222
+ 220 244.51700
223
+ 221 245.51700
224
+ 222 246.51700
225
+ 223 247.51700
226
+ 224 248.51700
227
+ 225 249.51700
228
+ 226 250.51700
229
+ 227 251.51700
230
+ 228 252.51700
231
+ 229 253.51700
232
+ 230 254.51700
233
+ 231 255.51700
234
+ 232 256.51700
235
+ 233 257.51700
236
+ 234 258.51700
237
+ 235 259.51700
238
+ 236 260.51700
239
+ 237 261.51700
240
+ 238 262.51700
241
+ 239 263.51700
242
+ 240 264.51700
243
+ 241 265.51700
244
+ 242 266.51700
245
+ 243 267.51700
246
+ 244 268.51700
247
+ 245 269.51700
248
+ 246 270.51700
249
+ 247 271.51700
250
+ 248 272.51700
251
+ 249 273.51700
252
+ 250 274.51700
253
+ 251 275.51700
254
+ 252 276.51700
255
+ 253 277.51700
256
+ 254 278.51700
257
+ 255 279.51700
258
+ 256 280.51700
259
+ 257 281.51700
260
+ 258 282.51700
261
+ 259 283.51700
262
+ 260 284.51700
263
+ 261 285.51700
264
+ 262 286.51700
265
+ 263 287.51700
266
+ 264 288.51700
267
+ 265 289.51700
268
+ 266 290.51700
269
+ 267 291.51700
270
+ 268 292.51700
271
+ 269 293.51700
272
+ 270 294.51700
273
+ 271 295.51700
274
+ 272 296.51700
275
+ 273 297.51700
276
+ 274 298.51700
277
+ 275 299.51700
278
+ 276 300.51700
279
+ 277 301.51700
280
+ 278 302.51700
281
+ 279 303.51700
282
+ 280 304.51700
283
+ 281 305.51700
284
+ 282 306.51700
285
+ 283 307.51700
286
+ 284 308.51700
287
+ 285 309.51700
288
+ 286 310.51700
289
+ 287 311.51700
290
+ 288 312.51700
291
+ 289 313.51700
292
+ 290 314.51700
293
+ 291 315.51700
294
+ 292 316.51700
295
+ 293 317.51700
296
+ 294 318.51700
297
+ 295 319.51700
298
+ 296 320.51700
299
+ 297 321.51700
300
+ 298 322.51700
301
+ 299 323.51700
302
+ 300 324.51700
303
+ 301 325.51700
304
+ 302 326.51700
305
+ 303 327.51700
306
+ 304 328.51700
307
+ 305 329.51700
308
+ 306 330.51700
309
+ 307 331.51700
310
+ 308 332.51700
311
+ 309 333.51700
312
+ 310 334.51700
313
+ 311 335.51700
314
+ 312 336.51700
315
+ 313 337.51700
316
+ 314 338.51700
317
+ 315 339.51700
318
+ 316 340.51700
319
+ 317 341.51700
320
+ 318 342.51700
321
+ 319 343.51700
322
+ 320 344.51700
323
+ 321 345.51700
324
+ 322 346.51700
325
+ 323 347.51700
326
+ 324 348.51700
327
+ 325 349.51700
328
+ 326 350.51700
329
+ 327 351.51700
330
+ 328 352.51700
331
+ 329 353.51700
332
+ 330 354.51700
333
+ 331 355.51700
334
+ 332 356.51700
335
+ 333 357.51700
336
+ 334 358.51700
337
+ 335 359.51700
338
+ 336 360.51700
339
+ 337 361.51700
340
+ 338 362.51700
341
+ 339 363.51700
342
+ 340 364.51700
343
+ 341 365.51700
344
+ 342 366.51700
345
+ 343 367.51700
346
+ 344 368.51700
347
+ 345 369.51700
348
+ 346 370.51700
349
+ 347 371.51700
350
+ 348 372.51700
351
+ 349 373.51700
352
+ 350 374.51700
353
+ 351 375.51700
354
+ 352 376.51700
355
+ 353 377.51700
356
+ 354 378.51700
357
+ 355 379.51700
358
+ 356 380.51700
359
+ 357 381.51700
360
+ 358 382.51700
361
+ 359 383.51700
362
+ 360 384.51700
363
+ 361 385.51700
364
+ 362 386.51700
365
+ 363 387.51700
366
+ 364 388.51700
367
+ 365 389.51700
368
+ 366 390.51700
369
+ 367 391.51700
370
+ 368 392.51700
371
+ 369 393.51700
372
+ 370 394.51700
373
+ 371 395.51700
374
+ 372 396.51700
375
+ 373 397.51700
376
+ 374 398.51700
377
+ 375 399.51700
378
+ 376 400.51700
379
+ 377 401.51700
380
+ 378 402.51700
381
+ 379 403.51700
382
+ 380 404.51700
383
+ 381 405.51700
384
+ 382 406.51700
385
+ 383 407.51700
386
+ 384 408.51700
387
+ 385 409.51700
388
+ 386 410.51700
389
+ 387 411.51700
390
+ 388 412.51700
391
+ 389 413.51700
392
+ 390 414.51700
393
+ 391 415.51700
394
+ 392 416.51700
395
+ 393 417.51700
396
+ 394 418.51700
397
+ 395 419.51700
398
+ 396 420.51700
399
+ 397 421.51700
400
+ 398 422.51700
401
+ 399 423.51700
402
+ 400 424.51700
403
+ 401 425.51700
404
+ 402 426.51700
405
+ 403 427.51700
406
+ 404 428.51700
407
+ 405 429.51700
408
+ 406 430.51700
409
+ 407 431.51700
410
+ 408 432.51700
411
+ 409 433.51700
412
+ 410 434.51700
413
+ 411 435.51700
414
+ 412 436.51700
415
+ 413 437.51700
416
+ 414 438.51700
417
+ 415 439.51700
418
+ 416 440.51700
419
+ 417 441.51700
420
+ 418 442.51700
421
+ 419 443.51700
422
+ 420 444.51700
423
+ 421 445.51700
424
+ 422 446.51700
425
+ 423 447.51700
426
+ 424 448.51700
427
+ 425 449.51700
428
+ 426 450.51700
429
+ 427 451.51700
430
+ 428 452.51700