ramekin 0.1.1 → 0.1.3

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: 999d9354b8f31a49551d78893fe986a38f9ff8ca4e2ecc880970bdde628e8ac0
4
- data.tar.gz: f3e29e81592be14e9b888de2ca731cbc285fb43763b80e2320486bbf17694434
3
+ metadata.gz: 71e89ff9027d3342649de107de02ed46c622a95a9940fe94bb0ece781ac18790
4
+ data.tar.gz: 1d3b3a89ab873ab15e55a000912791ee7c232a53d462377803fdd8f9ef80e4e8
5
5
  SHA512:
6
- metadata.gz: e4d0bba97851f3d9039710c750fbd1f2cdfb65f84d8279b628901b1e7e23990f5e7319264ba4f3dca4058bc7bc5b99b21078c8d65c0a20da06bb50cb6b740539
7
- data.tar.gz: b69597095b27d7a1bfb268729bf44c510bdcf4109a747a677f6a5f9665948a71dcaf4a4c696d976c480373b84762b699cb2aad71749dfc21f64997e231ab9d8d
6
+ metadata.gz: e716543bbac8f7ae0fa72e5504fd3fad883b283b4adc3085f0de7bb5220bf1533dac433af06527d949a8acdb46a25beffa20334cf72bbb208ff2d2408a225fd1
7
+ data.tar.gz: 1cc81d357db65d9be8e5f54677ff3117c336656e1ee40ee53183b49f7ceee9c483d05cafdd190bc783dcc65d687af098f80ee7e54378c6c48eb2d62ebbbc64b7
data/README.md CHANGED
@@ -53,9 +53,7 @@ ramekin compile -i filename.rmk [flags]
53
53
  output amk txt to this file.
54
54
  use a single dash (-) to print txt to stdout.
55
55
  --spc filename.spc
56
- attempt to invoke AddmusicK to output an SPC
57
- requires ADDMUSICK_DIR and ASAR_COMMAND
58
- to be set.
56
+ attempt to invoke AddmusicK to output an SPC.
59
57
  --play
60
58
  play the generated SPC file. will automatically
61
59
  set up an SPC player if none is detected.
@@ -67,14 +65,14 @@ ramekin compile -i filename.rmk [flags]
67
65
  (non-windows only)
68
66
  render N seconds of the file to WAV.
69
67
 
70
- ramekin package [flags]
68
+ ramekin pack [flags]
71
69
  flags:
72
70
  --update
73
- download BRR packages from SMW Central.
71
+ download BRR packs from SMW Central.
74
72
  --search [text]
75
73
  search for BRR filenames.
76
74
  --list [text]
77
- list all samples in packages matching [text].
75
+ list all samples in packs matching [text].
78
76
 
79
77
  ramekin setup [flags]
80
78
  flags:
data/gembin/ramekin CHANGED
@@ -10,6 +10,11 @@ RAMEKIN_ASAR_DIR = './asar'
10
10
  RAMEKIN_SPC_PLAYER = '__auto__'
11
11
  RAMEKIN_VERSION = Gem.loaded_specs['ramekin'].version.to_s
12
12
 
13
+ if ENV['RAMEKIN_DEBUG'] == '1'
14
+ require 'pry'
15
+ require 'pry-stack_explorer'
16
+ end
17
+
13
18
  require_relative '../lib/ramekin'
14
19
  require_relative '../lib/ramekin/cli'
15
20
 
@@ -49,7 +49,7 @@ module Ramekin
49
49
  ln("#@amk_path/samples/optimized", "#@workdir/samples/optimized")
50
50
  ln("#@amk_path/samples/EMPTY.brr", "#@workdir/samples/EMPTY.brr")
51
51
  if @meta.instruments.any?
52
- sample_dir = "#@workdir/samples/#{basename}"
52
+ sample_dir = "#@workdir/samples/#{@meta.sample_path || basename}"
53
53
  FileUtils.mkdir_p(sample_dir)
54
54
 
55
55
  @meta.instruments.each do |inst|
@@ -80,9 +80,11 @@ module Ramekin
80
80
  FileUtils.cp("#@workdir/Visualizations/#{basename}.png", "./#{basename}.png")
81
81
  File.write("./#{basename}.txt", @txt)
82
82
 
83
- FileUtils.mkdir_p("samples/#{basename}")
84
- @meta.instruments.each do |inst|
85
- FileUtils.cp(inst.sample_path, "./samples/#{basename}/#{inst.sample_name}")
83
+ if @meta.instruments.any?
84
+ FileUtils.mkdir_p("samples/#{basename}")
85
+ @meta.instruments.each do |inst|
86
+ FileUtils.cp(inst.sample_path, "./samples/#{basename}/#{inst.sample_name}")
87
+ end
86
88
  end
