diff --git a/.gitignore b/.gitignore index 1d3260f..ed06dc4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,10 @@ node_modules/ android/ +/.idea/.gitignore +/.idea/aws.xml +/.idea/editor.xml +/.idea/GodotJSExample.iml +/.idea/modules.xml +/.idea/prettier.xml +/.idea/vcs.xml diff --git a/addons/my_example_plugin/my_example_plugin.ts b/addons/my_example_plugin/my_example_plugin.ts index fbe8941..22e6637 100644 --- a/addons/my_example_plugin/my_example_plugin.ts +++ b/addons/my_example_plugin/my_example_plugin.ts @@ -1,21 +1,32 @@ -import { Control, EditorPlugin, is_instance_valid, Node, PackedScene, ResourceLoader } from "godot"; -import { tool } from "godot.annotations"; +import { + Control, + EditorPlugin, + is_instance_valid, + PackedScene, + ResourceLoader, +} from "godot"; +import { createClassBinder } from "godot.annotations"; -@tool() +const bind = createClassBinder(); + +@bind() +@bind.tool() export default class MyExamplePlugin extends EditorPlugin { - private dock!: Control; + private dock!: Control; - _enter_tree(): void { - console.log("MyExamplePlugin enter_tree"); - let scene = ResourceLoader.load("res://addons/my_example_plugin/my_example_dock.tscn"); - this.dock = scene.instantiate(); - this.add_control_to_bottom_panel(this.dock, "My Example Plugin (TS)"); - } + _enter_tree(): void { + console.log("MyExamplePlugin enter_tree"); + let scene = ( + ResourceLoader.load("res://addons/my_example_plugin/my_example_dock.tscn") + ); + this.dock = scene.instantiate(); + this.add_control_to_bottom_panel(this.dock, "My Example Plugin (TS)"); + } - _exit_tree(): void { - console.log("MyExamplePlugin exit_tree"); - this.remove_control_from_bottom_panel(this.dock); - this.dock.free(); - console.assert(!is_instance_valid(this.dock)); - } + _exit_tree(): void { + console.log("MyExamplePlugin exit_tree"); + this.remove_control_from_bottom_panel(this.dock); + this.dock.free(); + console.assert(!is_instance_valid(this.dock)); + } } diff --git a/audio_generator/fft.ts b/audio_generator/fft.ts index 6d3a548..66b9eb6 100644 --- a/audio_generator/fft.ts +++ b/audio_generator/fft.ts @@ -1,9 +1,9 @@ -/* +/* * Free FFT and convolution (TypeScript) - * + * * Copyright (c) 2022 Project Nayuki. (MIT License) * https://www.nayuki.io/page/free-small-fft-in-multiple-languages - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to @@ -21,155 +21,159 @@ * Software. */ - -/* +/* * Computes the discrete Fourier transform (DFT) of the given complex vector, storing the result back into the vector. * The vector can have any length. This is a wrapper function. */ -export function transform(real: Array | Float64Array, imag: Array | Float64Array): void { - const n: number = real.length; - // if (n != imag.length) - // throw new RangeError("Mismatched lengths"); - if (n == 0) - return; - else if ((n & (n - 1)) == 0) // Is power of 2 - transformRadix2(real, imag); - else // More complicated algorithm for arbitrary sizes - transformBluestein(real, imag); +export function transform( + real: Array | Float64Array, + imag: Array | Float64Array, +): void { + const n: number = real.length; + // if (n != imag.length) + // throw new RangeError("Mismatched lengths"); + if (n == 0) return; + else if ((n & (n - 1)) == 0) + // Is power of 2 + transformRadix2(real, imag); // More complicated algorithm for arbitrary sizes + else transformBluestein(real, imag); } - -/* +/* * Computes the inverse discrete Fourier transform (IDFT) of the given complex vector, storing the result back into the vector. * The vector can have any length. This is a wrapper function. This transform does not perform scaling, so the inverse is not a true inverse. */ -export function inverseTransform(real: Array | Float64Array, imag: Array | Float64Array): void { - transform(imag, real); +export function inverseTransform( + real: Array | Float64Array, + imag: Array | Float64Array, +): void { + transform(imag, real); } - -/* +/* * Computes the discrete Fourier transform (DFT) of the given complex vector, storing the result back into the vector. * The vector's length must be a power of 2. Uses the Cooley-Tukey decimation-in-time radix-2 algorithm. */ -function transformRadix2(real: Array | Float64Array, imag: Array | Float64Array): void { - // Length variables - const n: number = real.length; - // if (n != imag.length) - // throw new RangeError("Mismatched lengths"); - if (n == 1) // Trivial transform - return; - let levels: number = -1; - for (let i = 0; i < 32; i++) { - if (1 << i == n) - levels = i; // Equal to log2(n) - } - if (levels == -1) - throw new RangeError("Length is not a power of 2"); - - // Trigonometric tables - let cosTable = new Array(n / 2); - let sinTable = new Array(n / 2); - for (let i = 0; i < n / 2; i++) { - cosTable[i] = Math.cos(2 * Math.PI * i / n); - sinTable[i] = Math.sin(2 * Math.PI * i / n); - } - - // Bit-reversed addressing permutation - for (let i = 0; i < n; i++) { - const j: number = reverseBits(i, levels); - if (j > i) { - let temp: number = real[i]; - real[i] = real[j]; - real[j] = temp; - temp = imag[i]; - imag[i] = imag[j]; - imag[j] = temp; - } +function transformRadix2( + real: Array | Float64Array, + imag: Array | Float64Array, +): void { + // Length variables + const n: number = real.length; + // if (n != imag.length) + // throw new RangeError("Mismatched lengths"); + if (n == 1) + // Trivial transform + return; + let levels: number = -1; + for (let i = 0; i < 32; i++) { + if (1 << i == n) levels = i; // Equal to log2(n) + } + if (levels == -1) throw new RangeError("Length is not a power of 2"); + + // Trigonometric tables + let cosTable = new Array(n / 2); + let sinTable = new Array(n / 2); + for (let i = 0; i < n / 2; i++) { + cosTable[i] = Math.cos((2 * Math.PI * i) / n); + sinTable[i] = Math.sin((2 * Math.PI * i) / n); + } + + // Bit-reversed addressing permutation + for (let i = 0; i < n; i++) { + const j: number = reverseBits(i, levels); + if (j > i) { + let temp: number = real[i]; + real[i] = real[j]; + real[j] = temp; + temp = imag[i]; + imag[i] = imag[j]; + imag[j] = temp; } - - // Cooley-Tukey decimation-in-time radix-2 FFT - for (let size = 2; size <= n; size *= 2) { - const halfsize: number = size / 2; - const tablestep: number = n / size; - for (let i = 0; i < n; i += size) { - for (let j = i, k = 0; j < i + halfsize; j++, k += tablestep) { - const l: number = j + halfsize; - const tpre: number = real[l] * cosTable[k] + imag[l] * sinTable[k]; - const tpim: number = -real[l] * sinTable[k] + imag[l] * cosTable[k]; - real[l] = real[j] - tpre; - imag[l] = imag[j] - tpim; - real[j] += tpre; - imag[j] += tpim; - } - } + } + + // Cooley-Tukey decimation-in-time radix-2 FFT + for (let size = 2; size <= n; size *= 2) { + const halfsize: number = size / 2; + const tablestep: number = n / size; + for (let i = 0; i < n; i += size) { + for (let j = i, k = 0; j < i + halfsize; j++, k += tablestep) { + const l: number = j + halfsize; + const tpre: number = real[l] * cosTable[k] + imag[l] * sinTable[k]; + const tpim: number = -real[l] * sinTable[k] + imag[l] * cosTable[k]; + real[l] = real[j] - tpre; + imag[l] = imag[j] - tpim; + real[j] += tpre; + imag[j] += tpim; + } } - - // Returns the integer whose value is the reverse of the lowest 'width' bits of the integer 'val'. - function reverseBits(val: number, width: number): number { - let result: number = 0; - for (let i = 0; i < width; i++) { - result = (result << 1) | (val & 1); - val >>>= 1; - } - return result; + } + + // Returns the integer whose value is the reverse of the lowest 'width' bits of the integer 'val'. + function reverseBits(val: number, width: number): number { + let result: number = 0; + for (let i = 0; i < width; i++) { + result = (result << 1) | (val & 1); + val >>>= 1; } + return result; + } } - -/* +/* * Computes the discrete Fourier transform (DFT) of the given complex vector, storing the result back into the vector. * The vector can have any length. This requires the convolution function, which in turn requires the radix-2 FFT function. * Uses Bluestein's chirp z-transform algorithm. */ -function transformBluestein(real: Array | Float64Array, imag: Array | Float64Array): void { - // Find a power-of-2 convolution length m such that m >= n * 2 + 1 - const n: number = real.length; - // if (n != imag.length) - // throw new RangeError("Mismatched lengths"); - let m: number = 1; - while (m < n * 2 + 1) - m *= 2; - - // Trigonometric tables - let cosTable = new Array(n); - let sinTable = new Array(n); - for (let i = 0; i < n; i++) { - const j: number = i * i % (n * 2); // This is more accurate than j = i * i - cosTable[i] = Math.cos(Math.PI * j / n); - sinTable[i] = Math.sin(Math.PI * j / n); - } - - // Temporary vectors and preprocessing - let areal: Array = newArrayOfZeros(m); - let aimag: Array = newArrayOfZeros(m); - for (let i = 0; i < n; i++) { - areal[i] = real[i] * cosTable[i] + imag[i] * sinTable[i]; - aimag[i] = -real[i] * sinTable[i] + imag[i] * cosTable[i]; - } - let breal: Array = newArrayOfZeros(m); - let bimag: Array = newArrayOfZeros(m); - breal[0] = cosTable[0]; - bimag[0] = sinTable[0]; - for (let i = 1; i < n; i++) { - breal[i] = breal[m - i] = cosTable[i]; - bimag[i] = bimag[m - i] = sinTable[i]; - } - - // Convolution - let creal = new Array(m); - let cimag = new Array(m); - convolveComplex(areal, aimag, breal, bimag, creal, cimag); - - // Postprocessing - for (let i = 0; i < n; i++) { - real[i] = creal[i] * cosTable[i] + cimag[i] * sinTable[i]; - imag[i] = -creal[i] * sinTable[i] + cimag[i] * cosTable[i]; - } +function transformBluestein( + real: Array | Float64Array, + imag: Array | Float64Array, +): void { + // Find a power-of-2 convolution length m such that m >= n * 2 + 1 + const n: number = real.length; + // if (n != imag.length) + // throw new RangeError("Mismatched lengths"); + let m: number = 1; + while (m < n * 2 + 1) m *= 2; + + // Trigonometric tables + let cosTable = new Array(n); + let sinTable = new Array(n); + for (let i = 0; i < n; i++) { + const j: number = (i * i) % (n * 2); // This is more accurate than j = i * i + cosTable[i] = Math.cos((Math.PI * j) / n); + sinTable[i] = Math.sin((Math.PI * j) / n); + } + + // Temporary vectors and preprocessing + let areal: Array = newArrayOfZeros(m); + let aimag: Array = newArrayOfZeros(m); + for (let i = 0; i < n; i++) { + areal[i] = real[i] * cosTable[i] + imag[i] * sinTable[i]; + aimag[i] = -real[i] * sinTable[i] + imag[i] * cosTable[i]; + } + let breal: Array = newArrayOfZeros(m); + let bimag: Array = newArrayOfZeros(m); + breal[0] = cosTable[0]; + bimag[0] = sinTable[0]; + for (let i = 1; i < n; i++) { + breal[i] = breal[m - i] = cosTable[i]; + bimag[i] = bimag[m - i] = sinTable[i]; + } + + // Convolution + let creal = new Array(m); + let cimag = new Array(m); + convolveComplex(areal, aimag, breal, bimag, creal, cimag); + + // Postprocessing + for (let i = 0; i < n; i++) { + real[i] = creal[i] * cosTable[i] + cimag[i] * sinTable[i]; + imag[i] = -creal[i] * sinTable[i] + cimag[i] * cosTable[i]; + } } - -// /* +// /* // * Computes the circular convolution of the given real vectors. Each vector's length must be the same. // */ // function convolveReal(xvec: Array | Float64Array, yvec: Array | Float64Array, outvec: Array | Float64Array): void { @@ -179,44 +183,45 @@ function transformBluestein(real: Array | Float64Array, imag: Array | Float64Array, ximag: Array | Float64Array, - yreal: Array | Float64Array, yimag: Array | Float64Array, - outreal: Array | Float64Array, outimag: Array | Float64Array): void { - - const n: number = xreal.length; - // if (n != ximag.length || n != yreal.length || n != yimag.length - // || n != outreal.length || n != outimag.length) - // throw new RangeError("Mismatched lengths"); - - xreal = xreal.slice(); - ximag = ximag.slice(); - yreal = yreal.slice(); - yimag = yimag.slice(); - transform(xreal, ximag); - transform(yreal, yimag); - - for (let i = 0; i < n; i++) { - const temp: number = xreal[i] * yreal[i] - ximag[i] * yimag[i]; - ximag[i] = ximag[i] * yreal[i] + xreal[i] * yimag[i]; - xreal[i] = temp; - } - inverseTransform(xreal, ximag); - - for (let i = 0; i < n; i++) { // Scaling (because this FFT implementation omits it) - outreal[i] = xreal[i] / n; - outimag[i] = ximag[i] / n; - } + xreal: Array | Float64Array, + ximag: Array | Float64Array, + yreal: Array | Float64Array, + yimag: Array | Float64Array, + outreal: Array | Float64Array, + outimag: Array | Float64Array, +): void { + const n: number = xreal.length; + // if (n != ximag.length || n != yreal.length || n != yimag.length + // || n != outreal.length || n != outimag.length) + // throw new RangeError("Mismatched lengths"); + + xreal = xreal.slice(); + ximag = ximag.slice(); + yreal = yreal.slice(); + yimag = yimag.slice(); + transform(xreal, ximag); + transform(yreal, yimag); + + for (let i = 0; i < n; i++) { + const temp: number = xreal[i] * yreal[i] - ximag[i] * yimag[i]; + ximag[i] = ximag[i] * yreal[i] + xreal[i] * yimag[i]; + xreal[i] = temp; + } + inverseTransform(xreal, ximag); + + for (let i = 0; i < n; i++) { + // Scaling (because this FFT implementation omits it) + outreal[i] = xreal[i] / n; + outimag[i] = ximag[i] / n; + } } - function newArrayOfZeros(n: number): Array { - let result: Array = []; - for (let i = 0; i < n; i++) - result.push(0); - return result; + let result: Array = []; + for (let i = 0; i < n; i++) result.push(0); + return result; } diff --git a/audio_generator/generator_demo.ts b/audio_generator/generator_demo.ts index 375f9a2..6d48758 100644 --- a/audio_generator/generator_demo.ts +++ b/audio_generator/generator_demo.ts @@ -1,226 +1,8216 @@ -import { AudioEffectSpectrumAnalyzer, AudioServer, AudioStreamGenerator, AudioStreamGeneratorPlayback, AudioStreamPlayer, Color, Label, Line2D, Node, Vector2 } from "godot"; -import { onready } from "godot.annotations"; +import { + AudioStreamGenerator, + AudioStreamGeneratorPlayback, + AudioStreamPlayer, + Color, + Label, + Line2D, + Node, + Vector2, +} from "godot"; +import { createClassBinder } from "godot.annotations"; import { transform as fft } from "./fft"; +const bind = createClassBinder(); + const zzfxm = require("libs/zzfxm_gn"); // https://keithclark.github.io/ZzFXM/ class SongData { - private _songs: any[] = []; - - access(index: number) { - if (typeof this._songs[index] === "undefined") { - if (typeof this._songs[index] === "undefined") { - this._songs[index] = index == 0 ? { - // Song data for "I am back". Original song by Sky. - "name": "I am back", - "samples": [[[1.8, 0, 72, , , .2, , 4, -2, 6, 50, .15, , 6], [, 0, 655, , , .09, 3, 1.65, , , , , .02, 3.8, -.1, , .2], [1.2, 0, 23, , , .2, 3, 4, , , 3, .9, .05], [1.5, 0, 740, , , .15, 2, .2, -.1, -.15, 9, .02, , .1, .12, , .06]], [[[3, -1, 13, 13, 13, 8, 13, , , , , , , , , , , , 11, 11, 11, 6, 11, , , , , , , , , , , , 10, 10, 10, 6, 10, , , , , , , , , 6, 8, 10, 8, 8, 8, 5, 13, , 8, 8, 8, 5, 13, , , , , ,], [, 1, 25, , 25, , , , , , , , , , , , , 25, 25, , 25, , , , , , , 25, , , 25, , 25, 25, 25, , 25, , , , , , , , , , , 25, 25, 25, 25, , 25, , , , , , , , , , , , , ,], [2, -1, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, , , 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, ,]], [[3, -1, 13, 13, 13, 8, 13, , , , , , , , , , , , 11, 11, 11, 6, 11, , , , , , , , , , , , 10, 10, 10, 6, 10, , , , , , , , , 6, 8, 10, 8, 8, 8, 5, 13, , 8, 8, 8, 5, 13, 8, 8, 8, 5, 13], [2, -1, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, 27, 11, , 23, , 11, 11, 23, 11, , 11, 23, 11, 11, 11, 23, 22, 18, , 30, , 18, 18, 30, 18, , 18, 30, 18, 18, 18, 30, 22, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, ,], [, 1, 25, , 25, , , , , , , , , , , , , 25, 25, , 25, , , , , , , , , , , , , , 25, , 25, , , , , , , , , , , 25, 25, 25, 25, , 25, , , , , , , , , , , , , ,], [1, 1, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 13, 13, 13, 13, 13, 13, 13, 13]], [[3, -1, 13, 13, 13, 8, 13, , 13, 15, 17, 17, 15, 13, 20, 20, 18, 17, 18, , , , 17, , 15, , , , 17, , 18, , 22, 22, 22, , 18, , , , 25, 25, 25, , 22, , , 18, 20, 22, 20, , , , , , , , , , , , , , , ,], - [2, -1, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, 27, 11, , 23, , 11, 11, 23, 11, , 11, 23, 11, 11, 11, 23, 22, 18, , 30, , 18, 18, 30, 18, , 18, 30, 18, 18, 18, 30, 22, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, ,], [, 1, 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , ,], [1, 1, , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, , 13, , , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, 13, , 13]], [[3, -1, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 11, , 23, , 11, 11, 23, 11, , 11, 23, 11, 11, 11, 23, , 10, , 22, , 10, 10, 22, 10, , 10, 22, 10, 10, 6, 8, 10, 20, 25, 20, 20, 25, 20, , 20, 25, 20, 20, 20, 25, , 20, ,], [2, -1, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, ,], - [, 1, 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , ,], [1, 1, , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, , 13, , , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, 13, , 13]], [[3, -1, 13, , , , , , 8, , 17, 15, 13, , 17, 15, 13, , 15, , , , 10, 13, 15, 10, 13, 15, 10, 13, 15, 10, 13, 15, 12, , , , , , 8, 15, , , , , 17, 15, 13, 8, 13, , , , , , 10, 8, , 20, 20, 20, 20, 20, 20, 20], [2, -1, 13, , 25, , 13, 13, 25, 13, , 13, 25, 13, 13, 13, 25, , 15, , 27, , 15, 15, 27, 15, , 15, 27, 15, 15, 15, 27, 32, 20, , 32, , 20, 20, 32, 20, , 20, 32, 20, 20, 20, 32, , 13, , 25, , 13, 13, 25, 20, , 20, 32, 20, 20, 20, 32, ,], [, 1, 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , ,], [1, 1, , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, , 13, , , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, 13, , 13]], [[3, -1, 13, , , , , , 8, , 17, , , , 18, 17, 15, , 18, , , , 13, , , , 10, , , , 6, , , , 8, 12, 15, 12, 20, , 8, 12, 15, 12, 20, , 22, 20, 15, , 13, , , , , , 10, , 8, , , , , 8, 20, 8], [2, -1, 13, , 25, 25, 13, , 25, 25, 13, , 25, 25, 13, , 25, 25, 15, , 27, 27, 15, , 27, 27, 15, , 27, 27, 15, , 27, 27, 20, , 32, 32, 20, , 32, 32, 20, , 32, 32, 20, , 32, 32, 13, , 25, 25, 13, , 25, 25, 20, , 32, 32, 20, , 32, 34], [, 1, 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , ,], [1, 1, , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, , 13, , , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, 13, , 13]], [[3, -1, 13, , , , , , 8, , 17, , , , 18, 17, 15, , 18, , , , 13, , , , 10, , , , 6, , , , 8, 12, 15, 12, 20, , 8, 12, 15, 12, 20, , 22, 20, 15, , 13, , , , , , 10, , 8, , , , , 8, 20, 8], - [, 1, 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , ,], [1, 1, , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, , 13, , , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, 13, , 13]], [[, 1, 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , , , 25, 25, , 25, 25, , , , , , 25, , , , 25, , , 25, , , , 25, 25, 25, 25, 25], [1, 1, , , , , 13, , , , , , , , 13, , , , , , , , 13, , , , , , , , 13, , 13, , , , , , 13, , , , , , , , 13, , , , , , , , 13, 13, , 13, , 13, 13, 13, 13, 13, 13, 13]]], [0, 1, 2, 2, 3, 3, 2, 2, 4, 4, 5, 6, 6, 7, 2, 2, 3]], - } : { - // Song data for "Sanxion (Loader)". Original song by Rob Hubbard. - "name": "Sanxion", - "samples": [[[.4, 0, 1e4, , , , , , , , , , .01, 6.8, -.2], [1.4, 0, 84, , , , , .7, , , , .5, , 6.7, 1, .01], [, 0, 60, , .1, , 2], [2, 0, 360, , , .12, 2, 2, , , , , , 9, , .1], [.75, 0, 586, , , .25, 6], [2, 0, 360, , , .375, 2, 3.5], [1.2, 0, 490, , .25, .45, , , , , , , .2, , , , , , , .1], [.75, 0, 386, , , .25, 6]], [[[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20], [, 1, 32, 22, 22, 32, 32, 22, 32, 27, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 27, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 27, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.5, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.5, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.5, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [4, 1, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 24.75, 20.75, , , , , , , 24.75, 20.75, , , , 21.75, 20.75, , 24.75, 20.75, , , , , , , 24.75, 20.75, , , , 21.75, 20.75]], [[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 6, , , , , , 6, , 6, , , , , , 6, , 13, , , , , , 13, , 13, , , , , , 13, , 8, , , , , , 8, , 8, , , , , , 8, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 6, , 25, 13, 13, 25, 13, , 13, , 25, 13.75, 13, 25, 13, , 25, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [5, 1, 20, 20, 15, , 18, , 13, 15, , 11, , 6, 8, , 18, 20, 11, 11, 13, , 10, , 13, 18, 23, 23, 22, , 18, , 13, , 11, 11, 13, , 25, , 11, 13, 25, 25, 11, , 13, , 6, , 8, , , , , , , , , , , , , , , ,]], - [[, -1, 6, , , , , , 6, , 6, , , , , , 6, , 11, , , , , , 11, , 11, , , , , , 11, , 13, , , , , , 13, , 13, , , , , , 13, , 8, , , , , , 8, , 8, , , , , , 8, ,], [2, -1, , 18, 6, 6, 18, 6, , 6, , 18, , 6, 18, 6, , 6, , 23, 11, 11, 23, 11, , 23, , 23, , 11, 23, 11, , 11, , 25, 13, 13, 25, 13, , 13, , 25, 13.75, 13, 25, 13, , 25, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [5, 1, 18, 18, 13, , 11, , 10, 11, , 11, , 13, 10, , 11, 13, 23, 23, 22, , 18, , 13, , 11, 10, , 18, 11, , 11, 18, 11, 11, 13, , 25, , 18, 23, 25, 23, 18, , 23, 23, 18, , 20, , 20, 18, 11, , 6, 8, , , , , , , , ,]], [[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.5, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.5], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,]], [[, -1, 11, , , , , , 11, , 11, , , , , , 11, , 11, , , , , , 11, , 11, , , , , , 11, , 16, , , , , , 16, , 16, , , , , , 16, , 16, , , , , , 16, , 16, , , , , , 16, ,], [2, -1, , 23, 11, 11, 23, 11, , 11, , 23, , 11, 23, 11, , 23, , 23, 11, 11, 23, 11, , 11, , 23, , 11, 23, 11, , 11, , 28, 16, 16, 28, 16, , 16, , 28, , 16, 28, 16, , 16, , 28, 16, 16, 28, 16, , 16, , 28, , 16, 28, 16, , 16], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], - [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 15, , , , , , , , , , , , , , , , 18, , , , , , , , , , , , 15, 18, 15, 18, 18, , , , 20, , , , , , , , , , , , 23, , , , , , , , , , , , 20, 23, 20, 23]], [[, -1, 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, , 15, , , , , , 15, , 15, , , , , , 15, , 15, , , , , , 15, , 15, , , , , , 15, ,], [2, -1, , 25, 13, 13, 25, 13, , 25, , 25, , 13, 25, 13, , 13, , 25, 13, 13, 25, 13, , 25, , 25, , 13, 25, 13, , 25, , 27, 15, 15, 27, 15, , 27, , 27, , 15, 27, 15, , 15, , 27, 15, 15, 27, 15, , 27, , 27, , 15, 27, 15, , 15], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 25, , , , , , , , , , , , , , , , , , , , , , , , , , , , 20, 23, 25, , 27, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,]], [[2, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [4, 1, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, , , , , , , , ,], [7, 1, , , , , , , , , , , , , , , , , , , , , , , , , 18, 18, , 18, 13, 13, 10, 10]], [[, -1, 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, ,], [2, -1, , 16, 4, 4, 16, 4, , 16, , 16, , 4, 16, 4, , 16, , 16, 4, 4, 16, 4, , 4, , 16, , 4, 16, 4, , 4, , 25, 13, 13, 25, 13, , 13, , 25, , 13, 25, 13, , 13, , 25, 13, 13, 25, 13, , 25, , 25, , 13, 25, 13, , 13], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], - [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 4, , , , , , 11, , , , , , 16, , , , 21, , , , , , 20, , , , , , 20, , , , 11, , , , , , 13, , , , , , 13, , , , 11, , , , , , 13, , , 13, , , 11, 11, 13, 13]], [[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 8, , , , , , 18, , , , , , , , , , 11, , , , , , 22, , , , , , , , , , , , , , 18, , , , , , , , , , , , 18, 18, 18, 18, 18, 18, 18, 18, 20, 20, 20, 20, 18, 18, 18, 18]], [[, -1, 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, ,], [2, -1, , 16, 4, 4, 16, 4, , 16, , 16, , 4, 16, 4, , 16, , 16, 4, 4, 16, 4, , 4, , 16, , 4, 16, 4, , 4, , 25, 13, 13, 25, 13, , 13, , 25, , 13, 25, 13, , 13, , 25, 13, 13, 25, 13, , 25, , 25, , 13, 25, 13, , 13], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], - [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 4.25, , , , 16, , 16, , , , , , , , 16, , , , 18, , 15, , , , 13, , 11, , , , , , 1, , , , 16, , 16, , , , , , , , 21, , , , 23, , 20, , , , 18, , 16, , 11, , 9, ,]], [[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 11, , , , , , 9, , , , , , 8, , , , 16, , , , , , 15, , , , , , 15, , , , 6, , , , , , 13, , , , , , 18, , , , 23, 22.5, 22.5, 22.37, 22.37, 22.5, 22.5, 22.37, 22.37, 22.5, 22.5, 22.37, 22.37, 22.5, 22.5, 22.37]], [[, -1, 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, ,], [2, -1, , 16, 4, 4, 16, 4, , 16, , 16, , 4, 16, 4, , 16, , 16, 4, 4, 16, 4, , 4, , 16, , 4, 16, 4, , 4, , 25, 13, 13, 25, 13, , 13, , 25, , 13, 25, 13, , 13, , 25, 13, 13, 25, 13, , 25, , 25, , 13, 25, 13, , 13], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 4, , , , , , , , , , , , , , , , , 16, 16, 16, 15, 16, 16, 16, 15, 16, 16, 16, 4, , 6, , 8, , , , , , , , , , , , , , , , , 20, 20, 20, 19, 20, 20, 20, 19, 20, 20, 20, 8, , 9, ,]], - [[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 20, , , , , , 21, , , , , , 20, , , , 16, , , , 15, , 11, , , , 8, , , , , , 6, , , , , , 13, , , , , , 18, , , , 30, , , , , , 25, , 23, , 22, , 18, , 13, ,]], [[, -1, 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 4, , , , , , 4, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, , 13, , , , , , 13, ,], [2, -1, , 16, 4, 4, 16, 4, , 16, , 16, , 4, 16, 4, , 16, , 16, 4, 4, 16, 4, , 4, , 16, , 4, 16, 4, , 4, , 25, 13, 13, 25, 13, , 13, , 25, , 13, 25, 13, , 13, , 25, 13, 13, 25, 13, , 25, , 25, , 13, 25, 13, , 13], [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 4.25, , 3, , 4, , 11, , 16, , , , 23, , 20, , 8, , 8.25, , 20, , , , 21, , , , 23, , , , , , , , 23, , , , 21, , , , 20, , 8, 8, 8, 1, 3, , 4, , 8, , 13, , 16, , 20, , 21, ,]], [[, -1, 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 8, , , , , , 8, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, , 6, , , , , , 6, ,], [2, -1, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 20, , 20, 8, 8, 20, 8, , 8, , 20, , 8, 20, 8, , 8, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18, , 18, 6, 6, 18, 6, , 18, , 18, , 6, 18, 6, , 18], - [, 1, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32, 32, 22, 22, 32, 32, 22, 32, 22, 32, 22, 22, 32, 32, 22, 32, 32], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,], [6, 1, 11, , , , , , , , , , , , , , , , , 23, 23, 23, 22, 23, 21, , 20, , 15, , 11, , 8, , 6, , , , , , 8, , , , , , 10, , , , 11, , , , , , 13, , , , , , 16, , , ,]], [[4, -1, 15, 15, 15, , 15, , 15, 15, , 15, , 15, 15, , 15, 15, 15, 15, 15, , 15, , 15, 15, 27, 15, , 15, 15, , 15, 15, 15, 15, 15, , 15, , 15, 15, 15, 15, 15, , 15, 15, 15, , 15, , 15, 15, 15, , 15, 15, , , , , , , , ,], [1, -1, 20, , , 20, , , 20, 22.5, 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25, 20, , , 20, , , 20, , 20, , , 20, , , 20, 20.25], [, -1, , 22, 22, , , 22, , , , 22, 22, , , 22, , , , 22, 22, , , 22, , 22, , 22, 22, , , 22, , , , 22, 22, , , 22, , 22, , 22, 22, , , 22, , , , 22, 22, , , 22, , 22, , 22, 22, , , 22, , ,], [3, -1, , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , , , , , , 32, , , ,]]], [0, 1, 2, 3, 2, 4, 5, 6, 1, 2, 3, 7, 10, 9, 8, 13, 12, 11, 14, 4, 5, 15, 6]] - }; - } else if (index == 1) { - - } - } - return this._songs[index]; + private _songs: any[] = []; + + access(index: number) { + if (typeof this._songs[index] === "undefined") { + if (typeof this._songs[index] === "undefined") { + this._songs[index] = + index == 0 + ? { + // Song data for "I am back". Original song by Sky. + name: "I am back", + samples: [ + [ + [1.8, 0, 72, , , 0.2, , 4, -2, 6, 50, 0.15, , 6], + [ + , + 0, + 655, + , + , + 0.09, + 3, + 1.65, + , + , + , + , + 0.02, + 3.8, + -0.1, + , + 0.2, + ], + [1.2, 0, 23, , , 0.2, 3, 4, , , 3, 0.9, 0.05], + [ + 1.5, + 0, + 740, + , + , + 0.15, + 2, + 0.2, + -0.1, + -0.15, + 9, + 0.02, + , + 0.1, + 0.12, + , + 0.06, + ], + ], + [ + [ + [ + 3, + -1, + 13, + 13, + 13, + 8, + 13, + , + , + , + , + , + , + , + , + , + , + , + 11, + 11, + 11, + 6, + 11, + , + , + , + , + , + , + , + , + , + , + , + 10, + 10, + 10, + 6, + 10, + , + , + , + , + , + , + , + , + 6, + 8, + 10, + 8, + 8, + 8, + 5, + 13, + , + 8, + 8, + 8, + 5, + 13, + , + , + , + , + , + ], + [ + , + 1, + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + , + , + 25, + 25, + , + 25, + , + , + , + , + , + , + 25, + , + , + 25, + , + 25, + 25, + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + 25, + 25, + 25, + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + , + , + , + ], + [ + 2, + -1, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + , + , + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + ], + ], + [ + [ + 3, + -1, + 13, + 13, + 13, + 8, + 13, + , + , + , + , + , + , + , + , + , + , + , + 11, + 11, + 11, + 6, + 11, + , + , + , + , + , + , + , + , + , + , + , + 10, + 10, + 10, + 6, + 10, + , + , + , + , + , + , + , + , + 6, + 8, + 10, + 8, + 8, + 8, + 5, + 13, + , + 8, + 8, + 8, + 5, + 13, + 8, + 8, + 8, + 5, + 13, + ], + [ + 2, + -1, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + 27, + 11, + , + 23, + , + 11, + 11, + 23, + 11, + , + 11, + 23, + 11, + 11, + 11, + 23, + 22, + 18, + , + 30, + , + 18, + 18, + 30, + 18, + , + 18, + 30, + 18, + 18, + 18, + 30, + 22, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + ], + [ + , + 1, + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + , + , + 25, + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + , + , + , + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + 25, + 25, + 25, + 25, + , + 25, + , + , + , + , + , + , + , + , + , + , + , + , + , + ], + [ + 1, + 1, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + ], + ], + [ + [ + 3, + -1, + 13, + 13, + 13, + 8, + 13, + , + 13, + 15, + 17, + 17, + 15, + 13, + 20, + 20, + 18, + 17, + 18, + , + , + , + 17, + , + 15, + , + , + , + 17, + , + 18, + , + 22, + 22, + 22, + , + 18, + , + , + , + 25, + 25, + 25, + , + 22, + , + , + 18, + 20, + 22, + 20, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ], + [ + 2, + -1, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + 27, + 11, + , + 23, + , + 11, + 11, + 23, + 11, + , + 11, + 23, + 11, + 11, + 11, + 23, + 22, + 18, + , + 30, + , + 18, + 18, + 30, + 18, + , + 18, + 30, + 18, + 18, + 18, + 30, + 22, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + ], + [ + , + 1, + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + ], + [ + 1, + 1, + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + 13, + , + 13, + ], + ], + [ + [ + 3, + -1, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 11, + , + 23, + , + 11, + 11, + 23, + 11, + , + 11, + 23, + 11, + 11, + 11, + 23, + , + 10, + , + 22, + , + 10, + 10, + 22, + 10, + , + 10, + 22, + 10, + 10, + 6, + 8, + 10, + 20, + 25, + 20, + 20, + 25, + 20, + , + 20, + 25, + 20, + 20, + 20, + 25, + , + 20, + , + ], + [ + 2, + -1, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + ], + [ + , + 1, + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + ], + [ + 1, + 1, + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + 13, + , + 13, + ], + ], + [ + [ + 3, + -1, + 13, + , + , + , + , + , + 8, + , + 17, + 15, + 13, + , + 17, + 15, + 13, + , + 15, + , + , + , + 10, + 13, + 15, + 10, + 13, + 15, + 10, + 13, + 15, + 10, + 13, + 15, + 12, + , + , + , + , + , + 8, + 15, + , + , + , + , + 17, + 15, + 13, + 8, + 13, + , + , + , + , + , + 10, + 8, + , + 20, + 20, + 20, + 20, + 20, + 20, + 20, + ], + [ + 2, + -1, + 13, + , + 25, + , + 13, + 13, + 25, + 13, + , + 13, + 25, + 13, + 13, + 13, + 25, + , + 15, + , + 27, + , + 15, + 15, + 27, + 15, + , + 15, + 27, + 15, + 15, + 15, + 27, + 32, + 20, + , + 32, + , + 20, + 20, + 32, + 20, + , + 20, + 32, + 20, + 20, + 20, + 32, + , + 13, + , + 25, + , + 13, + 13, + 25, + 20, + , + 20, + 32, + 20, + 20, + 20, + 32, + , + ], + [ + , + 1, + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + ], + [ + 1, + 1, + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + 13, + , + 13, + ], + ], + [ + [ + 3, + -1, + 13, + , + , + , + , + , + 8, + , + 17, + , + , + , + 18, + 17, + 15, + , + 18, + , + , + , + 13, + , + , + , + 10, + , + , + , + 6, + , + , + , + 8, + 12, + 15, + 12, + 20, + , + 8, + 12, + 15, + 12, + 20, + , + 22, + 20, + 15, + , + 13, + , + , + , + , + , + 10, + , + 8, + , + , + , + , + 8, + 20, + 8, + ], + [ + 2, + -1, + 13, + , + 25, + 25, + 13, + , + 25, + 25, + 13, + , + 25, + 25, + 13, + , + 25, + 25, + 15, + , + 27, + 27, + 15, + , + 27, + 27, + 15, + , + 27, + 27, + 15, + , + 27, + 27, + 20, + , + 32, + 32, + 20, + , + 32, + 32, + 20, + , + 32, + 32, + 20, + , + 32, + 32, + 13, + , + 25, + 25, + 13, + , + 25, + 25, + 20, + , + 32, + 32, + 20, + , + 32, + 34, + ], + [ + , + 1, + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + ], + [ + 1, + 1, + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + 13, + , + 13, + ], + ], + [ + [ + 3, + -1, + 13, + , + , + , + , + , + 8, + , + 17, + , + , + , + 18, + 17, + 15, + , + 18, + , + , + , + 13, + , + , + , + 10, + , + , + , + 6, + , + , + , + 8, + 12, + 15, + 12, + 20, + , + 8, + 12, + 15, + 12, + 20, + , + 22, + 20, + 15, + , + 13, + , + , + , + , + , + 10, + , + 8, + , + , + , + , + 8, + 20, + 8, + ], + [ + , + 1, + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + ], + [ + 1, + 1, + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + 13, + , + 13, + ], + ], + [ + [ + , + 1, + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + , + , + 25, + 25, + , + 25, + 25, + , + , + , + , + , + 25, + , + , + , + 25, + , + , + 25, + , + , + , + 25, + 25, + 25, + 25, + 25, + ], + [ + 1, + 1, + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + , + , + , + , + , + , + , + 13, + 13, + , + 13, + , + 13, + 13, + 13, + 13, + 13, + 13, + 13, + ], + ], + ], + [0, 1, 2, 2, 3, 3, 2, 2, 4, 4, 5, 6, 6, 7, 2, 2, 3], + ], + } + : { + // Song data for "Sanxion (Loader)". Original song by Rob Hubbard. + name: "Sanxion", + samples: [ + [ + [0.4, 0, 1e4, , , , , , , , , , 0.01, 6.8, -0.2], + [1.4, 0, 84, , , , , 0.7, , , , 0.5, , 6.7, 1, 0.01], + [, 0, 60, , 0.1, , 2], + [2, 0, 360, , , 0.12, 2, 2, , , , , , 9, , 0.1], + [0.75, 0, 586, , , 0.25, 6], + [2, 0, 360, , , 0.375, 2, 3.5], + [ + 1.2, + 0, + 490, + , + 0.25, + 0.45, + , + , + , + , + , + , + 0.2, + , + , + , + , + , + , + 0.1, + ], + [0.75, 0, 386, , , 0.25, 6], + ], + [ + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 27, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 27, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 27, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.5, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.5, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.5, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 4, + 1, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 24.75, + 20.75, + , + , + , + , + , + , + 24.75, + 20.75, + , + , + , + 21.75, + 20.75, + , + 24.75, + 20.75, + , + , + , + , + , + , + 24.75, + 20.75, + , + , + , + 21.75, + 20.75, + ], + ], + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 6, + , + 25, + 13, + 13, + 25, + 13, + , + 13, + , + 25, + 13.75, + 13, + 25, + 13, + , + 25, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 5, + 1, + 20, + 20, + 15, + , + 18, + , + 13, + 15, + , + 11, + , + 6, + 8, + , + 18, + 20, + 11, + 11, + 13, + , + 10, + , + 13, + 18, + 23, + 23, + 22, + , + 18, + , + 13, + , + 11, + 11, + 13, + , + 25, + , + 11, + 13, + 25, + 25, + 11, + , + 13, + , + 6, + , + 8, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ], + ], + [ + [ + , + -1, + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 11, + , + , + , + , + , + 11, + , + 11, + , + , + , + , + , + 11, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + ], + [ + 2, + -1, + , + 18, + 6, + 6, + 18, + 6, + , + 6, + , + 18, + , + 6, + 18, + 6, + , + 6, + , + 23, + 11, + 11, + 23, + 11, + , + 23, + , + 23, + , + 11, + 23, + 11, + , + 11, + , + 25, + 13, + 13, + 25, + 13, + , + 13, + , + 25, + 13.75, + 13, + 25, + 13, + , + 25, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 5, + 1, + 18, + 18, + 13, + , + 11, + , + 10, + 11, + , + 11, + , + 13, + 10, + , + 11, + 13, + 23, + 23, + 22, + , + 18, + , + 13, + , + 11, + 10, + , + 18, + 11, + , + 11, + 18, + 11, + 11, + 13, + , + 25, + , + 18, + 23, + 25, + 23, + 18, + , + 23, + 23, + 18, + , + 20, + , + 20, + 18, + 11, + , + 6, + 8, + , + , + , + , + , + , + , + , + ], + ], + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.5, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.5, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + ], + [ + [ + , + -1, + 11, + , + , + , + , + , + 11, + , + 11, + , + , + , + , + , + 11, + , + 11, + , + , + , + , + , + 11, + , + 11, + , + , + , + , + , + 11, + , + 16, + , + , + , + , + , + 16, + , + 16, + , + , + , + , + , + 16, + , + 16, + , + , + , + , + , + 16, + , + 16, + , + , + , + , + , + 16, + , + ], + [ + 2, + -1, + , + 23, + 11, + 11, + 23, + 11, + , + 11, + , + 23, + , + 11, + 23, + 11, + , + 23, + , + 23, + 11, + 11, + 23, + 11, + , + 11, + , + 23, + , + 11, + 23, + 11, + , + 11, + , + 28, + 16, + 16, + 28, + 16, + , + 16, + , + 28, + , + 16, + 28, + 16, + , + 16, + , + 28, + 16, + 16, + 28, + 16, + , + 16, + , + 28, + , + 16, + 28, + 16, + , + 16, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 15, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 18, + , + , + , + , + , + , + , + , + , + , + , + 15, + 18, + 15, + 18, + 18, + , + , + , + 20, + , + , + , + , + , + , + , + , + , + , + , + 23, + , + , + , + , + , + , + , + , + , + , + , + 20, + 23, + 20, + 23, + ], + ], + [ + [ + , + -1, + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 15, + , + , + , + , + , + 15, + , + 15, + , + , + , + , + , + 15, + , + 15, + , + , + , + , + , + 15, + , + 15, + , + , + , + , + , + 15, + , + ], + [ + 2, + -1, + , + 25, + 13, + 13, + 25, + 13, + , + 25, + , + 25, + , + 13, + 25, + 13, + , + 13, + , + 25, + 13, + 13, + 25, + 13, + , + 25, + , + 25, + , + 13, + 25, + 13, + , + 25, + , + 27, + 15, + 15, + 27, + 15, + , + 27, + , + 27, + , + 15, + 27, + 15, + , + 15, + , + 27, + 15, + 15, + 27, + 15, + , + 27, + , + 27, + , + 15, + 27, + 15, + , + 15, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 25, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 20, + 23, + 25, + , + 27, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ], + ], + [ + [ + 2, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 4, + 1, + 3, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + , + , + , + , + , + , + , + , + ], + [ + 7, + 1, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 18, + 18, + , + 18, + 13, + 13, + 10, + 10, + ], + ], + [ + [ + , + -1, + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + ], + [ + 2, + -1, + , + 16, + 4, + 4, + 16, + 4, + , + 16, + , + 16, + , + 4, + 16, + 4, + , + 16, + , + 16, + 4, + 4, + 16, + 4, + , + 4, + , + 16, + , + 4, + 16, + 4, + , + 4, + , + 25, + 13, + 13, + 25, + 13, + , + 13, + , + 25, + , + 13, + 25, + 13, + , + 13, + , + 25, + 13, + 13, + 25, + 13, + , + 25, + , + 25, + , + 13, + 25, + 13, + , + 13, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 4, + , + , + , + , + , + 11, + , + , + , + , + , + 16, + , + , + , + 21, + , + , + , + , + , + 20, + , + , + , + , + , + 20, + , + , + , + 11, + , + , + , + , + , + 13, + , + , + , + , + , + 13, + , + , + , + 11, + , + , + , + , + , + 13, + , + , + 13, + , + , + 11, + 11, + 13, + 13, + ], + ], + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 8, + , + , + , + , + , + 18, + , + , + , + , + , + , + , + , + , + 11, + , + , + , + , + , + 22, + , + , + , + , + , + , + , + , + , + , + , + , + , + 18, + , + , + , + , + , + , + , + , + , + , + , + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 20, + 20, + 20, + 20, + 18, + 18, + 18, + 18, + ], + ], + [ + [ + , + -1, + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + ], + [ + 2, + -1, + , + 16, + 4, + 4, + 16, + 4, + , + 16, + , + 16, + , + 4, + 16, + 4, + , + 16, + , + 16, + 4, + 4, + 16, + 4, + , + 4, + , + 16, + , + 4, + 16, + 4, + , + 4, + , + 25, + 13, + 13, + 25, + 13, + , + 13, + , + 25, + , + 13, + 25, + 13, + , + 13, + , + 25, + 13, + 13, + 25, + 13, + , + 25, + , + 25, + , + 13, + 25, + 13, + , + 13, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 4.25, + , + , + , + 16, + , + 16, + , + , + , + , + , + , + , + 16, + , + , + , + 18, + , + 15, + , + , + , + 13, + , + 11, + , + , + , + , + , + 1, + , + , + , + 16, + , + 16, + , + , + , + , + , + , + , + 21, + , + , + , + 23, + , + 20, + , + , + , + 18, + , + 16, + , + 11, + , + 9, + , + ], + ], + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 11, + , + , + , + , + , + 9, + , + , + , + , + , + 8, + , + , + , + 16, + , + , + , + , + , + 15, + , + , + , + , + , + 15, + , + , + , + 6, + , + , + , + , + , + 13, + , + , + , + , + , + 18, + , + , + , + 23, + 22.5, + 22.5, + 22.37, + 22.37, + 22.5, + 22.5, + 22.37, + 22.37, + 22.5, + 22.5, + 22.37, + 22.37, + 22.5, + 22.5, + 22.37, + ], + ], + [ + [ + , + -1, + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + ], + [ + 2, + -1, + , + 16, + 4, + 4, + 16, + 4, + , + 16, + , + 16, + , + 4, + 16, + 4, + , + 16, + , + 16, + 4, + 4, + 16, + 4, + , + 4, + , + 16, + , + 4, + 16, + 4, + , + 4, + , + 25, + 13, + 13, + 25, + 13, + , + 13, + , + 25, + , + 13, + 25, + 13, + , + 13, + , + 25, + 13, + 13, + 25, + 13, + , + 25, + , + 25, + , + 13, + 25, + 13, + , + 13, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 4, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 16, + 16, + 16, + 15, + 16, + 16, + 16, + 15, + 16, + 16, + 16, + 4, + , + 6, + , + 8, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 20, + 20, + 20, + 19, + 20, + 20, + 20, + 19, + 20, + 20, + 20, + 8, + , + 9, + , + ], + ], + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 20, + , + , + , + , + , + 21, + , + , + , + , + , + 20, + , + , + , + 16, + , + , + , + 15, + , + 11, + , + , + , + 8, + , + , + , + , + , + 6, + , + , + , + , + , + 13, + , + , + , + , + , + 18, + , + , + , + 30, + , + , + , + , + , + 25, + , + 23, + , + 22, + , + 18, + , + 13, + , + ], + ], + [ + [ + , + -1, + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 4, + , + , + , + , + , + 4, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + 13, + , + , + , + , + , + 13, + , + ], + [ + 2, + -1, + , + 16, + 4, + 4, + 16, + 4, + , + 16, + , + 16, + , + 4, + 16, + 4, + , + 16, + , + 16, + 4, + 4, + 16, + 4, + , + 4, + , + 16, + , + 4, + 16, + 4, + , + 4, + , + 25, + 13, + 13, + 25, + 13, + , + 13, + , + 25, + , + 13, + 25, + 13, + , + 13, + , + 25, + 13, + 13, + 25, + 13, + , + 25, + , + 25, + , + 13, + 25, + 13, + , + 13, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 4.25, + , + 3, + , + 4, + , + 11, + , + 16, + , + , + , + 23, + , + 20, + , + 8, + , + 8.25, + , + 20, + , + , + , + 21, + , + , + , + 23, + , + , + , + , + , + , + , + 23, + , + , + , + 21, + , + , + , + 20, + , + 8, + 8, + 8, + 1, + 3, + , + 4, + , + 8, + , + 13, + , + 16, + , + 20, + , + 21, + , + ], + ], + [ + [ + , + -1, + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 8, + , + , + , + , + , + 8, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + 6, + , + , + , + , + , + 6, + , + ], + [ + 2, + -1, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 20, + , + 20, + 8, + 8, + 20, + 8, + , + 8, + , + 20, + , + 8, + 20, + 8, + , + 8, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + , + 18, + 6, + 6, + 18, + 6, + , + 18, + , + 18, + , + 6, + 18, + 6, + , + 18, + ], + [ + , + 1, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 22, + 32, + 22, + 22, + 32, + 32, + 22, + 32, + 32, + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + [ + 6, + 1, + 11, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + 23, + 23, + 23, + 22, + 23, + 21, + , + 20, + , + 15, + , + 11, + , + 8, + , + 6, + , + , + , + , + , + 8, + , + , + , + , + , + 10, + , + , + , + 11, + , + , + , + , + , + 13, + , + , + , + , + , + 16, + , + , + , + ], + ], + [ + [ + 4, + -1, + 15, + 15, + 15, + , + 15, + , + 15, + 15, + , + 15, + , + 15, + 15, + , + 15, + 15, + 15, + 15, + 15, + , + 15, + , + 15, + 15, + 27, + 15, + , + 15, + 15, + , + 15, + 15, + 15, + 15, + 15, + , + 15, + , + 15, + 15, + 15, + 15, + 15, + , + 15, + 15, + 15, + , + 15, + , + 15, + 15, + 15, + , + 15, + 15, + , + , + , + , + , + , + , + , + ], + [ + 1, + -1, + 20, + , + , + 20, + , + , + 20, + 22.5, + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + 20, + , + , + 20, + , + , + 20, + , + 20, + , + , + 20, + , + , + 20, + 20.25, + ], + [ + , + -1, + , + 22, + 22, + , + , + 22, + , + , + , + 22, + 22, + , + , + 22, + , + , + , + 22, + 22, + , + , + 22, + , + 22, + , + 22, + 22, + , + , + 22, + , + , + , + 22, + 22, + , + , + 22, + , + 22, + , + 22, + 22, + , + , + 22, + , + , + , + 22, + 22, + , + , + 22, + , + 22, + , + 22, + 22, + , + , + 22, + , + , + ], + [ + 3, + -1, + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + , + , + , + , + 32, + , + , + , + ], + ], + ], + [ + 0, 1, 2, 3, 2, 4, 5, 6, 1, 2, 3, 7, 10, 9, 8, 13, 12, 11, + 14, 4, 5, 15, 6, + ], + ], + }; + } else if (index == 1) { + } } + return this._songs[index]; + } } const FFT_SIZE = 1024; class Visualizer { - private resolution = 32; - private real: Array = []; - private imag: Array = []; - private cache: Array = []; - private dirty = false; - - private get_level(index: number, rf: number) { - let value = 0; - for (let i = 0; i < rf; ++i) { - let e = index * rf + i; - if (e >= this.real.length) break; - value += Math.sqrt(this.real[e] * this.real[e] + this.imag[e] * this.imag[e]); - } - // return Math.max(0, Math.min(20, (value / rf) / 20)); - return Math.max(0, Math.min(2, (value / rf) / 6)); // scale and trunc - } + private resolution = 32; + private real: Array = []; + private imag: Array = []; + private cache: Array = []; + private dirty = false; - setup(samples: Array) { - this.real = samples; - this.dirty = true; + private get_level(index: number, rf: number) { + let value = 0; + for (let i = 0; i < rf; ++i) { + let e = index * rf + i; + if (e >= this.real.length) break; + value += Math.sqrt( + this.real[e] * this.real[e] + this.imag[e] * this.imag[e], + ); } + // return Math.max(0, Math.min(20, (value / rf) / 20)); + return Math.max(0, Math.min(2, value / rf / 6)); // scale and trunc + } - get results(): Array { - if (this.dirty) { - this.dirty = false; - this.imag.fill(0); - fft(this.real, this.imag); + setup(samples: Array) { + this.real = samples; + this.dirty = true; + } - const rf = Math.floor(this.real.length / this.resolution); - for (let i = 0; i < this.resolution; ++i) { - this.cache[i] = this.get_level(i, rf); - } - } + get results(): Array { + if (this.dirty) { + this.dirty = false; + this.imag.fill(0); + fft(this.real, this.imag); - return this.cache; + const rf = Math.floor(this.real.length / this.resolution); + for (let i = 0; i < this.resolution; ++i) { + this.cache[i] = this.get_level(i, rf); + } } + + return this.cache; + } } /** * Audio Generator Demo (TypeScript version) - * This is a demo showing how one can generate and play audio samples from TypeScript. - * + * This is a demo showing how one can generate and play audio samples from TypeScript. + * * @link https://godotengine.org/asset-library/asset/526 */ +@bind() export default class AudioGeneratorDemo extends Node { - @onready("Player") - player!: AudioStreamPlayer; - - private left = new Visualizer(); - private right = new Visualizer(); - private playback!: AudioStreamGeneratorPlayback; - private current_song = -1; - private loading_tag = 0; - private loading = false; - - // use cached Vector2 to avoid unnecessary garbages - private cached_frame = new Vector2(); - private frame_index = 0; - - private data = new SongData(); - private timer?: NodeJS.Timeout; - - _ready(): void { - // this.buffer = zzfx.generate(1.74,.05,598,.09,.26,.41,0,.24,0,0,-46,.07,.17,0,0,0,.09,.42,.28,.06); - (this.player.stream).mix_rate = zzfxm.zzfxR; - this.player.play(); - this.playback = this.player.get_stream_playback(); - this.timer = setInterval(() => { - this.draw("Left", this.left, Color.RED); - this.draw("Right", this.right, Color.BLUE); - }, 100); - this.load_song(0); - } + @bind.onready("Player") + player!: AudioStreamPlayer; - on_play_first_song() { - this.load_song(0); - } + private left = new Visualizer(); + private right = new Visualizer(); + private playback!: AudioStreamGeneratorPlayback; + private current_song = -1; + private loading_tag = 0; + private loading = false; + + // use cached Vector2 to avoid unnecessary garbages + private cached_frame = new Vector2(); + private frame_index = 0; + + private data = new SongData(); + private timer?: NodeJS.Timeout; + + _ready(): void { + // this.buffer = zzfx.generate(1.74,.05,598,.09,.26,.41,0,.24,0,0,-46,.07,.17,0,0,0,.09,.42,.28,.06); + (this.player.stream).mix_rate = zzfxm.zzfxR; + this.player.play(); + this.playback = ( + this.player.get_stream_playback() + ); + this.timer = setInterval(() => { + this.draw("Left", this.left, Color.RED); + this.draw("Right", this.right, Color.BLUE); + }, 100); + this.load_song(0); + } + + on_play_first_song() { + this.load_song(0); + } - on_play_second_song() { - this.load_song(1); + on_play_second_song() { + this.load_song(1); + } + + private async load_song(index: number) { + if (this.current_song === index) { + return; } - private async load_song(index: number) { - if (this.current_song === index) { - return; - } + this.current_song = index; - this.current_song = index; + const tag = ++this.loading_tag; + const info = this.data.access(this.current_song); + if (typeof info.fully_loaded === "undefined") { + this.loading = true; + this.on_song_changed(); - const tag = ++this.loading_tag; - const info = this.data.access(this.current_song); - if (typeof info.fully_loaded === "undefined") { - this.loading = true; + const galop = 10_000; + const gen = zzfxm.default(...info.samples); + info.cache = gen.next().value; + for (let i = 0; ; ++i) { + let res = gen.next(); + + if (res.done) { + console.log("song generation done:", info.name); + info.fully_loaded = true; + if (tag === this.loading_tag) { + this.loading = false; this.on_song_changed(); + } + break; + } + if (tag !== this.loading_tag) { + console.log("song generation cancelled:", info.name); + return; + } + if (!(i % galop)) { + const label =