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
@@ -0,0 +1,23 @@
1
+ # Writes out a framecurve setup
2
+ class FlameChannelParser::FramecurveWriters::Kronos < FlameChannelParser::FramecurveWriters::SoftfxTimewarp
3
+ TOKEN = Regexp.new('__INSERT_FRAME_ANIM__')
4
+ TEMPLATE = File.dirname(__FILE__) + "/templates/SampleKronos.F_Kronos"
5
+
6
+ def self.extension
7
+ '.F_Kronos'
8
+ end
9
+
10
+ def run_export(io)
11
+ buf = StringIO.new
12
+ w = FlameChannelParser::Builder.new(buf)
13
+ w.channel("Frame") do | c |
14
+ writer = KeyWriter.new
15
+ yield(writer)
16
+ write_animation(writer.keys, c, :linear)
17
+ end
18
+
19
+ # Entab everything
20
+ template = File.read(TEMPLATE)
21
+ io.write(template.gsub(TOKEN, buf.string))
22
+ end
23
+ end
@@ -0,0 +1,82 @@
1
+ # Writes out a framecurve setup
2
+ class FlameChannelParser::FramecurveWriters::SoftfxTimewarp < FlameChannelParser::FramecurveWriters::Base
3
+ DATETIME_FORMAT = '%a %b %d %H:%M:%S %Y'
4
+ TIME = Time.local(2011,12,28,14,50,05)
5
+
6
+ def self.extension
7
+ '.timewarp'
8
+ end
9
+
10
+ def run_export(io)
11
+ w = FlameChannelParser::Builder.new(io)
12
+
13
+ w.timewarp_file_version "1.0"
14
+ w.creation_date(TIME.strftime(DATETIME_FORMAT))
15
+ w.linebreak(2)
16
+ w.fields 0
17
+ w.origin 1
18
+ w.render_type false
19
+ w.sampling_step 0
20
+ w.interpolation 0
21
+ w.flow_quality 0
22
+ w.linebreak!(2)
23
+
24
+ # Accumulate all the keys
25
+ writer = KeyWriter.new
26
+ yield(writer)
27
+ speeds = generate_speed(writer.keys)
28
+
29
+ # Compute intermediate frames and speeds
30
+ w.animation do | anim |
31
+ anim.channel("Speed") do | speed |
32
+ write_animation(speeds, speed, :constant)
33
+ end
34
+ anim.channel("Timing/Timing") do | c |
35
+ write_animation(writer.keys, c, :linear)
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ private
42
+
43
+ def write_animation(tuples, writer, interp = :linear)
44
+ writer.value tuples[0][1]
45
+ writer.extrapolation :constant
46
+ writer.key_version 1
47
+ writer.size tuples.length
48
+ tuples.each_with_index do | tuple, i |
49
+ at, value = tuple
50
+ writer.key(i) do | k |
51
+ k.frame at
52
+ k.value value.to_f
53
+ k.interpolation interp
54
+ k.left_slope 2.4
55
+ k.right_slope 2.4
56
+ end
57
+ end
58
+ end
59
+
60
+ def get_percentage(key, next_key)
61
+ delta_y = next_key[1] - key[1]
62
+ delta_t = next_key[0] - key[0]
63
+ one_frame_differential = delta_y.to_f / delta_t
64
+ percentage = one_frame_differential * 100
65
+ end
66
+
67
+ # Tricky bitch
68
+ def generate_speed(keys)
69
+ speeds = []
70
+ keys.each_with_index do | key, idx |
71
+ next_key = keys[idx + 1]
72
+ percentage = if next_key.nil? # Last frame here!
73
+ 0.0
74
+ else
75
+ get_percentage(key, next_key)
76
+ end
77
+ speeds.push([key[0], percentage])
78
+ end
79
+
80
+ speeds
81
+ end
82
+ end
@@ -0,0 +1,118 @@
1
+ <?xml version="1.0"?>
2
+ <Setup>
3
+ <Base>
4
+ <Version>7.130000</Version>
5
+ <NAME>timewarp3</NAME>
6
+ <Note/>
7
+ <Expanded>False</Expanded>
8
+ <ScrollBar>0</ScrollBar>
9
+ <Frames>0</Frames>
10
+ <Current_Time>82</Current_Time>
11
+ <Input_DataType>3</Input_DataType>
12
+ <ClampMode>0</ClampMode>
13
+ <AdapDegrad>False</AdapDegrad>
14
+ </Base>
15
+ <State>
16
+ <TW_FlowQuality>4</TW_FlowQuality>
17
+ <TW_DoBlur>False</TW_DoBlur>
18
+ <TW_BlurPhase>0</TW_BlurPhase>
19
+ <TW_DoBlurReference>False</TW_DoBlurReference>
20
+ <TW_BlurRefColor>
21
+ <R>1.000000</R>
22
+ <G>0.000000</G>
23
+ <B>0.000000</B>
24
+ <A>1.000000</A>
25
+ </TW_BlurRefColor>
26
+ <TW_FrameMode>0</TW_FrameMode>
27
+ <TW_SamplingMode>0</TW_SamplingMode>
28
+ <TW_StartFrameIn>$start_frame</TW_StartFrameIn>
29
+ <TW_EndFrameIn>$last_frame</TW_EndFrameIn>
30
+ <TW_RenderMode>0</TW_RenderMode>
31
+ <TW_ReverseCurves>False</TW_ReverseCurves>
32
+ <TW_HeadMode>0</TW_HeadMode>
33
+ <TW_TailMode>0</TW_TailMode>
34
+ <TW_Regen>False</TW_Regen>
35
+ <TW_RetimerMode>1</TW_RetimerMode>
36
+ <TW_ReferencePointX>
37
+ <Channel Name="X"/>
38
+ </TW_ReferencePointX>
39
+ <TW_ReferencePointY>
40
+ <Channel Name="Y"/>
41
+ </TW_ReferencePointY>
42
+ <TW_Speed>
43
+ <Channel Name="Speed">
44
+ <Extrap>constant</Extrap>
45
+ <Value>100</Value>
46
+ <Size>1</Size>
47
+ <KeyVersion>2.000000</KeyVersion>
48
+ <KFrames>
49
+ <Key Index="0">
50
+ <Frame>1.000000</Frame>
51
+ <Value>100</Value>
52
+ <RHandleX>1.297667</RHandleX>
53
+ <RHandleY>100.000000</RHandleY>
54
+ <LHandleX>0.750000</LHandleX>
55
+ <LHandleY>100.000000</LHandleY>
56
+ <CurveMode>hermite</CurveMode>
57
+ <CurveOrder>linear</CurveOrder>
58
+ </Key>
59
+ </KFrames>
60
+ </Channel>
61
+ </TW_Speed>
62
+ <TW_SpeedTiming>
63
+ <Channel Name="SpeedTiming">
64
+ <Extrap>linear</Extrap>
65
+ <Value>1</Value>
66
+ <KeyVersion>2.000000</KeyVersion>
67
+ <Size>1</Size>
68
+ <KFrames>
69
+ <Key Index="0">
70
+ <Frame>1.000000</Frame>
71
+ <Value>1</Value>
72
+ <RHandleX>1.250000</RHandleX>
73
+ <RHandleY>1.250000</RHandleY>
74
+ <LHandleX>0.750000</LHandleX>
75
+ <LHandleY>0.750000</LHandleY>
76
+ <CurveMode>hermite</CurveMode>
77
+ <CurveOrder>quadratic</CurveOrder>
78
+ <RAutoSlope>False</RAutoSlope>
79
+ <LAutoSlope>False</LAutoSlope>
80
+ <TangentMode>manual</TangentMode>
81
+ </Key>
82
+ </KFrames>
83
+ </Channel>
84
+ </TW_SpeedTiming>
85
+ <TW_Timing>
86
+ <Channel Name="Timing">
87
+ <Extrap>linear</Extrap>
88
+ <Value>$first_value</Value>
89
+ <Size>$key_size</Size>
90
+ <KeyVersion>2.000000</KeyVersion>
91
+ <KFrames>
92
+ $keys
93
+ </KFrames>
94
+ </Channel>
95
+ </TW_Timing>
96
+ <TW_BlurSamplesChannel>
97
+ <Channel Name="Samples"/>
98
+ </TW_BlurSamplesChannel>
99
+ <TW_BlurShutterChannel>
100
+ <Channel Name="Shutter"/>
101
+ </TW_BlurShutterChannel>
102
+ <TW_Mix>
103
+ <Channel Name="MixAmount"/>
104
+ </TW_Mix>
105
+ <TW_PreTrail>
106
+ <Channel Name="Pre"/>
107
+ </TW_PreTrail>
108
+ <TW_PreWeight>
109
+ <Channel Name="Pre"/>
110
+ </TW_PreWeight>
111
+ <TW_PostTrail>
112
+ <Channel Name="Post"/>
113
+ </TW_PostTrail>
114
+ <TW_PostWeight>
115
+ <Channel Name="Post"/>
116
+ </TW_PostWeight>
117
+ </State>
118
+ </Setup>
@@ -0,0 +1,376 @@
1
+ SparkFileVersion 1
2
+ CreationDate Wed Dec 28 08:33:32 2011
3
+
4
+
5
+ Name /usr/discreet/sparks/Furnace3.1v1/F_Kronos.spark_x86_64.setup
6
+ frameHeight 576
7
+ frameWidth 720
8
+ BeginSetupCtrls
9
+ SPARK_OFF
10
+
11
+ SPARK_OFF
12
+
13
+ SPARK_OFF
14
+
15
+ SPARK_OFF
16
+
17
+ SPARK_OFF
18
+
19
+ SPARK_OFF
20
+
21
+ SPARK_OFF
22
+
23
+ SPARK_OFF
24
+
25
+ SPARK_OFF
26
+
27
+ SPARK_OFF
28
+
29
+ SPARK_OFF
30
+
31
+ SPARK_OFF
32
+
33
+ SPARK_OFF
34
+
35
+ SPARK_OFF
36
+
37
+ SPARK_OFF
38
+
39
+ SPARK_OFF
40
+
41
+ SPARK_OFF
42
+
43
+ SPARK_OFF
44
+
45
+ SPARK_OFF
46
+
47
+ SPARK_OFF
48
+
49
+ SPARK_OFF
50
+
51
+ SPARK_OFF
52
+
53
+ EndSetupCtrls
54
+ SPARK_OFF
55
+
56
+ SPARK_STRING <null>
57
+ SPARK_STRING <null>
58
+ SPARK_STRING <null>
59
+ SPARK_OFF
60
+
61
+ SPARK_STRING <null>
62
+ SPARK_PUP 1
63
+ SPARK_FLOAT 50
64
+ SPARK_FLOAT 1
65
+ SPARK_CHANNEL 8
66
+ __INSERT_FRAME_ANIM__
67
+ Uncollapsed
68
+ End
69
+ SPARK_FLOAT 20
70
+ SPARK_FLOAT 500
71
+ SPARK_FLOAT 500
72
+ SPARK_INT 5
73
+ SPARK_PUP 0
74
+ SPARK_BOOL 0
75
+ SPARK_BOOL 0
76
+ SPARK_BOOL 0
77
+ SPARK_FLOAT 1
78
+ SPARK_INT 6
79
+ SPARK_PUP 1
80
+ SPARK_FLOAT 0
81
+ SPARK_INT 1
82
+ SPARK_BOOL 0
83
+ SPARK_OFF
84
+
85
+ SPARK_OFF
86
+
87
+ SPARK_PUP 0
88
+ SPARK_PUP 2
89
+ SPARK_FLOAT 29.8899994
90
+ SPARK_FLOAT 58.6599998
91
+ SPARK_FLOAT 11.4399996
92
+ SPARK_OFF
93
+
94
+ SPARK_OFF
95
+
96
+ SPARK_PUP 2
97
+ SPARK_PUP 0
98
+ SPARK_PUP 3
99
+ SPARK_FLOAT 0
100
+ SPARK_FLOAT 100
101
+ SPARK_FLOAT 100
102
+ SPARK_FLOAT 0
103
+ SPARK_OFF
104
+
105
+ SPARK_OFF
106
+
107
+ SPARK_OFF
108
+
109
+ SPARK_FLOAT 0
110
+ SPARK_FLOAT 100
111
+ SPARK_FLOAT 100
112
+ SPARK_FLOAT 0
113
+ SPARK_OFF
114
+
115
+ SPARK_OFF
116
+
117
+ SPARK_OFF
118
+
119
+ SPARK_FLOAT 0
120
+ SPARK_FLOAT 100
121
+ SPARK_FLOAT 100
122
+ SPARK_FLOAT 0
123
+ SPARK_OFF
124
+
125
+ SPARK_OFF
126
+
127
+ SPARK_OFF
128
+
129
+ SPARK_OFF
130
+
131
+ SPARK_OFF
132
+
133
+ SPARK_OFF
134
+
135
+ SPARK_OFF
136
+
137
+ SPARK_OFF
138
+
139
+ SPARK_OFF
140
+
141
+ SPARK_PUP 0
142
+ SPARK_PUP 3
143
+ SPARK_PUP 1
144
+ SPARK_OFF
145
+
146
+ SPARK_INT 28
147
+ SPARK_INT 1
148
+ SPARK_OFF
149
+
150
+ SPARK_OFF
151
+
152
+ SPARK_OFF
153
+
154
+ SPARK_OFF
155
+
156
+ SPARK_OFF
157
+
158
+ SPARK_OFF
159
+
160
+ SPARK_OFF
161
+
162
+ SPARK_OFF
163
+
164
+ SPARK_OFF
165
+
166
+ SPARK_OFF
167
+
168
+ SPARK_OFF
169
+
170
+ SPARK_OFF
171
+
172
+ SPARK_OFF
173
+
174
+ SPARK_OFF
175
+
176
+ SPARK_OFF
177
+
178
+ SPARK_OFF
179
+
180
+ SPARK_OFF
181
+
182
+ SPARK_OFF
183
+
184
+ SPARK_OFF
185
+
186
+ SPARK_OFF
187
+
188
+ SPARK_OFF
189
+
190
+ SPARK_OFF
191
+
192
+ SPARK_OFF
193
+
194
+ SPARK_PUP 0
195
+ SPARK_PUP 3
196
+ SPARK_OFF
197
+
198
+ SPARK_OFF
199
+
200
+ SPARK_OFF
201
+
202
+ SPARK_OFF
203
+
204
+ SPARK_OFF
205
+
206
+ SPARK_OFF
207
+
208
+ SPARK_OFF
209
+
210
+ SPARK_OFF
211
+
212
+ SPARK_OFF
213
+
214
+ SPARK_OFF
215
+
216
+ SPARK_OFF
217
+
218
+ SPARK_OFF
219
+
220
+ SPARK_OFF
221
+
222
+ SPARK_OFF
223
+
224
+ SPARK_OFF
225
+
226
+ SPARK_OFF
227
+
228
+ SPARK_OFF
229
+
230
+ SPARK_OFF
231
+
232
+ SPARK_OFF
233
+
234
+ SPARK_OFF
235
+
236
+ SPARK_OFF
237
+
238
+ SPARK_OFF
239
+
240
+ SPARK_OFF
241
+
242
+ SPARK_OFF
243
+
244
+ SPARK_OFF
245
+
246
+ SPARK_OFF
247
+
248
+ SPARK_OFF
249
+
250
+ SPARK_OFF
251
+
252
+ SPARK_OFF
253
+
254
+ SPARK_OFF
255
+ SPARK_OFF
256
+ SPARK_OFF
257
+ SPARK_OFF
258
+ SPARK_OFF
259
+ SPARK_OFF
260
+ SPARK_CE_FLOAT 0
261
+ SPARK_CE_FLOAT 0
262
+ SPARK_CE_FLOAT 0
263
+ SPARK_CE_FLOAT 0
264
+ SPARK_CE_FLOAT 0
265
+ SPARK_CE_FLOAT 0
266
+ SPARK_CE_FLOAT 0
267
+ SPARK_CE_FLOAT 0
268
+ SPARK_CE_FLOAT 0
269
+ SPARK_OFF
270
+ SPARK_OFF
271
+ SPARK_OFF
272
+ SPARK_CE_INT 1
273
+ SPARK_OFF
274
+ SPARK_OFF
275
+ SPARK_OFF
276
+ SPARK_OFF
277
+ SPARK_OFF
278
+ SPARK_OFF
279
+ SPARK_OFF
280
+ SPARK_OFF
281
+ SPARK_OFF
282
+ SPARK_OFF
283
+ SPARK_OFF
284
+ SPARK_OFF
285
+ SPARK_OFF
286
+ SPARK_OFF
287
+ SPARK_OFF
288
+ SPARK_OFF
289
+ SPARK_OFF
290
+ SPARK_OFF
291
+ SPARK_OFF
292
+ SPARK_OFF
293
+ SPARK_OFF
294
+ SPARK_OFF
295
+ SPARK_OFF
296
+ SPARK_OFF
297
+ SPARK_OFF
298
+ SPARK_OFF
299
+ SPARK_OFF
300
+ SPARK_OFF
301
+ SPARK_OFF
302
+ SPARK_OFF
303
+ SPARK_OFF
304
+ SPARK_OFF
305
+ SPARK_OFF
306
+ SPARK_OFF
307
+ SPARK_OFF
308
+ SPARK_OFF
309
+ SPARK_OFF
310
+ SPARK_OFF
311
+ SPARK_OFF
312
+ SPARK_OFF
313
+ SPARK_OFF
314
+ SPARK_OFF
315
+ SPARK_OFF
316
+ SPARK_OFF
317
+ SPARK_OFF
318
+ SPARK_OFF
319
+ SPARK_OFF
320
+ SPARK_OFF
321
+ SPARK_OFF
322
+ SPARK_OFF
323
+ SPARK_OFF
324
+ SPARK_OFF
325
+ SPARK_OFF
326
+ SPARK_OFF
327
+ SPARK_OFF
328
+ SPARK_OFF
329
+ SPARK_OFF
330
+ SPARK_OFF
331
+ SPARK_OFF
332
+ SPARK_OFF
333
+ SPARK_OFF
334
+ SPARK_OFF
335
+ SPARK_OFF
336
+ SPARK_OFF
337
+ SPARK_OFF
338
+ SPARK_OFF
339
+ SPARK_OFF
340
+ SPARK_OFF
341
+ SPARK_OFF
342
+ SPARK_OFF
343
+ SPARK_OFF
344
+ SPARK_OFF
345
+ SPARK_OFF
346
+ SPARK_OFF
347
+ SPARK_OFF
348
+ SPARK_OFF
349
+ SPARK_OFF
350
+ SPARK_OFF
351
+ SPARK_OFF
352
+ SPARK_OFF
353
+ SPARK_OFF
354
+ SPARK_OFF
355
+ SPARK_OFF
356
+ SPARK_OFF
357
+ SPARK_OFF
358
+ SPARK_OFF
359
+ SPARK_OFF
360
+ SPARK_OFF
361
+ SPARK_OFF
362
+ SPARK_OFF
363
+ SPARK_OFF
364
+ SPARK_OFF
365
+ SPARK_OFF
366
+ SPARK_OFF
367
+ SPARK_OFF
368
+ SPARK_OFF
369
+ SPARK_OFF
370
+ SPARK_OFF
371
+ SPARK_OFF
372
+ SPARK_OFF
373
+ SPARK_OFF
374
+ SPARK_OFF
375
+ SPARK_OFF
376
+ End