87
89
 
88
90
  packs = @meta.instruments.map(&:pack).uniq
@@ -1,11 +1,12 @@
1
1
  module Ramekin
2
2
  class ChannelSeparator
3
- def self.parse(stream)
4
- new.tap { |x| x.parse(stream) }
3
+ def self.parse(stream, *a)
4
+ new(*a).tap { |x| x.parse(stream) }
5
5
  end
6
6
 
7
7
  attr_reader :preamble, :channels, :meta
8
- def initialize
8
+ def initialize(sample_path=nil)
9
+ @sample_path = sample_path
9
10
  @preamble = []
10
11
  @channels = []
11
12
 
@@ -19,7 +20,7 @@ module Ramekin
19
20
  def parse(stream)
20
21
  stream.each do |el|
21
22
  if Token === el && el.type == :channel
22
- @meta = Meta.new(@preamble.dup).tap(&:parse) if preamble?
23
+ @meta = Meta.new(@preamble.dup, @sample_path).tap(&:parse) if preamble?
23
24
  @meta.parse
24
25
 
25
26
  @current = (@channels[el.value.to_i] ||= [])
data/lib/ramekin/cli.rb CHANGED
@@ -32,9 +32,7 @@ module Ramekin
32
32
  $stderr.puts " output amk txt to this file."
33
33
  $stderr.puts " use a single dash (-) to print txt to stdout."
34
34
  $stderr.puts " --spc filename.spc"
35
- $stderr.puts " attempt to invoke AddmusicK to output an SPC"
36
- $stderr.puts " requires ADDMUSICK_DIR and ASAR_COMMAND"
37
- $stderr.puts " to be set."
35
+ $stderr.puts " attempt to invoke AddmusicK to output an SPC."
38
36
  $stderr.puts " --play"
39
37
  $stderr.puts " play the generated SPC file. will automatically"
40
38
  $stderr.puts " set up an SPC player if none is detected."
@@ -54,13 +52,14 @@ module Ramekin
54
52
  end
55
53
  $stderr.puts ""
56
54
  $stderr.puts "ramekin package [flags]"
55
+ $stderr.puts "ramekin pack [flags]"
57
56
  $stderr.puts " flags:"
58
57
  $stderr.puts " --update"
59
- $stderr.puts " download BRR packages from SMW Central."
58
+ $stderr.puts " download BRR packs from SMW Central."
60
59
  $stderr.puts " --search [text]"
61
60
  $stderr.puts " search for BRR filenames."
62
61
  $stderr.puts " --list [text]"
63
- $stderr.puts " list all samples in packages matching [text]."
62
+ $stderr.puts " list all samples in packs matching [text]."
64
63
  $stderr.puts ""
65
64
  $stderr.puts "ramekin setup [flags]"
66
65
  $stderr.puts " flags:"
@@ -107,6 +106,8 @@ module Ramekin
107
106
  when '--help', '-help', '-h', '-?'
108
107
  usage
109
108
  return 0
109
+ when '--sample-path'
110
+ @sample_path = argv.shift or usage! 'missing path for --sample-path'
110
111
  when '--txt'
111
112
  @output_txt = argv.shift or usage! 'missing filename after --txt'
112
113
  when '--spc'
@@ -170,7 +171,7 @@ module Ramekin
170
171
 
171
172
  expanded = outer_chain.call(tokens)
172
173
 
173
- channels = ChannelSeparator.parse(expanded)
174
+ channels = ChannelSeparator.parse(expanded, @sample_path)
174
175
 
