Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v5.1.1 #24

Merged
merged 2 commits into from
Feb 26, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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