ramekin 0.0.9 → 0.0.10

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