175
176
  inner_chain = Processor.compose(
176
177
  NoteAggregator,
@@ -367,7 +368,7 @@ module Ramekin
367
368
  case argv[0]
368
369
  when 'compile'
369
370
  compile(*argv[1..])
370
- when 'package'
371
+ when 'package', 'pack'
371
372
  package(*argv[1..])
372
373
  when 'setup'
373
374
  setup(*argv[1..])
@@ -29,13 +29,19 @@ module Ramekin
29
29
 
30
30
  class LegatoLastNote < NoteWrapper
31
31
  def ticks
32
- @note.ticks / 2
32
+ @note.ticks
33
33
  end
34
34
 
35
35
  def to_amk(current_octave=nil, divisor=1)
36
- post_ticks = @note.ticks - ticks
36
+ post_ticks = @note.ticks - divisor
37
+ if post_ticks <= 0 || post_ticks % divisor != 0
38
+ return error! "too fast for legato: must have at least #{divisor*2} ticks at this bpm.", el: self
39
+ end
40
+
41
+ post_ticks /= divisor
42
+
37
43
  post_len = KNOWN_LENGTHS.fetch(post_ticks) { "=#{post_ticks}" }
38
- "#{octave_amk(current_octave)}#{note_name}#{length_amk(divisor)}$f4$01^#{post_len}"
44
+ "#{octave_amk(current_octave)}#{note_name}=1$f4$01^#{post_len}"
39
45
  end
40
46
 
41
47
  def inspect
data/lib/ramekin/meta.rb CHANGED
@@ -14,10 +14,12 @@ module Ramekin
14
14
  attr_reader :volume
15
15
  attr_reader :tempo
16
16
  attr_reader :echo
17
- def initialize(elements)
17
+ attr_reader :sample_path
18
+ def initialize(elements, sample_path=nil)
18
19
  @elements = elements
19
20
  @instruments = []
20
21
  @sample_groups = []
22
+ @sample_path = sample_path
21
23
  @options = {}
22
24
  end
23
25
 
@@ -298,7 +300,7 @@ module Ramekin
298
300
 
299
301
  def pack_hexes
300
302
  # TODO: alts
301
- @pack_hexes ||= @pack.tunings_for(sample_name).first
303
+ @pack_hexes ||= @pack.tunings_for(@path.value).first
302
304
  end
303
305
 
304
306
  def pack_gain
@@ -57,15 +57,19 @@ module Ramekin
57
57
  end
58
58
  end
59
59
 
60
- def length_amk(div)
61
- if ticks % div != 0
60
+ def check_length!(t, div)
61
+ if t % div != 0
62
62
  divisible = div == 2 ? 'even' : "divisible by #{div}"
63
63
  error!("too fast! tick count must be #{divisible} at this tempo", el: self)
64
64
  end
65
+ end
66
+
67
+ def length_amk(div)
68
+ check_length!(ticks, div)
65
69
 
66
70
  t = ticks / div
67
71
  # we use l16
68
- return '' if t == 12
72
+ # return '' if t == 12
69
73
  KNOWN_LENGTHS.fetch(t) { "=#{t}" }
70
74
  end
71
75
 
@@ -77,7 +77,7 @@ module Ramekin
77
77
  yield "#amk #{@track.meta.amk&.value || 2}\n\n"
78
78
 
79
79
  if m.instruments.any?
80
- yield "#path #{@filename.chomp('.rmk').inspect}\n"
80
+ yield "#path #{(m.sample_path || @filename.chomp('.rmk')).inspect}\n"
81
81
  yield "#samples {\n"
82
82
  if m.sample_groups.empty?
83
83
  yield " #default"
@@ -239,6 +239,8 @@ module Ramekin
239
239
  else
240
240
  yield "p#{token.value} "
241
241
  end
242
+ when :n
243
+ yield "n#{token.value}"
242
244
  when :superloop
243
245
  yield " [[ "
244
246
  when :loop
@@ -295,13 +297,7 @@ module Ramekin
295
297
 
296
298
  ticks = sprintf("%02x", note.ticks)
297
299
  yield "$dd$#{ticks}$#{ticks}#{note.octave_amk}#{note.note.value}"
298
-
299
- case peek
300
- when NoteEvent
301
- peek.extensions.concat(note.extensions)
302
- else
303
- yield "^=#{note.ticks}"
304
- end
300
+ yield "^=#{note.ticks}"
305
301
 
306
302
  @octave = note.octave
307
303
  when 'legato'
@@ -272,6 +272,7 @@ module Ramekin
272
272
  return
273
273
  end
274
274
 
275
+ $stderr.puts "downloading: #{name}:#{id}"
275
276
  download!
276
277
  end
277
278
 
@@ -258,7 +258,7 @@ module Ramekin
258
258
  return [:l, m(1)] if match /l(\d+)/
259
259
  return [:amp] if match /[&]/
260
260
  return [:q, m(1)] if match /q(\d(?:,\h)?)/
261
- return [:n, m(1)] if match /n(\h\h?)/
261
+ return [:n, m(1)] if match /n(\h\h)/
262
262
 
263
263
  error! "unknown token near: #{@scanner.peek(10)}", el: @last_token
264
264
 
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.1.1
4
+ version: 0.1.3
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-28 00:00:00.000000000 Z
11
+ date: 2025-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: strscan