ramekin 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1454704618e8123c1ade7251f1a30cc66b2f2febacd10e1e8f438e4b3fe3023c
4
- data.tar.gz: 82453a74e36685f30e7637092fc47d242a63b609c7e4b1f586b17fafae05289f
3
+ metadata.gz: e6d502b095f92786dc1c94da24e1144d744f8462f609a1d7623a9c46a541b5f9
4
+ data.tar.gz: 2de364d731e7760f8dc1111d18aad6b4de5a5b713e5d3ec424af3c80f180ec52
5
5
  SHA512:
6
- metadata.gz: f33e028002e58ad86ae808bcc4a0a77b9c8b324e3a47f652bf20dcf1bc4a83381f13e23e3ec980f5350cad8686f13097f1996e08c3de798614e4092ca55a8cbf
7
- data.tar.gz: 4df89465d887a660c7353a6e4b16e3817603efd861c60315c39ca531026af27b5a72bf0a7b32aa73328f9b0160f3f7f5aa868a2de9fbe6bf493bb4f1cc345aff
6
+ metadata.gz: 0a1aed7dde26850dd627da1ac9e0b7445d41097128dcae4ba464afc7c0868e7905f8adb2b395bfc93aa3d9ea28e7739cb2e5bb36fdf6de679726d938913de179
7
+ data.tar.gz: 6402af26f0cbd457a8246121eefcfe976a5331925ed97849520fec05faafbdf47c8124a95bdb398a38115dcb6a6dce2fd7ff0bac6e1678787d433e4e7cfcc247
data/lib/ramekin/meta.rb CHANGED
@@ -282,7 +282,7 @@ module Ramekin
282
282
 
283
283
  def ext_gain
284
284
  gain = @extensions.select { |e| e.type == :gain }.last
285
- gain && gain.value
285
+ gain && to_hex(gain.value.to_i(16))
286
286
  end
287
287
 
288
288
  def gain
@@ -299,7 +299,13 @@ module Ramekin
299
299
  adsr1 = ((7 - d)*16 | 0x80) + (15 - a)
300
300
  adsr2 = (s*32 + (31-r))
301
301
 
302
- [adsr1.to_s(16), adsr2.to_s(16), g, t1, t2]
302
+ [to_hex(adsr1), to_hex(adsr2), g, t1, t2]
303
+ end
304
+
305
+ def to_hex(x)
306
+ return x if x.is_a?(String)
307
+
308
+ sprintf("%02x", x)
303
309
  end
304
310
 
305
311
  def to_amk
@@ -58,7 +58,7 @@ module Ramekin
58
58
 
59
59
  render_preamble(&b)
60
60
 
61
- @track.channels.each { |c| render_channel(c, &b) }
61
+ @track.channels.compact.each { |c| render_channel(c, &b) }
62
62
  end
63
63
 
64
64
  def render_preamble(&b)
@@ -188,13 +188,25 @@ module Ramekin
188
188
  end
189
189
  when :v
190
190
  vol, time = token.values.compact.map(&:to_i)
191
- yield velocity_command(vol, time)
191
+
192
+ unless Token === peek && [:v, :relv].include?(peek.type)
193
+ yield velocity_command(vol, time)
194
+ end
195
+
192
196
  @volume = vol
193
197
  when :relv
194
198
  relvol, duration = token.values
195
- yield velocity_command(@volume + relvol.to_i, duration)
199
+
200
+ unless Token === peek && [:v, :relv].include?(peek.type)
201
+ yield velocity_command(@volume + relvol.to_i, duration)
202
+ end
196
203
  when :q
197
- yield "q#{token.value}"
204
+ token.value =~ /(\d),?(\h)?/
205
+ qval = $1
206
+ gain = $2 || 'F'
207
+ yield "q#{qval}#{gain}"
208
+ when :w
209
+ yield "w#{token.value}"
198
210
  when :adsr
199
211
  vals = token.value.split(',').map { |x| x.to_i(16) }
200
212
  error! 'invalid #adsr, expected 4 arguments' unless vals.size == 4
@@ -228,7 +228,6 @@ module Ramekin
228
228
  return [:instrument, m(1)] if match /@(\w+)/
229
229
  return [:hex, m(1)] if match /[$](\h\h)/
230
230
  return [:t, m(1)] if match /t(\d+)/
231
- return [:q, m(1)] if match /q(\d\h?)/
232
231
 
233
232
  return note(:note, m) if match /[abcdefg][+-]?/
234
233
  return note(:r) if match /r/
@@ -258,7 +257,7 @@ module Ramekin
258
257
  return [:w, m(1)] if match /w(\d+)/
259
258
  return [:l, m(1)] if match /l(\d+)/
260
259
  return [:amp] if match /[&]/
261
- return [:q, m(1)] if match /q(\h\h)/
260
+ return [:q, m(1)] if match /q(\d(?:,\h)?)/
262
261
  return [:n, m(1)] if match /n(\h\h?)/
263
262
 
264
263
  error! "unknown token near: #{@scanner.peek(10)}", el: @last_token
data/lib/ramekin/util.rb CHANGED
@@ -44,11 +44,24 @@ module Ramekin
44
44
  env = {}
45
45
  kw.each { |k, v| env[k.to_s] = v }
46
46
 
47
+ $stderr.puts "run: #{a.map(&method(:shell_inspect)).join(' ')}"
47
48
  system(env, *a.map(&:to_s))
48
49
  rescue Interrupt
49
50
  # allow interrupt out of the subprocess but capture it for ramekin itself
50
51
  end
51
52
 
53
+ # for diagnostic purposes only, not a real escape system.
54
+ # our shellouts don't need escapes since they are not actually
55
+ # interpreted by a shell.
56
+ def shell_inspect(s)
57
+ s = s.to_s
58
+ if s =~ /[\s'"&*]/
59
+ s.inspect
60
+ else
61
+ s
62
+ end
63
+ end
64
+
52
65
  def executable?(path)
53
66
  stat = File.stat(path)
54
67
  stat.file? && stat.executable?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ramekin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - jneen
8
8
  autorequire:
9
9
  bindir: gembin
10
10
  cert_chain: []
11
- date: 2025-02-18 00:00:00.000000000 Z
11
+ date: 2025-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: strscan