picotune 0.0.3 → 0.0.4

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/picotune.rb +18 -6
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f44e2be4c9ca5912ade8b1a2fc671fb2db219b9b49e4f2230fb4a8d6c28f47bd
4
- data.tar.gz: 867c8d74c717daf05c2af573844f7bc7d455f2f1bb2cd1cac05c67f1869be13e
3
+ metadata.gz: a35c7146e96a70bdf13083331db163fda9137e6cd10baac06e0fd6ef517de77e
4
+ data.tar.gz: acd8d878432d7770e168aa0307b5d3496c502f22593ad2df5e2dcac651d91b94
5
5
  SHA512:
6
- metadata.gz: c7ca9b3f10545cb1fa0a850bc615ae53e600be99b5eacf6bae966d75292525ff9d44501b7ef6ad8f035ce6684685bfcfafa124d69d29ab70f0afb4694c1e4eb0
7
- data.tar.gz: c2313de52696a143dd00002f82a8ca96be25b7b28b79389f2ea5b7cb9bcaf79077fd15a3cdb374df55e6fab5fc3ca26e41e0ad6aebd4afb5e62062b0d781ded2
6
+ metadata.gz: 7607d472022133602b24139e9508d9bd68b4066994f445386faf2dac2272e132d5df6601423dbb0f292c10170f75f72650ed4ba38711c63d83e11e246c182efe
7
+ data.tar.gz: 4e5dbb38360c7f2db24cc0f7801a8973b79d4448cc72565913b4fd52d147514973c4ea3a2f1781602373d8d51d2e3b8d22211243b3996d2c3fa944c2a1e51657
data/lib/picotune.rb CHANGED
@@ -221,10 +221,14 @@ class PicoTune::Phrase
221
221
 
222
222
  @melodies.each do |melody|
223
223
  temp = Array.new(buffer_size) { PicoTune::Sample.new } if melody.instrument.reverb?
224
- sub_buffer_size = buffer_size / (@beats * @subbeats)
224
+ sub_buffer_size = (buffer_size.to_f / (@beats * @subbeats)).ceil
225
225
  last_step_number = -1
226
226
  carry_over = 0
227
227
 
228
+ if melody.pattern.steps.count != @beats * @subbeats
229
+ raise "Mismatch between Pattern \"#{melody.pattern.name}\", which has #{melody.pattern.steps.count} steps, and Phrase \"#{@name}\", which has #{@beats} beats and #{subbeats} subbeats (meaning any pattern it uses should have #{@beats * @subbeats} steps). Please check your pattern and phrase definitions to find the discrepancy!"
230
+ end
231
+
228
232
  melody.pattern.steps.each_with_index do |note, step_number|
229
233
  unless note == '.'
230
234
  buffer_pointer = step_number * sub_buffer_size
@@ -445,8 +449,13 @@ class PicoTune::Assembler
445
449
  phrases = list.select { |item| item['type'] == 'phrase' }.map do |item|
446
450
  melodies = item['melodies'].map do |m|
447
451
  instrument = instruments.find { |i| i.name == m[0] }
452
+
453
+ raise "Instrument named \"#{m[0]}\" doesn't exist!" unless instrument
454
+
448
455
  pattern = patterns.find { |p| p.name == m[1] }
449
456
 
457
+ raise "Pattern named \"#{m[1]}\" doesn't exist!" unless pattern
458
+
450
459
  PicoTune::Melody.new instrument, pattern
451
460
  end
452
461
 
@@ -460,13 +469,16 @@ class PicoTune::Assembler
460
469
  end
461
470
 
462
471
  sequence = list.find { |item| item['type'] == 'sequence' }
472
+
473
+ raise "Please define a sequence in your txt file with \"sequence s1 s2 s3...\" where s1/s2/s3/etc are names of phrases" unless sequence
474
+
463
475
  sequence['list'].each do |phrase_name|
464
476
  raise "undefined phrase \"#{phrase_name}\" in sequence" unless phrases.find { |p| p.name == phrase_name }
465
477
  end
466
478
 
467
-
468
479
  tune = list.find { |item| item['type'] == 'tune' }
469
- raise 'undefined tune name' unless tune['name']
480
+
481
+ raise "Please define your tune's name in your txt file with \"tune <tune name>\"" unless tune && tune['name']
470
482
 
471
483
  PicoTune::Tune.new tune['name'], sequence['list'], phrases
472
484
  end
@@ -497,9 +509,9 @@ class PicoTune::Parser
497
509
  item['list'] = parts[1..-1]
498
510
  elsif parts[0] == 'pattern'
499
511
  item['name'] = parts[1]
500
- item['list'] = pattern_steps(parts[2])
512
+ item['list'] = pattern_steps parts[2..-1].join
501
513
  else
502
- item['name'] = parts[1]
514
+ item['name'] = parts[1..-1].join
503
515
  end
504
516
 
505
517
  bag << item
@@ -512,7 +524,7 @@ class PicoTune::Parser
512
524
  elsif collecting_melodies
513
525
  bag.last['melodies'].push parts
514
526
  else
515
- bag.last[parts[0]] = parts[1]
527
+ bag.last[parts[0]] = parts[1..-1].join
516
528
  end
517
529
  end
518
530
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: picotune
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zachary Schroeder