mirror of
https://github.com/vsariola/sointu.git
synced 2026-04-12 17:14:43 -04:00
drafting increasing maximum voice numbers to 256
This commit is contained in:
parent
ac218e7e54
commit
44ee37882b
2
patch.go
2
patch.go
@ -319,7 +319,7 @@ var UnitTypes = map[string]UnitType{
|
|||||||
Params: []UnitParameter{
|
Params: []UnitParameter{
|
||||||
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
|
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
|
||||||
{Name: "amount", MinValue: 0, Neutral: 64, Default: 64, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(float64(v)/64 - 1), "" }},
|
{Name: "amount", MinValue: 0, Neutral: 64, Default: 64, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(float64(v)/64 - 1), "" }},
|
||||||
{Name: "voice", MinValue: 0, MaxValue: 32, CanSet: true, CanModulate: false, DisplayFunc: func(v int) (string, string) {
|
{Name: "voice", MinValue: 0, MaxValue: 256, CanSet: true, CanModulate: false, DisplayFunc: func(v int) (string, string) {
|
||||||
if v == 0 {
|
if v == 0 {
|
||||||
return "default", ""
|
return "default", ""
|
||||||
}
|
}
|
||||||
|
|||||||
@ -174,6 +174,8 @@ regression_test(test_envelope_16bit ENVELOPE "" test_envelope "-i")
|
|||||||
|
|
||||||
regression_test(test_polyphony "ENVELOPE;VCO_SINE" POLYPHONY)
|
regression_test(test_polyphony "ENVELOPE;VCO_SINE" POLYPHONY)
|
||||||
regression_test(test_polyphony_init POLYPHONY)
|
regression_test(test_polyphony_init POLYPHONY)
|
||||||
|
regression_test(test_64_voices "ENVELOPE;POLYPHONY" VCO_SINE)
|
||||||
|
|
||||||
regression_test(test_chords "ENVELOPE;VCO_SINE")
|
regression_test(test_chords "ENVELOPE;VCO_SINE")
|
||||||
regression_test(test_speed "ENVELOPE;VCO_SINE")
|
regression_test(test_speed "ENVELOPE;VCO_SINE")
|
||||||
regression_test(test_sync "ENVELOPE" "" "" "-r")
|
regression_test(test_sync "ENVELOPE" "" "" "-r")
|
||||||
|
|||||||
BIN
tests/expected_output/test_64_voices.raw
Normal file
BIN
tests/expected_output/test_64_voices.raw
Normal file
Binary file not shown.
743
tests/test_64_voices.yml
Normal file
743
tests/test_64_voices.yml
Normal file
@ -0,0 +1,743 @@
|
|||||||
|
bpm: 100
|
||||||
|
rowsperbeat: 4
|
||||||
|
score:
|
||||||
|
tracks:
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[64, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 65, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 66, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 67, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 68, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 69, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 70, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 71, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 72, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 74, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 75, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 78, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [0, 1]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79], [0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[80, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 81, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 82, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 83, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 84, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 85, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 86, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 87, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 88, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 89, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 90, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 91, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 92, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 93, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 94, 0]]
|
||||||
|
- numvoices: 1
|
||||||
|
order: [-1, 0]
|
||||||
|
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 95]]
|
||||||
|
rowsperpattern: 16
|
||||||
|
length: 2
|
||||||
|
patch:
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 385
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 386
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 387
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 388
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 389
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 390
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 379
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 380
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 381
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 382
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 383
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 384
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 373
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 374
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 375
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 376
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 377
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 378
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 367
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 368
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 369
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 370
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 371
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 372
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 361
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 362
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 363
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 364
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 365
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 366
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 355
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 356
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 357
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 358
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 359
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 360
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 349
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 350
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 351
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 352
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 353
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 354
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 343
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 344
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 345
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 346
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 347
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 348
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 337
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 338
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 339
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 340
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 341
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 342
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 331
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 332
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 333
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 334
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 335
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 336
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 325
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 326
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 327
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 328
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 329
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 330
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 319
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 320
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 321
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 322
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 323
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 324
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 313
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 314
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 315
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 316
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 317
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 318
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 307
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 308
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 309
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 310
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 311
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 312
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 301
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 302
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 303
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 304
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 305
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 306
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 391
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 392
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 393
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 394
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 395
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 396
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 397
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 398
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 399
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 400
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 401
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 402
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 403
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 404
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 405
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 406
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 407
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 408
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 409
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 410
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 411
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 412
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 413
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 414
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 415
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 416
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 417
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 418
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 419
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 420
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 421
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 422
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 423
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 424
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 425
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 426
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 427
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 428
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 429
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 430
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 431
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 432
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 433
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 434
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 435
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 436
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 437
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 438
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 439
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 440
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 441
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 442
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 443
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 444
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 445
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 446
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 447
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 448
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 449
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 450
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 451
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 452
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 453
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 454
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 455
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 456
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 457
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 458
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 459
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 460
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 461
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 462
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 463
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 464
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 465
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 466
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 467
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 468
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 469
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 470
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 471
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 472
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 473
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 474
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 475
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 476
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 477
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 478
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 479
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 480
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 481
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 482
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 483
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 484
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 485
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 486
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
|
- numvoices: 2
|
||||||
|
units:
|
||||||
|
- type: envelope
|
||||||
|
id: 295
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: envelope
|
||||||
|
id: 296
|
||||||
|
parameters: {attack: 32, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 64}
|
||||||
|
- type: oscillator
|
||||||
|
id: 297
|
||||||
|
parameters: {color: 96, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
|
||||||
|
- type: oscillator
|
||||||
|
id: 298
|
||||||
|
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 96, stereo: 0, transpose: 72, type: 0, unison: 0}
|
||||||
|
- type: mulp
|
||||||
|
id: 299
|
||||||
|
parameters: {stereo: 1}
|
||||||
|
- type: out
|
||||||
|
id: 300
|
||||||
|
parameters: {gain: 128, stereo: 1}
|
||||||
@ -30,7 +30,8 @@ int main(int argc, char* argv[])
|
|||||||
memcpy(synth->Opcodes, opcodes, sizeof(opcodes));
|
memcpy(synth->Opcodes, opcodes, sizeof(opcodes));
|
||||||
memcpy(synth->Operands, operands, sizeof(operands));
|
memcpy(synth->Operands, operands, sizeof(operands));
|
||||||
synth->NumVoices = 3;
|
synth->NumVoices = 3;
|
||||||
synth->Polyphony = 6;
|
memset(synth->Polyphony, 0, sizeof(synth->Polyphony));
|
||||||
|
synth->Polyphony[0] = 6;
|
||||||
synth->RandSeed = 1;
|
synth->RandSeed = 1;
|
||||||
synth->SampleOffsets[0].Start = 91507;
|
synth->SampleOffsets[0].Start = 91507;
|
||||||
synth->SampleOffsets[0].LoopStart = 5448;
|
synth->SampleOffsets[0].LoopStart = 5448;
|
||||||
|
|||||||
@ -23,7 +23,7 @@ void SU_CALLCONV su_render_song(float *buffer)
|
|||||||
memcpy(synth->Opcodes, opcodes, sizeof(opcodes));
|
memcpy(synth->Opcodes, opcodes, sizeof(opcodes));
|
||||||
memcpy(synth->Operands, operands, sizeof(operands));
|
memcpy(synth->Operands, operands, sizeof(operands));
|
||||||
synth->NumVoices = 1;
|
synth->NumVoices = 1;
|
||||||
synth->Polyphony = 0;
|
memset(synth->Polyphony, 0, sizeof(synth->Polyphony));
|
||||||
synth->RandSeed = 1;
|
synth->RandSeed = 1;
|
||||||
// triger first voice
|
// triger first voice
|
||||||
synth->SynthWrk.Voices[0].Note = 64;
|
synth->SynthWrk.Voices[0].Note = 64;
|
||||||
|
|||||||
@ -32,7 +32,7 @@ int main(int argc, char *argv[])
|
|||||||
memcpy(synth->Opcodes, opcodes, sizeof(opcodes));
|
memcpy(synth->Opcodes, opcodes, sizeof(opcodes));
|
||||||
memcpy(synth->Operands, operands, sizeof(operands));
|
memcpy(synth->Operands, operands, sizeof(operands));
|
||||||
synth->NumVoices = 1;
|
synth->NumVoices = 1;
|
||||||
synth->Polyphony = 0;
|
memset(synth->Polyphony, 0, sizeof(synth->Polyphony));
|
||||||
synth->RandSeed = 1;
|
synth->RandSeed = 1;
|
||||||
// initialize Buffer
|
// initialize Buffer
|
||||||
buffer = (float *)malloc(2 * sizeof(float) * su_max_samples);
|
buffer = (float *)malloc(2 * sizeof(float) * su_max_samples);
|
||||||
|
|||||||
@ -212,7 +212,7 @@ func (m *Model) buildPatternUseCounts(track sointu.Track) []int {
|
|||||||
|
|
||||||
func (m *Model) updateRails() {
|
func (m *Model) updateRails() {
|
||||||
type stackElem struct{ instr, unit int }
|
type stackElem struct{ instr, unit int }
|
||||||
scratchArray := [32]stackElem{}
|
scratchArray := [256]stackElem{}
|
||||||
scratch := scratchArray[:0]
|
scratch := scratchArray[:0]
|
||||||
m.derived.railError = RailError{}
|
m.derived.railError = RailError{}
|
||||||
for i, instr := range m.d.Song.Patch {
|
for i, instr := range m.d.Song.Patch {
|
||||||
|
|||||||
@ -42,7 +42,7 @@ type (
|
|||||||
// example, if first instrument has 3 voices, second instrument has 2
|
// example, if first instrument has 3 voices, second instrument has 2
|
||||||
// voices, and third instrument four voices, the PolyphonyBitmask is: (MSB)
|
// voices, and third instrument four voices, the PolyphonyBitmask is: (MSB)
|
||||||
// 110101110 (LSB)
|
// 110101110 (LSB)
|
||||||
PolyphonyBitmask uint32
|
PolyphonyBitmask []byte
|
||||||
|
|
||||||
// NumVoices is the total number of voices in the patch
|
// NumVoices is the total number of voices in the patch
|
||||||
NumVoices uint32
|
NumVoices uint32
|
||||||
@ -69,8 +69,8 @@ type bytecodeBuilder struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewBytecode(patch sointu.Patch, featureSet FeatureSet, bpm int) (*Bytecode, error) {
|
func NewBytecode(patch sointu.Patch, featureSet FeatureSet, bpm int) (*Bytecode, error) {
|
||||||
if patch.NumVoices() > 32 {
|
if patch.NumVoices() > MAX_VOICES {
|
||||||
return nil, fmt.Errorf("Sointu does not support more than 32 concurrent voices; patch uses %v", patch.NumVoices())
|
return nil, fmt.Errorf("Sointu does not support more than %d concurrent voices; patch uses %v", MAX_VOICES, patch.NumVoices())
|
||||||
}
|
}
|
||||||
b := newBytecodeBuilder(patch, bpm)
|
b := newBytecodeBuilder(patch, bpm)
|
||||||
for instrIndex, instr := range patch {
|
for instrIndex, instr := range patch {
|
||||||
@ -213,12 +213,13 @@ func NewBytecode(patch sointu.Patch, featureSet FeatureSet, bpm int) (*Bytecode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newBytecodeBuilder(patch sointu.Patch, bpm int) *bytecodeBuilder {
|
func newBytecodeBuilder(patch sointu.Patch, bpm int) *bytecodeBuilder {
|
||||||
var polyphonyBitmask uint32 = 0
|
var polyphonyBitmask []byte = make([]byte, (patch.NumVoices()+7)/8) // 1 bit per voice, rounded up to full bytes
|
||||||
for _, instr := range patch {
|
for _, instr := range patch {
|
||||||
for j := 0; j < instr.NumVoices-1; j++ {
|
for j := 0; j < instr.NumVoices-1; j++ {
|
||||||
polyphonyBitmask = (polyphonyBitmask << 1) + 1 // for each instrument, NumVoices - 1 bits are ones
|
shiftLeftMask(polyphonyBitmask)
|
||||||
|
polyphonyBitmask[0] += 1 // for each instrument, NumVoices - 1 bits are ones
|
||||||
}
|
}
|
||||||
polyphonyBitmask <<= 1 // ...and the last bit is zero, to denote "change instrument"
|
shiftLeftMask(polyphonyBitmask) // ...and the last bit is zero, to denote "change instrument"
|
||||||
}
|
}
|
||||||
delayTimesInt, delayIndices := constructDelayTimeTable(patch, bpm)
|
delayTimesInt, delayIndices := constructDelayTimeTable(patch, bpm)
|
||||||
delayTimesU16 := make([]uint16, len(delayTimesInt))
|
delayTimesU16 := make([]uint16, len(delayTimesInt))
|
||||||
@ -236,6 +237,13 @@ func newBytecodeBuilder(patch sointu.Patch, bpm int) *bytecodeBuilder {
|
|||||||
return &c
|
return &c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func shiftLeftMask(b []byte) {
|
||||||
|
var carry byte = 0
|
||||||
|
for i := range b {
|
||||||
|
carry, b[i] = b[i]&128, (b[i]<<1)+(carry>>7)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// op adds a command to the bytecode, and increments the unit number
|
// op adds a command to the bytecode, and increments the unit number
|
||||||
func (b *bytecodeBuilder) op(opcode int) {
|
func (b *bytecodeBuilder) op(opcode int) {
|
||||||
b.Opcodes = append(b.Opcodes, byte(opcode))
|
b.Opcodes = append(b.Opcodes, byte(opcode))
|
||||||
|
|||||||
@ -49,7 +49,6 @@ func Synth(patch sointu.Patch, bpm int) (*NativeSynth, error) {
|
|||||||
if len(comPatch.Opcodes) == 0 {
|
if len(comPatch.Opcodes) == 0 {
|
||||||
s.Opcodes[0] = 0
|
s.Opcodes[0] = 0
|
||||||
s.NumVoices = 1
|
s.NumVoices = 1
|
||||||
s.Polyphony = 0
|
|
||||||
return &NativeSynth{csynth: *s}, nil
|
return &NativeSynth{csynth: *s}, nil
|
||||||
}
|
}
|
||||||
for i, v := range comPatch.Opcodes {
|
for i, v := range comPatch.Opcodes {
|
||||||
@ -67,7 +66,9 @@ func Synth(patch sointu.Patch, bpm int) (*NativeSynth, error) {
|
|||||||
s.SampleOffsets[i].LoopLength = (C.ushort)(v.LoopLength)
|
s.SampleOffsets[i].LoopLength = (C.ushort)(v.LoopLength)
|
||||||
}
|
}
|
||||||
s.NumVoices = C.uint(comPatch.NumVoices)
|
s.NumVoices = C.uint(comPatch.NumVoices)
|
||||||
s.Polyphony = C.uint(comPatch.PolyphonyBitmask)
|
for i, v := range comPatch.PolyphonyBitmask {
|
||||||
|
s.Polyphony[i] = (C.uchar)(v)
|
||||||
|
}
|
||||||
s.RandSeed = 1
|
s.RandSeed = 1
|
||||||
return &NativeSynth{csynth: *s}, nil
|
return &NativeSynth{csynth: *s}, nil
|
||||||
}
|
}
|
||||||
@ -160,7 +161,6 @@ func (bridgesynth *NativeSynth) Update(patch sointu.Patch, bpm int) error {
|
|||||||
if len(comPatch.Opcodes) == 0 {
|
if len(comPatch.Opcodes) == 0 {
|
||||||
s.Opcodes[0] = 0
|
s.Opcodes[0] = 0
|
||||||
s.NumVoices = 1
|
s.NumVoices = 1
|
||||||
s.Polyphony = 0
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
needsRefresh := false
|
needsRefresh := false
|
||||||
@ -182,7 +182,9 @@ func (bridgesynth *NativeSynth) Update(patch sointu.Patch, bpm int) error {
|
|||||||
s.SampleOffsets[i].LoopLength = (C.ushort)(v.LoopLength)
|
s.SampleOffsets[i].LoopLength = (C.ushort)(v.LoopLength)
|
||||||
}
|
}
|
||||||
s.NumVoices = C.uint(comPatch.NumVoices)
|
s.NumVoices = C.uint(comPatch.NumVoices)
|
||||||
s.Polyphony = C.uint(comPatch.PolyphonyBitmask)
|
for i, v := range comPatch.PolyphonyBitmask {
|
||||||
|
s.Polyphony[i] = (C.uchar)(v)
|
||||||
|
}
|
||||||
if needsRefresh {
|
if needsRefresh {
|
||||||
for i := range s.SynthWrk.Voices {
|
for i := range s.SynthWrk.Voices {
|
||||||
// if any of the opcodes change, we retrigger all units
|
// if any of the opcodes change, we retrigger all units
|
||||||
|
|||||||
@ -6,7 +6,8 @@ import (
|
|||||||
|
|
||||||
type SongMacros struct {
|
type SongMacros struct {
|
||||||
Song *sointu.Song
|
Song *sointu.Song
|
||||||
VoiceTrackBitmask int
|
VoiceTrackBitmask []byte
|
||||||
|
HasVoiceTrack bool
|
||||||
MaxSamples int
|
MaxSamples int
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,9 +15,13 @@ func NewSongMacros(s *sointu.Song) *SongMacros {
|
|||||||
maxSamples := s.SamplesPerRow() * s.Score.LengthInRows()
|
maxSamples := s.SamplesPerRow() * s.Score.LengthInRows()
|
||||||
p := SongMacros{Song: s, MaxSamples: maxSamples}
|
p := SongMacros{Song: s, MaxSamples: maxSamples}
|
||||||
trackVoiceNumber := 0
|
trackVoiceNumber := 0
|
||||||
|
p.VoiceTrackBitmask = make([]byte, (s.Score.NumVoices()+7)/8)
|
||||||
for _, t := range s.Score.Tracks {
|
for _, t := range s.Score.Tracks {
|
||||||
|
if t.NumVoices > 0 {
|
||||||
|
p.HasVoiceTrack = true
|
||||||
|
}
|
||||||
for b := 0; b < t.NumVoices-1; b++ {
|
for b := 0; b < t.NumVoices-1; b++ {
|
||||||
p.VoiceTrackBitmask += 1 << trackVoiceNumber
|
p.VoiceTrackBitmask[trackVoiceNumber/8] += 1 << (trackVoiceNumber % 8)
|
||||||
trackVoiceNumber++
|
trackVoiceNumber++
|
||||||
}
|
}
|
||||||
trackVoiceNumber++ // set all bits except last one
|
trackVoiceNumber++ // set all bits except last one
|
||||||
|
|||||||
@ -7,9 +7,9 @@ struc su_synth
|
|||||||
.sampleoffs resb su_sample_offset.size * 256
|
.sampleoffs resb su_sample_offset.size * 256
|
||||||
.randseed resd 1
|
.randseed resd 1
|
||||||
.globaltime resd 1
|
.globaltime resd 1
|
||||||
.opcodes resb 32 * 64
|
.opcodes resb 256 * 64
|
||||||
.operands resb 32 * 64 * 8
|
.operands resb 256 * 64 * 8
|
||||||
.polyphony resd 1
|
.polyphony resb 32
|
||||||
.numvoices resd 1
|
.numvoices resd 1
|
||||||
endstruc
|
endstruc
|
||||||
|
|
||||||
@ -68,8 +68,8 @@ su_render_samples_loop:
|
|||||||
inc dword [{{.Stack "BufSample"}}] ; samples++
|
inc dword [{{.Stack "BufSample"}}] ; samples++
|
||||||
mov {{.CX}}, [{{.Stack "SynthState"}}]
|
mov {{.CX}}, [{{.Stack "SynthState"}}]
|
||||||
{{.Push .AX "Sample"}}
|
{{.Push .AX "Sample"}}
|
||||||
mov eax, [{{.CX}} + su_synth.polyphony]
|
lea {{.AX}}, [{{.CX}} + su_synth.polyphony]
|
||||||
{{.Push .AX "PolyphonyBitmask"}}
|
{{.Push .AX "PolyphonyBitmaskAddr"}}
|
||||||
mov eax, [{{.CX}} + su_synth.numvoices]
|
mov eax, [{{.CX}} + su_synth.numvoices]
|
||||||
{{.Push .AX "VoicesRemain"}}
|
{{.Push .AX "VoicesRemain"}}
|
||||||
lea {{.DX}}, [{{.CX}}+ su_synth.synth_wrk]
|
lea {{.DX}}, [{{.CX}}+ su_synth.synth_wrk]
|
||||||
|
|||||||
@ -23,11 +23,11 @@ typedef struct DelayWorkspace {
|
|||||||
} DelayWorkspace;
|
} DelayWorkspace;
|
||||||
|
|
||||||
typedef struct SynthWorkspace {
|
typedef struct SynthWorkspace {
|
||||||
unsigned char Curvoices[32];
|
unsigned char Curvoices[256];
|
||||||
float Left;
|
float Left;
|
||||||
float Right;
|
float Right;
|
||||||
float Aux[6];
|
float Aux[6];
|
||||||
struct Voice Voices[32];
|
struct Voice Voices[256];
|
||||||
} SynthWorkspace;
|
} SynthWorkspace;
|
||||||
|
|
||||||
typedef struct SampleOffset {
|
typedef struct SampleOffset {
|
||||||
@ -43,9 +43,9 @@ typedef struct Synth {
|
|||||||
struct SampleOffset SampleOffsets[256];
|
struct SampleOffset SampleOffsets[256];
|
||||||
unsigned int RandSeed;
|
unsigned int RandSeed;
|
||||||
unsigned int GlobalTick;
|
unsigned int GlobalTick;
|
||||||
unsigned char Opcodes[32 * 64];
|
unsigned char Opcodes[256 * 64];
|
||||||
unsigned char Operands[32 * 64 * 8];
|
unsigned char Operands[256 * 64 * 8];
|
||||||
unsigned int Polyphony;
|
unsigned char Polyphony[32];
|
||||||
unsigned int NumVoices;
|
unsigned int NumVoices;
|
||||||
} Synth;
|
} Synth;
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|||||||
@ -63,7 +63,13 @@ su_run_vm_advance:
|
|||||||
mov [{{.Stack "Voice"}}], {{.WRK}} ; update the pointer in the stack to point to the new voice
|
mov [{{.Stack "Voice"}}], {{.WRK}} ; update the pointer in the stack to point to the new voice
|
||||||
mov ecx, [{{.Stack "VoicesRemain"}}] ; ecx = how many voices remain to process
|
mov ecx, [{{.Stack "VoicesRemain"}}] ; ecx = how many voices remain to process
|
||||||
dec ecx ; decrement number of voices to process
|
dec ecx ; decrement number of voices to process
|
||||||
bt dword [{{.Stack "PolyphonyBitmask"}}], ecx ; if voice bit of su_polyphonism not set
|
{{- if .Library}}
|
||||||
|
mov {{.VAL}}, [{{.Stack "PolyphonyBitmaskAddr"}}]
|
||||||
|
bt dword [{{.VAL}}], ecx ; if voice bit of su_polyphonism not set
|
||||||
|
{{- else }}
|
||||||
|
{{- .Prepare "su_polyphony_bitmask" | indent 4}}
|
||||||
|
bt dword [{{.Use "su_polyphony_bitmask"}}], ecx ; if voice bit of su_polyphonism not set
|
||||||
|
{{- end}}
|
||||||
jnc su_op_advance_next_instrument ; goto next_instrument
|
jnc su_op_advance_next_instrument ; goto next_instrument
|
||||||
mov {{.VAL}}, [{{.Stack "OperandStream"}}] ; if it was set, then repeat the opcodes for the current voice
|
mov {{.VAL}}, [{{.Stack "OperandStream"}}] ; if it was set, then repeat the opcodes for the current voice
|
||||||
mov {{.COM}}, [{{.Stack "OpcodeStream"}}]
|
mov {{.COM}}, [{{.Stack "OpcodeStream"}}]
|
||||||
|
|||||||
@ -44,9 +44,6 @@ extern syncBuf
|
|||||||
{{- end}}
|
{{- end}}
|
||||||
{{- end}}
|
{{- end}}
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
{{- if ne .VoiceTrackBitmask 0}}
|
|
||||||
{{.Push (.VoiceTrackBitmask | printf "%v") "VoiceTrackBitmask"}}
|
|
||||||
{{- end}}
|
|
||||||
{{.Push "1" "RandSeed"}}
|
{{.Push "1" "RandSeed"}}
|
||||||
{{.Push .AX "GlobalTick"}}
|
{{.Push .AX "GlobalTick"}}
|
||||||
su_render_rowloop: ; loop through every row in the song
|
su_render_rowloop: ; loop through every row in the song
|
||||||
@ -55,9 +52,6 @@ su_render_rowloop: ; loop through every row in the song
|
|||||||
xor eax, eax ; ecx is the current sample within row
|
xor eax, eax ; ecx is the current sample within row
|
||||||
su_render_sampleloop: ; loop through every sample in the row
|
su_render_sampleloop: ; loop through every sample in the row
|
||||||
{{.Push .AX "Sample"}}
|
{{.Push .AX "Sample"}}
|
||||||
{{- if .SupportsPolyphony}}
|
|
||||||
{{.Push (.PolyphonyBitmask | printf "%v") "PolyphonyBitmask"}} ; does the next voice reuse the current opcodes?
|
|
||||||
{{- end}}
|
|
||||||
{{.Push (.Song.Patch.NumVoices | printf "%v") "VoicesRemain"}}
|
{{.Push (.Song.Patch.NumVoices | printf "%v") "VoicesRemain"}}
|
||||||
mov {{.DX}}, {{.PTRWORD}} su_synth_obj ; {{.DX}} points to the synth object
|
mov {{.DX}}, {{.PTRWORD}} su_synth_obj ; {{.DX}} points to the synth object
|
||||||
mov {{.COM}}, {{.PTRWORD}} su_patch_opcodes ; COM points to vm code
|
mov {{.COM}}, {{.PTRWORD}} su_patch_opcodes ; COM points to vm code
|
||||||
@ -68,9 +62,6 @@ su_render_sampleloop: ; loop through every sample in the row
|
|||||||
lea {{.WRK}}, [{{.DX}} + su_synthworkspace.voices] ; WRK points to the first voice
|
lea {{.WRK}}, [{{.DX}} + su_synthworkspace.voices] ; WRK points to the first voice
|
||||||
{{.Call "su_run_vm"}} ; run through the VM code
|
{{.Call "su_run_vm"}} ; run through the VM code
|
||||||
{{.Pop .AX}}
|
{{.Pop .AX}}
|
||||||
{{- if .SupportsPolyphony}}
|
|
||||||
{{.Pop .AX}}
|
|
||||||
{{- end}}
|
|
||||||
{{- template "output_sound.asm" .}} ; *ptr++ = left, *ptr++ = right
|
{{- template "output_sound.asm" .}} ; *ptr++ = left, *ptr++ = right
|
||||||
{{.Pop .AX}}
|
{{.Pop .AX}}
|
||||||
inc dword [{{.Stack "GlobalTick"}}] ; increment global time, used by delays
|
inc dword [{{.Stack "GlobalTick"}}] ; increment global time, used by delays
|
||||||
@ -106,7 +97,7 @@ su_render_sampleloop: ; loop through every sample in the row
|
|||||||
; Dirty: pretty much everything
|
; Dirty: pretty much everything
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
{{.Func "su_update_voices"}}
|
{{.Func "su_update_voices"}}
|
||||||
{{- if ne .VoiceTrackBitmask 0}}
|
{{- if .HasVoiceTrack}}
|
||||||
; The more complicated implementation: one track can trigger multiple voices
|
; The more complicated implementation: one track can trigger multiple voices
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
mov ebx, {{.PatternLength}} ; we could do xor ebx,ebx; mov bl,PATTERN_SIZE, but that would limit patternsize to 256...
|
mov ebx, {{.PatternLength}} ; we could do xor ebx,ebx; mov bl,PATTERN_SIZE, but that would limit patternsize to 256...
|
||||||
@ -125,7 +116,8 @@ su_update_voices_trackloop:
|
|||||||
xor edx, edx ; edx=0
|
xor edx, edx ; edx=0
|
||||||
mov ecx, ebx ; ecx=first voice of the track to be done
|
mov ecx, ebx ; ecx=first voice of the track to be done
|
||||||
su_calculate_voices_loop: ; do {
|
su_calculate_voices_loop: ; do {
|
||||||
bt dword [{{.Stack "VoiceTrackBitmask"}} + {{.PTRSIZE}}],ecx ; test voicetrack_bitmask// notice that the incs don't set carry
|
{{- .Prepare "su_voicetrack_bitmask" | indent 4}}
|
||||||
|
bt dword [{{.Use "su_voicetrack_bitmask"}}], ecx ; if voice bit of su_polyphonism not set
|
||||||
inc edx ; edx++ // edx=numvoices
|
inc edx ; edx++ // edx=numvoices
|
||||||
inc ecx ; ecx++ // ecx=the first voice of next track
|
inc ecx ; ecx++ // ecx=the first voice of next track
|
||||||
jc su_calculate_voices_loop ; } while bit ecx-1 of bitmask is on
|
jc su_calculate_voices_loop ; } while bit ecx-1 of bitmask is on
|
||||||
@ -249,6 +241,24 @@ su_update_voices_skipadd:
|
|||||||
{{.Data "su_patch_operands"}}
|
{{.Data "su_patch_operands"}}
|
||||||
db {{.Operands | toStrings | join ","}}
|
db {{.Operands | toStrings | join ","}}
|
||||||
|
|
||||||
|
{{- if not .Library}}
|
||||||
|
{{- if .SupportsPolyphony}}
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; PolyphonyBitmask
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
{{.Data "su_polyphony_bitmask"}}
|
||||||
|
db {{.PolyphonyBitmask | toStrings | join ","}}
|
||||||
|
{{- end}}
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
|
{{- if .HasVoiceTrack}}
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; VoiceTrackBitmask
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
{{.Data "su_voicetrack_bitmask"}}
|
||||||
|
db {{.VoiceTrackBitmask | toStrings | join ","}}
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
; Constants
|
; Constants
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -94,6 +94,7 @@ su_op_aux_mono:
|
|||||||
test ah, 0x80
|
test ah, 0x80
|
||||||
jz su_op_send_skipglobal
|
jz su_op_send_skipglobal
|
||||||
mov {{.CX}}, [{{.Stack "Synth"}} + {{.PTRSIZE}}]
|
mov {{.CX}}, [{{.Stack "Synth"}} + {{.PTRSIZE}}]
|
||||||
|
lea {{.CX}}, [{{.CX}} + su_synthworkspace.voices - su_unit.size]
|
||||||
su_op_send_skipglobal:
|
su_op_send_skipglobal:
|
||||||
popf
|
popf
|
||||||
{{- end}}
|
{{- end}}
|
||||||
|
|||||||
@ -23,11 +23,11 @@ endstruc
|
|||||||
; synthworkspace struct
|
; synthworkspace struct
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
struc su_synthworkspace
|
struc su_synthworkspace
|
||||||
.curvoices resb 32 ; these are used by the multitrack player to store which voice is playing on which track
|
.curvoices resb 256 ; these are used by the multitrack player to store which voice is playing on which track
|
||||||
.left resd 1
|
.left resd 1
|
||||||
.right resd 1
|
.right resd 1
|
||||||
.aux resd 6 ; 3 auxiliary signals
|
.aux resd 6 ; 3 auxiliary signals
|
||||||
.voices resb 32 * su_voice.size
|
.voices resb 256 * su_voice.size
|
||||||
.size:
|
.size:
|
||||||
endstruc
|
endstruc
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ type (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
const MAX_VOICES = 32
|
const MAX_VOICES = 256
|
||||||
const MAX_UNITS = 63
|
const MAX_UNITS = 63
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@ -189,7 +189,7 @@ func (s *GoSynth) Render(buffer sointu.AudioBuffer, maxtime int) (samples int, r
|
|||||||
voices = voices[1:]
|
voices = voices[1:]
|
||||||
units = voices[0].units[:]
|
units = voices[0].units[:]
|
||||||
}
|
}
|
||||||
if mask := uint32(1) << uint32(voicesRemaining); s.bytecode.PolyphonyBitmask&mask == mask {
|
if mask := byte(1) << uint32(voicesRemaining&7); s.bytecode.PolyphonyBitmask[voicesRemaining>>3]&mask == mask {
|
||||||
opcodes, operands = opcodesInstr, operandsInstr
|
opcodes, operands = opcodesInstr, operandsInstr
|
||||||
} else {
|
} else {
|
||||||
opcodesInstr, operandsInstr = opcodes, operands
|
opcodesInstr, operandsInstr = opcodes, operands
|
||||||
|
|||||||
Reference in New Issue
Block a user