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
@@ -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