Skip to content

Commit

Permalink
Merge pull request #24 from risgk/develop
Browse files Browse the repository at this point in the history
v5.1.1
  • Loading branch information
risgk committed Feb 26, 2015
2 parents 3e8d40c + c920ec7 commit aea359c
Show file tree
Hide file tree
Showing 4 changed files with 269 additions and 5 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Digital Synth VRA8 5.1.0
# Digital Synth VRA8 5.1.1

2015-02-15 ISGK Instruments
2015-02-26 ISGK Instruments
[https://github.com/risgk/DigitalSynthVRA8](https://github.com/risgk/DigitalSynthVRA8)

## Concept
Expand Down Expand Up @@ -80,8 +80,8 @@

## MIDI Implementation Chart

[Virtual Analog Synthesizer] Date: 2015-02-15
Model Digital Synth VRA8 MIDI Implementation Chart Version: 5.1.0
[Virtual Analog Synthesizer] Date: 2015-02-26
Model Digital Synth VRA8 MIDI Implementation Chart Version: 5.1.1
+-------------------------------+---------------+---------------+-----------------------+
| Function... | Transmitted | Recognized | Remarks |
+-------------------------------+---------------+---------------+-----------------------+
Expand Down
133 changes: 133 additions & 0 deletions generate_wave_table_2.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
require './common'
require './fft'

$pulse_25 = [
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
]

$pulse_12 = [
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
]

$pseudo_tri = [
+5, +5, +5, +5, +5, +5, +5, +5, +15, +15, +15, +15, +15, +15, +15, +15,
+25, +25, +25, +25, +25, +25, +25, +25, +35, +35, +35, +35, +35, +35, +35, +35,
+45, +45, +45, +45, +45, +45, +45, +45, +55, +55, +55, +55, +55, +55, +55, +55,
+65, +65, +65, +65, +65, +65, +65, +65, +75, +75, +75, +75, +75, +75, +75, +75,
+75, +75, +75, +75, +75, +75, +75, +75, +65, +65, +65, +65, +65, +65, +65, +65,
+55, +55, +55, +55, +55, +55, +55, +55, +45, +45, +45, +45, +45, +45, +45, +45,
+35, +35, +35, +35, +35, +35, +35, +35, +25, +25, +25, +25, +25, +25, +25, +25,
+15, +15, +15, +15, +15, +15, +15, +15, +5, +5, +5, +5, +5, +5, +5, +5,
-5, -5, -5, -5, -5, -5, -5, -5, -15, -15, -15, -15, -15, -15, -15, -15,
-25, -25, -25, -25, -25, -25, -25, -25, -35, -35, -35, -35, -35, -35, -35, -35,
-45, -45, -45, -45, -45, -45, -45, -45, -55, -55, -55, -55, -55, -55, -55, -55,
-65, -65, -65, -65, -65, -65, -65, -65, -75, -75, -75, -75, -75, -75, -75, -75,
-75, -75, -75, -75, -75, -75, -75, -75, -65, -65, -65, -65, -65, -65, -65, -65,
-55, -55, -55, -55, -55, -55, -55, -55, -45, -45, -45, -45, -45, -45, -45, -45,
-35, -35, -35, -35, -35, -35, -35, -35, -25, -25, -25, -25, -25, -25, -25, -25,
-15, -15, -15, -15, -15, -15, -15, -15, -5, -5, -5, -5, -5, -5, -5, -5,
]

$fft_pulse_25 = fft($pulse_25)
$fft_pulse_12 = fft($pulse_12)
$fft_pseudo_tri = fft($pseudo_tri)

$file = File::open("WaveTable2.h", "w")

$file.printf("#pragma once\n\n")

def generate_wave_table(max, name, amp, ffta)
$file.printf("const uint8_t g_waveTable%sM%d[] PROGMEM = {\n ", name, max)
a = ifft(lpf_fft(ffta, max), amp)
a.each_with_index do |level, n|
$file.printf("%+4d,", level)
if n == 255
$file.printf("\n")
elsif n % 16 == 15
$file.printf("\n ")
else
$file.printf(" ")
end
end
$file.printf("};\n\n")
end

def generate_wave_table_pulse_25(max)
generate_wave_table(max, "Pulse25", 1.0 / Math::sqrt(3.0), $fft_pulse_25)
end

def generate_wave_table_pulse_12(max)
generate_wave_table(max, "Pulse12", 1.0 / Math::sqrt(3.0), $fft_pulse_12)
end

def generate_wave_table_pseudo_tri(max)
generate_wave_table(max, "PseudoTri", 1.0, $fft_pseudo_tri)
end

FREQ_MAX = 8819 # refs "FreqTable.h"

def max_from_i(i)
max = 128 / (i + 1)
max = 64 if max == 128
max = max - 1 if max % 2 == 0
return max
end

def generate_wave_tables(name)
wave_table_sels = (0..(FREQ_MAX / 256))
$file.printf("const uint8_t* g_waveTables%s[] = {\n", name)
wave_table_sels.each do |i|
$file.printf(" g_waveTable%sM%d,\n", name, max_from_i(i))
end
$file.printf("};\n\n")
end

overtones = (0..(FREQ_MAX / 256)).map { |i| max_from_i(i) }.uniq

overtones.each do |max|
generate_wave_table_pulse_25(max)
end

overtones.each do |max|
generate_wave_table_pulse_12(max)
end

overtones.each do |max|
generate_wave_table_pseudo_tri(max)
end

generate_wave_tables("Pulse25")
generate_wave_tables("Pulse12")
generate_wave_tables("PseudoTri")

$file.close
2 changes: 1 addition & 1 deletion vra8-ctrl.html
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@
</script>
</head>
<body>
<h1>VRA8 CTRL 5.1.0</h1>
<h1>VRA8 CTRL 5.1.1</h1>

<p>Digital Synth VRA8 Controller<p>

Expand Down
131 changes: 131 additions & 0 deletions vra8_ruby/generate_wave_table_2.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
require './common'
require './fft'

$pulse_25 = [
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
]

$pulse_12 = [
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
+80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80, +80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
]

$pseudo_tri = [
+5, +5, +5, +5, +5, +5, +5, +5, +15, +15, +15, +15, +15, +15, +15, +15,
+25, +25, +25, +25, +25, +25, +25, +25, +35, +35, +35, +35, +35, +35, +35, +35,
+45, +45, +45, +45, +45, +45, +45, +45, +55, +55, +55, +55, +55, +55, +55, +55,
+65, +65, +65, +65, +65, +65, +65, +65, +75, +75, +75, +75, +75, +75, +75, +75,
+75, +75, +75, +75, +75, +75, +75, +75, +65, +65, +65, +65, +65, +65, +65, +65,
+55, +55, +55, +55, +55, +55, +55, +55, +45, +45, +45, +45, +45, +45, +45, +45,
+35, +35, +35, +35, +35, +35, +35, +35, +25, +25, +25, +25, +25, +25, +25, +25,
+15, +15, +15, +15, +15, +15, +15, +15, +5, +5, +5, +5, +5, +5, +5, +5,
-5, -5, -5, -5, -5, -5, -5, -5, -15, -15, -15, -15, -15, -15, -15, -15,
-25, -25, -25, -25, -25, -25, -25, -25, -35, -35, -35, -35, -35, -35, -35, -35,
-45, -45, -45, -45, -45, -45, -45, -45, -55, -55, -55, -55, -55, -55, -55, -55,
-65, -65, -65, -65, -65, -65, -65, -65, -75, -75, -75, -75, -75, -75, -75, -75,
-75, -75, -75, -75, -75, -75, -75, -75, -65, -65, -65, -65, -65, -65, -65, -65,
-55, -55, -55, -55, -55, -55, -55, -55, -45, -45, -45, -45, -45, -45, -45, -45,
-35, -35, -35, -35, -35, -35, -35, -35, -25, -25, -25, -25, -25, -25, -25, -25,
-15, -15, -15, -15, -15, -15, -15, -15, -5, -5, -5, -5, -5, -5, -5, -5,
]

$fft_pulse_25 = fft($pulse_25)
$fft_pulse_12 = fft($pulse_12)
$fft_pseudo_tri = fft($pseudo_tri)

$file = File::open("wave_table_2.rb", "w")

def generate_wave_table(max, name, amp, ffta)
$file.printf("$wave_table_%s_m%d = [\n ", name, max)
a = ifft(lpf_fft(ffta, max), amp)
a.each_with_index do |level, n|
$file.printf("%+4d,", level)
if n == 255
$file.printf("\n")
elsif n % 16 == 15
$file.printf("\n ")
else
$file.printf(" ")
end
end
$file.printf("]\n\n")
end

def generate_wave_table_pulse_25(max)
generate_wave_table(max, "pulse_25", 1.0 / Math::sqrt(3.0), $fft_pulse_25)
end

def generate_wave_table_pulse_12(max)
generate_wave_table(max, "pulse_12", 1.0 / Math::sqrt(3.0), $fft_pulse_12)
end

def generate_wave_table_pseudo_tri(max)
generate_wave_table(max, "pseudo_tri", 1.0, $fft_pseudo_tri)
end

FREQ_MAX = 8819 # refs "freq_table.rb"

def max_from_i(i)
max = 128 / (i + 1)
max = 64 if max == 128
max = max - 1 if max % 2 == 0
return max
end

def generate_wave_tables(name)
wave_table_sels = (0..(FREQ_MAX / 256))
$file.printf("$wave_tables_%s = [\n", name)
wave_table_sels.each do |i|
$file.printf(" $wave_table_%s_m%d,\n", name, max_from_i(i))
end
$file.printf("]\n\n")
end

overtones = (0..(FREQ_MAX / 256)).map { |i| max_from_i(i) }.uniq

overtones.each do |max|
generate_wave_table_pulse_25(max)
end

overtones.each do |max|
generate_wave_table_pulse_12(max)
end

overtones.each do |max|
generate_wave_table_pseudo_tri(max)
end

generate_wave_tables("pulse_25")
generate_wave_tables("pulse_12")
generate_wave_tables("pseudo_tri")

$file.close

0 comments on commit aea359c

Please sign in to comment.