flame_channel_parser 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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