Initial commit
Debut arranges: Bad Apple!!, The Rabbit Has Landed
This commit is contained in:
commit
77c69653e8
|
@ -0,0 +1,19 @@
|
|||
Copyright (C) 2022 Job Bautista
|
||||
|
||||
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
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,111 @@
|
|||
SoxMusicGen
|
||||
-----------
|
||||
|
||||
A Perl 5 module making it easier to create music with the power of SoX
|
||||
synths as well as your custom samples.
|
||||
|
||||
If you're one of these people:
|
||||
|
||||
- a Perl programmer
|
||||
- suck at reading sheet music
|
||||
- finds MML too difficult
|
||||
- too lazy to learn FamiTracker
|
||||
- think that scientific note duration is the best thing since sliced bread
|
||||
- used libsox.sh, the predecessor of this module
|
||||
|
||||
Then try this crappy module of mine!
|
||||
|
||||
Some features of this module:
|
||||
|
||||
- Easy to write syntax for inputting notes (e.g. "$qu:A4")
|
||||
- Inspired from korobeiniki.sh of the dsuni/bashtris repository
|
||||
- Supports multiple note harmonies ("$ei:A4/C5")
|
||||
- Unlike before in libsox.sh you can do as many notes as you want!
|
||||
- Like this: "$dei:C6/A5/G5/B5/F4/D3/G3/B4"
|
||||
- Supports every synth type included in SoX
|
||||
- You can use your own samples as well
|
||||
- Your samples should be encoded in a format supported by SoX, like wav
|
||||
- Adheres to the Unix philosophy of "do one thing and do it well"
|
||||
|
||||
What this library doesn't support:
|
||||
|
||||
- Harmonies with different durations or instruments
|
||||
- e.g. countermelodies and background melodies
|
||||
- I suggest doing two separate scripts, sox them into two files, then
|
||||
play both either merged or mixed
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
# Paste the following in your child script:
|
||||
|
||||
use lib 'path/to/module'; # most likely either .. or .
|
||||
use SoXMusicGen;
|
||||
|
||||
our @notes;
|
||||
|
||||
setTempo(BPM); # Replace "BPM" with integer
|
||||
setDefaultSynthType(""); # Choose from sin, square, triangle, pluck, etc.
|
||||
our $maxSynthChannels=1; # Set as many as needed
|
||||
|
||||
# If using more than two channels...
|
||||
setDefaultSynthType("", "", ""); # Number of synths set must match number
|
||||
our $maxSynthChannels=4; # of audio channels
|
||||
|
||||
# If you're using custom samples...
|
||||
our $synthSampleRate=44100; # Your synth sample rate must match the SR of
|
||||
# your custom samples, which might be 44.1kHz.
|
||||
our $maxSamplesChannels=2; # How much notes of your custom samples to play
|
||||
# at the same time. If your custom samples use 2
|
||||
# channels per note, set $maxSynthChannels to 4.
|
||||
# That's if you want to use both synths and samples
|
||||
our $samplesDir="path/to/samples"; # Every file must be formatted as
|
||||
# NOTE.ext, like A#4.wav and C3.aiff
|
||||
|
||||
# To print the sox pipes...
|
||||
createSynths(); # for synths
|
||||
createSamples(); # for custom samples
|
||||
|
||||
# Refer to the child scripts included in this repo for more examples
|
||||
|
||||
Example child script syntax
|
||||
---------------------------
|
||||
|
||||
./music.pl | xargs play -S -V1 # Plays into SoX once
|
||||
|
||||
./music.pl | xargs ./myplay-repeat.sh 1 # Plays into SoX twice
|
||||
|
||||
./music.pl | xargs ./mysox.sh music.wav # Saves into "music.wav" using SoX
|
||||
|
||||
./music.pl | head -n +37 | xargs play -S -V1 ; ./music.pl | tail -n +37 |
|
||||
xargs ./myplay-repeat.sh 3 # Plays line 1 to 37 of music.pl's output once,
|
||||
then plays the rest thrice
|
||||
|
||||
./music.pl | xargs ./mysox.sh - | cvlc - # Saves into stdout then pipes it into
|
||||
vlc
|
||||
./music.pl > music.txt # Redirects music.pl's output to a text file
|
||||
|
||||
./music.pl | xclip -i # Copies music.pl's output to XA_PRIMARY
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Copyright (C) 2022 Job Bautista
|
||||
|
||||
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
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,130 @@
|
|||
package SoXMusicGen;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
=begin
|
||||
Copyright (C) 2022 Job Bautista
|
||||
|
||||
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
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
=cut
|
||||
|
||||
use POSIX;
|
||||
|
||||
use Exporter qw(import);
|
||||
our @EXPORT = qw(setTempo setDefaultSynthType createSynths createSamples
|
||||
silence iterate $synthSampleRate $samplesDir
|
||||
$maxSynthChannels $maxSamplesChannels @notes
|
||||
$fu $ha $qu $ei $si
|
||||
$dha $dqu $dei $dsi
|
||||
$tqu $tei $tsi
|
||||
);
|
||||
|
||||
our @notes; # In the following format - "$duration:NOTE"
|
||||
|
||||
sub setTempo {
|
||||
my $BPM=$_[0];
|
||||
|
||||
# durations
|
||||
our $fu=240 / $BPM; # Whole note
|
||||
our $ha=120 / $BPM; # Half note
|
||||
our $qu=60 / $BPM; # Quarter note
|
||||
our $ei=30 / $BPM; # Eighth note
|
||||
our $si=15 / $BPM; # Sixteenth note
|
||||
our $dha=190 / $BPM; # Dotted-half note
|
||||
our $dqu=90 / $BPM; # Dotted-quarter note
|
||||
our $dei=45 / $BPM; # Dotted-eighth note
|
||||
our $dsi=22.5 / $BPM; # Dotted-sixteenth note
|
||||
our $tqu=40 / $BPM; # Triplet-quarter note
|
||||
our $tei=20 / $BPM; # Triplet-eighth note
|
||||
our $tsi=10 / $BPM; # Triplet-sixteenth note
|
||||
}
|
||||
|
||||
my @defaultsynth=("sin"); # Just in case you forget to specify synth type
|
||||
my @synthtype=@defaultsynth; # Number of default synths must match
|
||||
our $maxSynthChannels=1; # number of max channels to use
|
||||
sub setDefaultSynthType {
|
||||
@defaultsynth=@_;
|
||||
@synthtype=@defaultsynth;
|
||||
}
|
||||
|
||||
sub iterate {
|
||||
my @iteration=($_[0]..$_[1]);
|
||||
return @iteration;
|
||||
}
|
||||
|
||||
our $synthSampleRate=48000;
|
||||
|
||||
sub createSynths {
|
||||
foreach my $note (@notes) {
|
||||
my @currentNote = split(':', $note);
|
||||
print '"|sox -r ', $synthSampleRate, ' -n -p synth ',
|
||||
POSIX::floor($currentNote[0]*1000)/1000;
|
||||
my @pitches = split('/', uc $currentNote[1]);
|
||||
for my $currentSynthAndPitch (iterate(0,$maxSynthChannels-1)) {
|
||||
print ' ', $synthtype[$currentSynthAndPitch];
|
||||
if(exists($pitches[$currentSynthAndPitch])) {
|
||||
print ' ', $pitches[$currentSynthAndPitch];
|
||||
} else {
|
||||
print ' ', $pitches[-1];
|
||||
}
|
||||
}
|
||||
print '"', "\n";
|
||||
}
|
||||
@notes = (); # You usually want to reset the notes array after calling this
|
||||
}
|
||||
|
||||
sub silence { # needed because pluck synth doesn't support zero frequency
|
||||
createSynths(); # necessary because we will be changing
|
||||
@synthtype = (); # synth type
|
||||
for (iterate(0,@defaultsynth-1)) { # If number of default synths is 4,
|
||||
push (@synthtype, "sin"); # we create 4 sine synths
|
||||
} # sin, square, sawtooth, trapezium, and exp support freq=0
|
||||
push (@notes, "$_[0]:0");
|
||||
createSynths(); # get the silence printed
|
||||
@synthtype=@defaultsynth; # before we return to default synth
|
||||
}
|
||||
|
||||
our $samplesDir;
|
||||
our $maxSamplesChannels=1;
|
||||
|
||||
sub createSamples {
|
||||
foreach my $note (@notes) {
|
||||
my @currentNote = split(':', $note);
|
||||
my @pitches = split('/', uc $currentNote[1]);
|
||||
if($maxSamplesChannels == 1) {
|
||||
print '"|sox ', $samplesDir, '/', uc $pitches[0], '.* -p ',
|
||||
'trim 0 ', POSIX::floor($currentNote[0]*1000)/1000, '"', "\n";
|
||||
} else {
|
||||
print '"|sox -M ';
|
||||
for my $currentSample (iterate(0,$maxSamplesChannels-1)) {
|
||||
if(exists($pitches[$currentSample])) {
|
||||
print $samplesDir, '/', uc $pitches[$currentSample], '.* ';
|
||||
} else {
|
||||
print $samplesDir, '/', uc $pitches[-1], '.* ';
|
||||
}
|
||||
}
|
||||
print '-p trim 0 ',
|
||||
POSIX::floor($currentNote[0]*1000)/1000, '"', "\n";
|
||||
}
|
||||
}
|
||||
@notes = (); # You usually want to reset the notes array after calling this
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,8 @@
|
|||
__ ../.. __ ..\.. __ __ ___
|
||||
|__) ( ( | \ ) ) |__) |__) | |__
|
||||
|__) \_._/ |__/ \_._/ | | |___ |___
|
||||
|
||||
Bad Apple!!
|
||||
Composed by ZUN for Touhou Gensoukyou: Lotus Land Story
|
||||
Arranged by Job Bautista
|
||||
Apple ASCII art by Rudá Moura
|
|
@ -0,0 +1,339 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
=begin
|
||||
Copyright (C) 2022 Job Bautista
|
||||
|
||||
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
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
=cut
|
||||
|
||||
use lib '..';
|
||||
use SoXMusicGen;
|
||||
|
||||
our @notes;
|
||||
|
||||
setTempo(160);
|
||||
our $maxSynthChannels=4;
|
||||
our $maxSamplesChannels=2;
|
||||
setDefaultSynthType("sin", "sin", "sin", "sin"); # To match with our custom
|
||||
our $synthSampleRate=44100; # piano samples
|
||||
our $samplesDir=$ARGV[0];
|
||||
|
||||
# intro
|
||||
for (iterate(1,8)) {
|
||||
push (@notes, "$qu:1");
|
||||
}
|
||||
createSynths();
|
||||
|
||||
sub introcommon {
|
||||
push @notes, (
|
||||
"$ei:D#4",
|
||||
"$ei:A#4",
|
||||
"$ei:G#4",
|
||||
"$ei:A#4",
|
||||
"$ei:F#4",
|
||||
"$ei:A#4",
|
||||
"$ei:F4",
|
||||
"$ei:A#4"
|
||||
);
|
||||
}
|
||||
introcommon(); introcommon();
|
||||
push (@notes, "$ei:D#4");
|
||||
for (iterate(1,7)) {
|
||||
push (@notes, "$ei:D#6/A#5");
|
||||
createSamples();
|
||||
silence("$ei");
|
||||
}
|
||||
push (@notes, "$ei:D#6/A#5");
|
||||
|
||||
# fast bridge
|
||||
sub fastbridge {
|
||||
sub adff {
|
||||
push @notes, (
|
||||
"$si:A#5/F#5",
|
||||
"$si:D#5/A#5",
|
||||
"$si:F5/D#5",
|
||||
"$si:F#5/F5"
|
||||
);
|
||||
}
|
||||
adff(); adff(); adff();
|
||||
push @notes, (
|
||||
"$si:C#6/F#5",
|
||||
"$si:D#6/C#6",
|
||||
|
||||
"$si:A#5/D#6",
|
||||
"$si:D#5/A#5"
|
||||
);
|
||||
adff(); adff();
|
||||
push @notes, (
|
||||
"$si:A#5/F#5",
|
||||
"$si:D#5/A#5",
|
||||
|
||||
"$si:C#6/D#5",
|
||||
"$si:D#6/C#6",
|
||||
|
||||
"$si:A#5/D#6",
|
||||
"$si:G#5/A#5",
|
||||
"$si:F#5/G#5",
|
||||
"$si:F5/F#5",
|
||||
|
||||
"$si:B4/F5",
|
||||
"$si:B4/B4",
|
||||
|
||||
"$si:F#5/B4"
|
||||
);
|
||||
sub bbcdf {
|
||||
push @notes, (
|
||||
"$si:B4/F#5",
|
||||
"$si:B4/B4",
|
||||
|
||||
"$si:C#5/B4",
|
||||
"$si:D#5/C#5",
|
||||
"$si:F#5/D#5"
|
||||
);
|
||||
}
|
||||
bbcdf(); push @notes, ( "$si:B4/F#5", "$si:B4/B4", "$si:F#5/B4" );
|
||||
bbcdf(); push @notes, ( "$si:D5/F#5", "$si:D#5/D5", "$si:F5/D#5" );
|
||||
sub addf {
|
||||
push @notes, (
|
||||
"$si:A#4/F5",
|
||||
"$si:D5/A#4",
|
||||
"$si:D#5/D5",
|
||||
"$si:F5/D#5"
|
||||
);
|
||||
}
|
||||
addf(); addf();
|
||||
push @notes, (
|
||||
"$si:A#4/F5",
|
||||
"$si:A#4/A#4",
|
||||
"$si:G#4/A#4",
|
||||
"$si:F#4/G#4",
|
||||
"$si:F4/F#4"
|
||||
);
|
||||
}
|
||||
fastbridge(); fastbridge();
|
||||
|
||||
# verse 1
|
||||
sub verse1common {
|
||||
push @notes, (
|
||||
"$ei:D#5/D#4",
|
||||
"$ei:F5/F4",
|
||||
"$ei:F#5/F#4",
|
||||
"$ei:G#5/G#4",
|
||||
"$qu:A#5/A#4"
|
||||
);
|
||||
}
|
||||
verse1common();
|
||||
push @notes, (
|
||||
"$ei:D#5/D#4",
|
||||
"$ei:C#6/C#5",
|
||||
"$qu:A#5/A#4",
|
||||
"$qu:D#5/D#4",
|
||||
"$ei:A#5/A#4",
|
||||
"$ei:G#5/G#4",
|
||||
"$ei:F#5/F#4",
|
||||
"$ei:F5/F4"
|
||||
);
|
||||
verse1common();
|
||||
push @notes, (
|
||||
"$ei:G#5/G#4",
|
||||
"$ei:F#5/F#4",
|
||||
"$ei:F5/F4",
|
||||
"$ei:A#4/A#3",
|
||||
"$ei:F5/F4",
|
||||
"$ei:F#5/F#4",
|
||||
"$ei:F5/F4",
|
||||
"$ei:D#5/D#4",
|
||||
"$ei:D5/D4",
|
||||
"$ei:F5/F4"
|
||||
);
|
||||
verse1common();
|
||||
push @notes, (
|
||||
"$ei:G#5/G#4",
|
||||
"$ei:C#6/C#5",
|
||||
"$qu:D#6/D#5",
|
||||
"$qu:D#6/D#5",
|
||||
"$qu:F6/F5",
|
||||
"$qu:F#6/F#5",
|
||||
"$ei:D#6/D#5",
|
||||
"$ei:F6/F5",
|
||||
"$ei:F#6/F#5",
|
||||
"$ei:G#6/G#5",
|
||||
"$qu:A#6/A#5",
|
||||
"$ei:G#6/G#5",
|
||||
"$ei:F#6/F#5",
|
||||
"$qu:G#6/G#5",
|
||||
"$qu:F6/F5",
|
||||
"$qu:F#6/F#5",
|
||||
"$qu:G#6/G#5"
|
||||
);
|
||||
|
||||
# verse 2
|
||||
sub verse2common {
|
||||
push @notes, (
|
||||
"$ha:D#5/D#4",
|
||||
"$ei:D#5/D#4",
|
||||
"$ei:F5/F4",
|
||||
"$qu:F#5/F#4",
|
||||
"$dqu:F5/F4"
|
||||
);
|
||||
}
|
||||
verse2common();
|
||||
push @notes, (
|
||||
"$dqu:A#4/A#3",
|
||||
"$qu:F5/F4",
|
||||
"$qu:F5/F4",
|
||||
"$ei:F#5/F#4",
|
||||
"$dqu:D#5/D#4",
|
||||
"$qu:C#5/C#4",
|
||||
"$qu:C#5/C#4",
|
||||
"$ei:D#5/D#4",
|
||||
"$dqu:A#4/A#3",
|
||||
"$qu:D#5/D#4"
|
||||
);
|
||||
verse2common();
|
||||
push @notes, (
|
||||
"$dqu:F#5/F#4",
|
||||
"$qu:G#5/G#4",
|
||||
"$dqu:D#5/D#4",
|
||||
"$ei:A#5/A#4",
|
||||
"$fu:A#5/A#4",
|
||||
"$ei:G#5/G#4",
|
||||
"$ei:A#5/A#4",
|
||||
"$qu:C#6/C#5"
|
||||
);
|
||||
|
||||
# verse 3, which is basically a higher pitched verse 2
|
||||
sub verse3common {
|
||||
push @notes, (
|
||||
"$ha:D#6/D#5",
|
||||
"$ei:D#6/D#5",
|
||||
"$ei:F6/F5"
|
||||
);
|
||||
}
|
||||
verse3common;
|
||||
push @notes, (
|
||||
"$qu:F#6/F#5",
|
||||
"$dqu:F6/F5",
|
||||
"$dqu:A#5/A#4",
|
||||
"$qu:F6/F5",
|
||||
"$qu:F6/F5",
|
||||
"$ei:F#6/F#5",
|
||||
"$dqu:D#6/D#5",
|
||||
"$qu:C#6/C#5",
|
||||
"$qu:C#6/C#5",
|
||||
"$ei:D#6/D#5",
|
||||
"$dqu:A#5/A#4",
|
||||
"$qu:F6/F5"
|
||||
);
|
||||
verse3common();
|
||||
push @notes, (
|
||||
"$ei:F#6/F#5",
|
||||
"$ei:G#6/G#5",
|
||||
"$dqu:F6/F5",
|
||||
"$dqu:F#6/F#5",
|
||||
"$qu:G#6/G#5",
|
||||
"$dqu:D6/D5",
|
||||
"$dqu:A#5/A#4",
|
||||
"$qu:A#6/A#5",
|
||||
"$qu:G#6/G#5",
|
||||
"$qu:F#6/F#5",
|
||||
"$qu:F6/F5",
|
||||
"$qu:F#6/F#5"
|
||||
);
|
||||
|
||||
# verse 4
|
||||
sub verse4common {
|
||||
push @notes, (
|
||||
"$ei:G5/G4",
|
||||
"$qu:D5/D4",
|
||||
"$qu:G5/G4",
|
||||
"$ei:A#4/A#4",
|
||||
"$ei:D5/D4",
|
||||
"$ei:F5/F4",
|
||||
"$ei:G5/G4",
|
||||
"$ei:D5/D4",
|
||||
"$ei:A#4/A#3",
|
||||
"$qu:G5/G4",
|
||||
"$ei:G5/G4",
|
||||
"$ei:A5/A4",
|
||||
"$ei:A#5/A#4",
|
||||
"$ei:G5/G4",
|
||||
"$qu:D5/D4",
|
||||
"$qu:G5/G4",
|
||||
"$ei:D5/D4",
|
||||
"$ei:G5/G4",
|
||||
"$ei:C6/C5",
|
||||
"$ha:A#5/A#4"
|
||||
);
|
||||
}
|
||||
verse4common();
|
||||
push @notes, (
|
||||
"$ei:A5/A4",
|
||||
"$ei:G5/G4",
|
||||
"$ei:D5/D4",
|
||||
"$ei:A#4/A#3"
|
||||
);
|
||||
verse4common();
|
||||
push @notes, ( "$qu:A5/A4", "$qu:A#5/A#4" );
|
||||
|
||||
# verse 5, which is basically a higher pitched verse 4
|
||||
sub verse5common {
|
||||
push @notes, (
|
||||
"$ei:G6/G5",
|
||||
"$qu:D6/D5",
|
||||
"$qu:G6/G5",
|
||||
"$ei:A#5/A#4",
|
||||
"$ei:D6/D5",
|
||||
"$ei:F6/F5",
|
||||
"$ei:G6/G5",
|
||||
"$ei:D6/D5",
|
||||
"$ei:A#5/A#4",
|
||||
"$qu:G6/G5",
|
||||
"$ei:G6/G5",
|
||||
"$ei:A6/A5",
|
||||
"$ei:A#6/A#5",
|
||||
"$ei:G6/G5",
|
||||
"$qu:D6/D5",
|
||||
"$qu:G6/G5"
|
||||
);
|
||||
}
|
||||
verse5common();
|
||||
push @notes, (
|
||||
"$ei:D6/D5",
|
||||
"$ei:G6/G5",
|
||||
"$ei:C7/C6",
|
||||
"$ha:A#6/A#5",
|
||||
|
||||
"$ei:A6/A5",
|
||||
"$ei:G6/G5",
|
||||
"$ei:D6/D5",
|
||||
"$ei:A#5/A#4"
|
||||
);
|
||||
verse5common();
|
||||
push @notes, (
|
||||
"$ei:D6/D5",
|
||||
"$ei:G6/G5",
|
||||
"$ei:A6/A5",
|
||||
"$fu:A#6/A#5"
|
||||
);
|
||||
|
||||
createSamples();
|
|
@ -0,0 +1,343 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
=begin
|
||||
Copyright (C) 2022 Job Bautista
|
||||
|
||||
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
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
=cut
|
||||
|
||||
use lib '..';
|
||||
use SoXMusicGen;
|
||||
|
||||
our @notes;
|
||||
|
||||
setTempo(160);
|
||||
setDefaultSynthType("sin");
|
||||
our $maxSynthChannels=1;
|
||||
|
||||
# intro
|
||||
for (iterate(1,8)) {
|
||||
push (@notes, "$qu:25");
|
||||
}
|
||||
sub introcommon {
|
||||
push @notes, (
|
||||
"$ei:D#3",
|
||||
"$ei:A#3",
|
||||
"$ei:G#3",
|
||||
"$ei:A#3",
|
||||
"$ei:F#3",
|
||||
"$ei:A#3",
|
||||
"$ei:F3",
|
||||
"$ei:A#3"
|
||||
);
|
||||
}
|
||||
introcommon(); introcommon();
|
||||
push (@notes, "$ei:D#3");
|
||||
for (iterate(1,7)) {
|
||||
push (@notes, "$ei:D#4");
|
||||
silence("$ei");
|
||||
}
|
||||
push (@notes, "$ei:D#4");
|
||||
|
||||
# fast bridge
|
||||
sub fastbridge {
|
||||
sub adff {
|
||||
push @notes, (
|
||||
"$si:A#4",
|
||||
"$si:D#4",
|
||||
"$si:F4",
|
||||
"$si:F#4"
|
||||
);
|
||||
}
|
||||
adff(); adff(); adff();
|
||||
push @notes, (
|
||||
"$si:C#5",
|
||||
"$si:D#5",
|
||||
|
||||
"$si:A#4",
|
||||
"$si:D#4"
|
||||
);
|
||||
adff(); adff();
|
||||
push @notes, (
|
||||
"$si:A#4",
|
||||
"$si:D#4",
|
||||
|
||||
"$si:C#5",
|
||||
"$si:D#5",
|
||||
|
||||
"$si:A#4",
|
||||
"$si:G#4",
|
||||
"$si:F#4",
|
||||
"$si:F4",
|
||||
|
||||
"$si:B3",
|
||||
"$si:B3",
|
||||
|
||||
"$si:F#4",
|
||||
|
||||
"$si:B3",
|
||||
"$si:B3",
|
||||
|
||||
"$si:C#4",
|
||||
"$si:D#4",
|
||||
"$si:F#4",
|
||||
|
||||
"$si:B3",
|
||||
"$si:B3",
|
||||
|
||||
"$si:F#4",
|
||||
|
||||
"$si:B3",
|
||||
"$si:B3",
|
||||
|
||||
"$si:C#4",
|
||||
"$si:D#4",
|
||||
"$si:F#4",
|
||||
"$si:D4",
|
||||
"$si:D#4",
|
||||
"$si:F4"
|
||||
);
|
||||
sub addf {
|
||||
push @notes, (
|
||||
"$si:A#3",
|
||||
"$si:D4",
|
||||
"$si:D#4",
|
||||
"$si:F4"
|
||||
);
|
||||
}
|
||||
addf(); addf();
|
||||
push @notes, (
|
||||
"$si:A#3",
|
||||
"$si:A#3",
|
||||
"$si:G#3",
|
||||
"$si:F#3",
|
||||
"$si:F3"
|
||||
);
|
||||
}
|
||||
fastbridge(); fastbridge();
|
||||
|
||||
# verse 1
|
||||
sub verse1common {
|
||||
push @notes, (
|
||||
"$ei:D#4",
|
||||
"$ei:F4",
|
||||
"$ei:F#4",
|
||||
"$ei:G#4",
|
||||
"$qu:A#4"
|
||||
);
|
||||
}
|
||||
verse1common();
|
||||
push @notes, (
|
||||
"$ei:D#4",
|
||||
"$ei:C#5",
|
||||
"$qu:A#4",
|
||||
"$qu:D#4",
|
||||
"$ei:A#4",
|
||||
"$ei:G#4",
|
||||
"$ei:F#4",
|
||||
"$ei:F4"
|
||||
);
|
||||
verse1common();
|
||||
push @notes, (
|
||||
"$ei:G#4",
|
||||
"$ei:F#4",
|
||||
"$ei:F4",
|
||||
"$ei:A#3",
|
||||
"$ei:F4",
|
||||
"$ei:F#4",
|
||||
"$ei:F4",
|
||||
"$ei:D#4",
|
||||
"$ei:D4",
|
||||
"$ei:F4"
|
||||
);
|
||||
verse1common();
|
||||
push @notes, (
|
||||
"$ei:G#4",
|
||||
"$ei:C#5",
|
||||
"$qu:D#5",
|
||||
"$qu:D#5",
|
||||
"$qu:F5",
|
||||
"$qu:F#5",
|
||||
"$ei:D#5",
|
||||
"$ei:F5",
|
||||
"$ei:F#5",
|
||||
"$ei:G#5",
|
||||
"$qu:A#5",
|
||||
"$ei:G#5",
|
||||
"$ei:F#5",
|
||||
"$qu:G#5",
|
||||
"$qu:F5",
|
||||
"$qu:F#5",
|
||||
"$qu:G#5"
|
||||
);
|
||||
|
||||
# verse 2
|
||||
sub verse2common {
|
||||
push @notes, (
|
||||
"$ha:D#4",
|
||||
"$ei:D#4",
|
||||
"$ei:F4",
|
||||
"$qu:F#4",
|
||||
"$dqu:F4"
|
||||
);
|
||||
}
|
||||
verse2common();
|
||||
push @notes, (
|
||||
"$dqu:A#3",
|
||||
"$qu:F4",
|
||||
"$qu:F4",
|
||||
"$ei:F#4",
|
||||
"$dqu:D#4",
|
||||
"$qu:C#4",
|
||||
"$qu:C#4",
|
||||
"$ei:D#4",
|
||||
"$dqu:A#3",
|
||||
"$qu:D#4"
|
||||
);
|
||||
verse2common();
|
||||
push @notes, (
|
||||
"$dqu:F#4",
|
||||
"$qu:G#4",
|
||||
"$dqu:D#4",
|
||||
"$ei:A#4",
|
||||
"$fu:A#4",
|
||||
"$ei:G#4",
|
||||
"$ei:A#4",
|
||||
"$qu:C#5"
|
||||
);
|
||||
|
||||
# verse 3, which is basically a higher pitched verse 2
|
||||
sub verse3common {
|
||||
push @notes, (
|
||||
"$ha:D#5",
|
||||
"$ei:D#5",
|
||||
"$ei:F5"
|
||||
);
|
||||
}
|
||||
verse3common;
|
||||
push @notes, (
|
||||
"$qu:F#5",
|
||||
"$dqu:F5",
|
||||
"$dqu:A#4",
|
||||
"$qu:F5",
|
||||
"$qu:F5",
|
||||
"$ei:F#5",
|
||||
"$dqu:D#5",
|
||||
"$qu:C#5",
|
||||
"$qu:C#5",
|
||||
"$ei:D#5",
|
||||
"$dqu:A#4",
|
||||
"$qu:F5"
|
||||
);
|
||||
verse3common();
|
||||
push @notes, (
|
||||
"$ei:F#5",
|
||||
"$ei:G#5",
|
||||
"$dqu:F5",
|
||||
"$dqu:F#5",
|
||||
"$qu:G#5",
|
||||
"$dqu:D5",
|
||||
"$dqu:A#4",
|
||||
"$qu:A#5",
|
||||
"$qu:G#5",
|
||||
"$qu:F#5",
|
||||
"$qu:F5",
|
||||
"$qu:F#5"
|
||||
);
|
||||
|
||||
# verse 4
|
||||
sub verse4common {
|
||||
push @notes, (
|
||||
"$ei:G4",
|
||||
"$qu:D4",
|
||||
"$qu:G4",
|
||||
"$ei:A#3",
|
||||
"$ei:D4",
|
||||
"$ei:F4",
|
||||
"$ei:G4",
|
||||
"$ei:D4",
|
||||
"$ei:A#3",
|
||||
"$qu:391", # custom duration needed because can't hear notes separately
|
||||
"$ei:391",
|
||||
"$ei:A4",
|
||||
"$ei:A#4",
|
||||
"$ei:G4",
|
||||
"$qu:D4",
|
||||
"$qu:G4",
|
||||
"$ei:D4",
|
||||
"$ei:G4",
|
||||
"$ei:C5",
|
||||
"$ha:A#4"
|
||||
);
|
||||
}
|
||||
verse4common();
|
||||
push @notes, (
|
||||
"$ei:A4",
|
||||
"$ei:G4",
|
||||
"$ei:D4",
|
||||
"$ei:A#3"
|
||||
);
|
||||
verse4common();
|
||||
push @notes, ( "$qu:A4", "$qu:A#4" );
|
||||
|
||||
# verse 5, which is basically a higher pitched verse 4
|
||||
sub verse5common {
|
||||
push @notes, (
|
||||
"$ei:G5",
|
||||
"$qu:D5",
|
||||
"$qu:G5",
|
||||
"$ei:A#4",
|
||||
"$ei:D5",
|
||||
"$ei:F5",
|
||||
"$ei:G5",
|
||||
"$ei:D5",
|
||||
"$ei:A#4",
|
||||
"$qu:783",
|
||||
"$ei:783",
|
||||
"$ei:A5",
|
||||
"$ei:A#5",
|
||||
"$ei:G5",
|
||||
"$qu:D5",
|
||||
"$qu:G5"
|
||||
);
|
||||
}
|
||||
verse5common();
|
||||
push @notes, (
|
||||
"$ei:D5",
|
||||
"$ei:G5",
|
||||
"$ei:C6",
|
||||
"$ha:A#5",
|
||||
|
||||
"$ei:A5",
|
||||
"$ei:G5",
|
||||
"$ei:D5",
|
||||
"$ei:A#4"
|
||||
);
|
||||
verse5common();
|
||||
push @notes, (
|
||||
"$ei:D5",
|
||||
"$ei:G5",
|
||||
"$ei:A5",
|
||||
"$fu:A#5-902"
|
||||
);
|
||||
|
||||
createSynths();
|
|
@ -0,0 +1,11 @@
|
|||
___ ___ __ __ __ ___
|
||||
| |__| |__ |__) /\ |__) |__) | |
|
||||
| | | |___ | \ /~~\ |__) |__) | |
|
||||
|
||||
__ __ ___ __
|
||||
|__| /\ /__` | /\ |\ | | \ |__ | \
|
||||
| | /~~\ .__/ |___ /~~\ | \| |__/ |___ |__/
|
||||
|
||||
The Rabbit Has Landed
|
||||
Composed by ZUN for Touhou Kanjuden: Legacy of Lunatic Kingdom
|
||||
Arranged by Job Bautista
|
|
@ -0,0 +1,800 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
=begin
|
||||
Copyright (C) 2022 Job Bautista
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and a#sociated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
=cut
|
||||
|
||||
use lib '..';
|
||||
use SoXMusicGen;
|
||||
|
||||
our @notes;
|
||||
our $maxSynthChannels=6;
|
||||
setTempo(155);
|
||||
setDefaultSynthType("square", "square",
|
||||
"square", "square",
|
||||
"square", "square"); # sine synth struggles with 6 channels
|
||||
|
||||
# intro
|
||||
sub ee4h {
|
||||
for (iterate(1,2)) {
|
||||
push (@notes, "$ei:$_[0]$_[3]/$_[1]$_[4]/$_[2]$_[5]/$_[0]$_[6]");
|
||||
}
|
||||
}
|
||||
ee4h("b", "f#", "d", 3, 3, 3, 2);
|
||||
push (@notes, "$qu:b4/f#4/d4");
|
||||
ee4h("a", "f#", "d", 3, 3, 3, 2);
|
||||
push (@notes, "$qu:a4/f#4/d4");
|
||||
push @notes, (
|
||||
"$dei:g#4/e4",
|
||||
"$dei:a4/e4",
|
||||
"$ei:g#4/e4",
|
||||
"$ha:f#4/c#4"
|
||||
);
|
||||
ee4h("b", "f#", "d", 3, 3, 3, 2);
|
||||
push @notes, (
|
||||
"$ei:f#4/c#4",
|
||||
"$ei:a4/e4",
|
||||
"$ei:b4/f#4",
|
||||
"$ei:c#5/f#4",
|
||||
"$qu:a4/f#4",
|
||||
"$dei:g#4/e4",
|
||||
"$dei:a4/f#4",
|
||||
"$ei:b4/g#4",
|
||||
"$ha:c#5/a#4/f#4"
|
||||
);
|
||||
ee4h("e", "b", "g", 4, 3, 3, 3);
|
||||
push (@notes, "$qu:e5/b4/g4");
|
||||
ee4h("d", "b", "g", 4, 3, 3, 3);
|
||||
push (@notes, "$qu:d5/b4/g4");
|
||||
push @notes, (
|
||||
"$dei:c#5/a4",
|
||||
"$dei:d5/a4",
|
||||
"$ei:c#5/a4",
|
||||
"$ha:b4/f#4"
|
||||
);
|
||||
ee4h("e", "b", "g", 4, 3, 3, 3);
|
||||
push @notes, (
|
||||
"$ei:b4/f#4",
|
||||
"$ei:d5/a4",
|
||||
"$ei:e5/b4",
|
||||
"$ei:f#5/b4",
|
||||
"$qu:d5/b4",
|
||||
"$dei:c#5/a4",
|
||||
"$dei:d5/b4",
|
||||
"$ei:e5/c#5",
|
||||
"$ha:f#5/d#5/b4"
|
||||
);
|
||||
|
||||
# verse 1
|
||||
push @notes, (
|
||||
"$ei:a4/a3",
|
||||
"$ei:e5",
|
||||
"$ei:f#5/a3",
|
||||
"$si:a4/f#4/d4",
|
||||
"$si:c#5",
|
||||
"$ei:f#5/a3",
|
||||
"$ei:g#5",
|
||||
"$ei:b4/a3",
|
||||
"$ei:g#5",
|
||||
"$ha:a5/e5",
|
||||
|
||||
"$dsi:b3",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5",
|
||||
"$ei:e5",
|
||||
"$ei:b4",
|
||||
|
||||
"$ei:g#4/g#3",
|
||||
"$ei:c#5",
|
||||
"$ei:e5/g#3",
|
||||
"$si:b4/e4/c#4",
|
||||
"$si:c#5",
|
||||
"$ei:f5/g#3",
|
||||
"$ei:b5",
|
||||
"$ei:f5",
|
||||
"$ei:g#5",
|
||||
"$dqu:a5",
|
||||
"$dqu:g#5",
|
||||
"$qu:e5",
|
||||
|
||||
"$ei:a4/f#3",
|
||||
"$ei:e5",
|
||||
"$ei:f#5/f#3",
|
||||
"$si:a4/d4/a3",
|
||||
"$si:e5",
|
||||
"$ei:f#5/f#3",
|
||||
"$ei:g#5",
|
||||
"$ei:b4/f#3",
|
||||
"$ei:f#5",
|
||||
"$dei:g#5",
|
||||
"$dei:a5",
|
||||
"$ei:b5",
|
||||
|
||||
"$dsi:g#3",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5",
|
||||
"$ei:f#5/g#3",
|
||||
"$ei:g#5",
|
||||
"$ei:f5/g#3",
|
||||
"$ei:g#5",
|
||||
"$ei:c#6/g#3",
|
||||
"$ei:f5",
|
||||
"$ei:g#5/g#3",
|
||||
"$ei:c#6",
|
||||
"$ei:f5/g#3",
|
||||
"$ei:g#5",
|
||||
"$dqu:b5",
|
||||
".967:a5" # half + eighth note
|
||||
);
|
||||
|
||||
# verse 2
|
||||
push @notes, (
|
||||
"$ei:a4/f#4",
|
||||
"$ei:e5/a4",
|
||||
"$ei:f#5/d5",
|
||||
"$si:a4/d3",
|
||||
"$si:c#5",
|
||||
"$ei:f#5/c#5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:b4/f#4",
|
||||
"$ei:g#5/e5",
|
||||
"$ha:a5/e5/b4",
|
||||
|
||||
"$si:c#4",
|
||||
"$tsi:b3",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:e5/b4",
|
||||
"$ei:b4/g#4",
|
||||
"$ei:g#4",
|
||||
"$ei:c#5/g#4",
|
||||
"$ei:e5/c#5",
|
||||
"$si:b4/g#3",
|
||||
"$si:c#5/c#4",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:b5/f5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#5/f5",
|
||||
"$dqu:a5/f#5",
|
||||
"$dqu:g#5/e5",
|
||||
"$qu:e5/b4",
|
||||
|
||||
"$ei:a4/f#4",
|
||||
"$ei:e5/c#5",
|
||||
"$ei:f#5/d5",
|
||||
"$si:a4/f#3",
|
||||
"$si:e5/a3",
|
||||
"$ei:f#5/d5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:b4/g#4",
|
||||
"$ei:f#5/d5",
|
||||
"$dei:g#5/e5",
|
||||
"$dei:a5/f#5",
|
||||
"$ei:b5/g#5",
|
||||
|
||||
"$dsi:g#3",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:f#5/c#5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#5/f5",
|
||||
"$ei:c#6/g#5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#5/f5",
|
||||
"$ei:c#6/g#5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#5/f5",
|
||||
"$dqu:b5/g#5",
|
||||
".967:a5/f#5"
|
||||
);
|
||||
|
||||
# verse 3
|
||||
push @notes, (
|
||||
"$qu:g4/d#4/a#3/g3",
|
||||
"$ei:d5/g4/d#4",
|
||||
"$ei:d5/a#3",
|
||||
"$ei:c5/f3",
|
||||
"$ei:c5/c4/a3",
|
||||
"$ei:c5",
|
||||
"$ei:c5"
|
||||
);
|
||||
sub verse3common1 {
|
||||
push @notes, (
|
||||
"$dei:g4/d4/a#3/g3/d3",
|
||||
"$dei:c5",
|
||||
"$ei:d5",
|
||||
"$dei:f5",
|
||||
"$dei:d5",
|
||||
"$ei:c5",
|
||||
|
||||
"$qu:g4",
|
||||
"$qu:d5",
|
||||
"$ei:c5/f3",
|
||||
"$ei:c5/c3",
|
||||
"$ei:c5/a3/f3",
|
||||
"$ei:c5/a3/f3"
|
||||
)
|
||||
}
|
||||
verse3common1();
|
||||
push @notes, (
|
||||
"$dei:g4",
|
||||
"$dei:c5",
|
||||
"$ei:d5/g3",
|
||||
"$si:g5/a#3/g3",
|
||||
"$si:f5/d4",
|
||||
"$si:g5/g3",
|
||||
"$si:f5",
|
||||
"$ei:d5/d4/a#3/g3",
|
||||
"$ei:a#4/g3/d3",
|
||||
|
||||
"$qu:g4",
|
||||
"$ei:d5/g4/d#4",
|
||||
"$ei:d5/a#3",
|
||||
"$ei:c5/f3",
|
||||
"$ei:c5/c4/a3",
|
||||
"$ei:c5",
|
||||
"$ei:c5"
|
||||
);
|
||||
verse3common1();
|
||||
push @notes, (
|
||||
"$dei:g4",
|
||||
"$dei:c5",
|
||||
"$ei:d5/g3",
|
||||
"$dei:g5",
|
||||
"$dei:g6",
|
||||
"$ei:d6/d4/a#3/g3"
|
||||
);
|
||||
sub verse3common2 {
|
||||
push @notes, (
|
||||
"$qu:g4/d#4",
|
||||
"$ei:d5/a#4/d#3",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:c5/a4/f3",
|
||||
"$ei:c5/a4",
|
||||
"$ei:c5/a4/f3",
|
||||
"$ei:c5/a4",
|
||||
|
||||
"$dei:g4/d4",
|
||||
"$dei:c5/g4",
|
||||
"$ei:d5/a#4",
|
||||
"$dei:f5/d5",
|
||||
"$dei:d5/a#4",
|
||||
"$ei:c5/g4",
|
||||
|
||||
"$qu:g4/d#4",
|
||||
"$qu:d5/a#4",
|
||||
"$ei:c5/a4/f3",
|
||||
"$ei:c5/a4",
|
||||
"$ei:c5/a4/f3",
|
||||
"$ei:c5/a4"
|
||||
)
|
||||
}
|
||||
verse3common2();
|
||||
push @notes, (
|
||||
"$dei:g4/d4",
|
||||
"$dei:c5/g4",
|
||||
"$ei:d5/a#4",
|
||||
"$si:g5/d5",
|
||||
"$si:f5",
|
||||
"$si:g5/d5/a#3/g3",
|
||||
"$si:f5",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:a#4/g4"
|
||||
);
|
||||
verse3common2();
|
||||
push @notes, (
|
||||
"$dei:g4",
|
||||
"$dei:c5",
|
||||
"$ei:d5",
|
||||
"$dei:g5",
|
||||
"$dei:g6",
|
||||
"$ei:d6"
|
||||
);
|
||||
|
||||
# verse 4
|
||||
push @notes, (
|
||||
"$ei:f#4/f#3",
|
||||
"$ei:c#5",
|
||||
"$ei:d#5/f#3",
|
||||
"$si:f#4/d#4/b3",
|
||||
"$si:a#4",
|
||||
"$ei:d#5/f#3",
|
||||
"$ei:f5",
|
||||
"$ei:g#4/f#3",
|
||||
"$ei:f5",
|
||||
"$ha:f#5/c#5",
|
||||
|
||||
"$dsi:g#3",
|
||||
"$tsi:e5",
|
||||
"$ei:f5",
|
||||
"$ei:c#5",
|
||||
"$ei:g#4",
|
||||
|
||||
"$ei:f4/f3",
|
||||
"$ei:a#4",
|
||||
"$ei:c#5/f3",
|
||||
"$si:g#4/c#4/a#3",
|
||||
"$si:a#4",
|
||||
"$ei:d5/f3",
|
||||
"$ei:g#5",
|
||||
"$ei:d5",
|
||||
"$ei:f5",
|
||||
"$dqu:f#5",
|
||||
"$dqu:f5",
|
||||
"$qu:c#5",
|
||||
|
||||
"$ei:f#4/d#3",
|
||||
"$ei:c#5",
|
||||
"$ei:d#5/d#3",
|
||||
"$si:f#4/b3/f#3",
|
||||
"$si:c#5",
|
||||
"$ei:d#5/d#3",
|
||||
"$ei:f5",
|
||||
"$ei:g#4/d#3",
|
||||
"$ei:d#5",
|
||||
"$dei:f5",
|
||||
"$dei:f#5",
|
||||
"$ei:g#5",
|
||||
|
||||
"$dsi:f3",
|
||||
"$tsi:e5",
|
||||
"$ei:f5",
|
||||
"$ei:d#5",
|
||||
"$ei:f5",
|
||||
|
||||
"$ei:d5/f3",
|
||||
"$ei:f5",
|
||||
"$ei:a#5/f3",
|
||||
"$ei:d5",
|
||||
"$ei:f5/f3",
|
||||
"$ei:a#5",
|
||||
"$ei:d5/f3",
|
||||
"$ei:f5",
|
||||
"$dqu:g#5",
|
||||
".967:f#5",
|
||||
|
||||
"$ei:f#4/d#4",
|
||||
"$ei:c#5/f#4",
|
||||
"$ei:d#5/b4",
|
||||
"$si:f#4/b3",
|
||||
"$si:a#4/d#3",
|
||||
"$ei:d#5/a#4",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#4/d#4",
|
||||
"$ei:f5/c#5",
|
||||
"$ha:f#5/c#5/g#4",
|
||||
|
||||
"$si:a#3",
|
||||
"$tsi:c#3",
|
||||
"$tsi:e5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:c#5/g#4",
|
||||
"$ei:g#4/f4",
|
||||
|
||||
"$ei:f4",
|
||||
"$ei:a#4/f4",
|
||||
"$ei:c#5/a#4",
|
||||
"$si:g#4/f3",
|
||||
"$si:a#4/a#3",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:g#5/d5",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:f5/d5",
|
||||
"$dqu:f#5/d#5",
|
||||
"$dqu:f5/c#5",
|
||||
"$qu:c#5/g#4",
|
||||
|
||||
"$ei:f#4/d#4",
|
||||
"$ei:c#5/a#4",
|
||||
"$ei:d#5/b4",
|
||||
"$si:f#4/d#3",
|
||||
"$si:c#5/f#3",
|
||||
"$ei:d#5/b4",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#4/f4",
|
||||
"$ei:d#5/b4",
|
||||
"$dei:f5/c#5",
|
||||
"$dei:f#5/d#5",
|
||||
"$ei:g#5/f5",
|
||||
|
||||
"$si:f3",
|
||||
"$tsi:g#3",
|
||||
"$tsi:e5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:d#5/a#4",
|
||||
"$ei:f5/c#5",
|
||||
|
||||
"$ei:d5/a#4",
|
||||
"$ei:f5/d5",
|
||||
"$ei:a#5/f5",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:f5/d5",
|
||||
"$ei:a#5/f5",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:f5/d5",
|
||||
"$dqu:g#5/f5",
|
||||
".967:f#5/d#5"
|
||||
);
|
||||
|
||||
# verse 5
|
||||
push @notes, (
|
||||
"$qu:e4/c4/c3",
|
||||
"$ei:b4/g4",
|
||||
"$ei:b4/g4",
|
||||
"$ei:a4/f#4/d3",
|
||||
"$ei:a4/f#4/d3",
|
||||
"$ei:a4/f#4/f#3",
|
||||
"$ei:a4/f#4/d3",
|
||||
|
||||
"$dei:e4/b3",
|
||||
"$dei:a4/e4",
|
||||
"$ei:b4/g4",
|
||||
"$dei:b6/b5/d5/b4",
|
||||
"$dei:b4/g4",
|
||||
"$ei:a4/e4",
|
||||
|
||||
"$qu:e4/c4",
|
||||
"$qu:b4/g4/e3/c3",
|
||||
"$ei:a6/a5/a4/f#4/d4/a3",
|
||||
"$ei:a4/f#4/d4/a3",
|
||||
"$ei:d6/a4/f#4/d4/a3",
|
||||
"$ei:a4/f#4/d4/a3",
|
||||
|
||||
"$dei:f#6/f#5/e4/b3",
|
||||
"$dei:g6/g5/a4/e4",
|
||||
"$ei:a6/a5/b4/g4",
|
||||
"$dei:g6/g5",
|
||||
"$dei:f#6/f#5",
|
||||
"$ei:b5/b4/g4/e4",
|
||||
|
||||
"$qu:e4/b3",
|
||||
"$ei:b4/g4",
|
||||
"$ei:b4/g4",
|
||||
"$ei:a4/f#4",
|
||||
"$ei:a4/f#4",
|
||||
"$ei:a4/f#4",
|
||||
"$ei:a4/f#4",
|
||||
|
||||
"$dei:e4/b3",
|
||||
"$dei:a4/e4",
|
||||
"$ei:b4/g4/g3/e3",
|
||||
"$dei:d5/b4",
|
||||
"$dei:b4/g4/g3/e3",
|
||||
"$ei:a4/e4/g3/e3",
|
||||
|
||||
"$qu:e4/c4/e3/c3/g2",
|
||||
"$qu:b6/b5/b4/g4/c4",
|
||||
"$ei:a4/f#4/a3",
|
||||
"$ei:a4/f#4/a3",
|
||||
"$ei:a6/a5/a4/f#4/a3",
|
||||
"$ei:a4/f#4/a3",
|
||||
|
||||
"$dei:g6/g5/b4/e4",
|
||||
"$dei:a6/a5/e5/a4",
|
||||
"$ei:b6/b5/g5/b4",
|
||||
"$ei:e6/b5/e5"
|
||||
);
|
||||
push (@notes, "$si:e3/e2");
|
||||
silence("$si");
|
||||
push (@notes, "$si:e3/e2");
|
||||
silence("$si");
|
||||
push (@notes, "$si:e3/e2");
|
||||
silence("$si");
|
||||
|
||||
# verse 6 which is almost like intro
|
||||
ee4h("b", "f#", "d", 3, 3, 3, 2);
|
||||
push (@notes, "$qu:b4/f#4/d4");
|
||||
ee4h("a", "f#", "d", 3, 3, 3, 2);
|
||||
push (@notes, "$qu:a4/f#4/d4");
|
||||
push @notes, (
|
||||
"$dei:g#4/e4",
|
||||
"$dei:a4/e4",
|
||||
"$ei:g#4/e4",
|
||||
"$ha:f#4/c#4"
|
||||
);
|
||||
ee4h("b", "f#", "d", 3, 3, 3, 2);
|
||||
push @notes, (
|
||||
"$ei:f#4/c#4",
|
||||
"$ei:a4/e4",
|
||||
"$ei:b4/f#4/a3/f#3",
|
||||
"$ei:c#5/f#4/a3/f#3",
|
||||
"$qu:a4/f#4",
|
||||
"$dei:g#4/e4",
|
||||
"$dei:a4/f#4",
|
||||
"$ei:b4/g#4",
|
||||
"$ha:c#5/a#4/f#4/c#4"
|
||||
);
|
||||
ee4h("e", "b", "g", 4, 3, 3, 3);
|
||||
push (@notes, "$qu:g5/e5/b4/g4");
|
||||
ee4h("d", "b", "g", 4, 3, 3, 3);
|
||||
push (@notes, "$qu:g5/d5/b4/g4");
|
||||
push @notes, (
|
||||
"$dei:c#5/a4",
|
||||
"$dei:d5/a4",
|
||||
"$ei:c#5/a4",
|
||||
"$ha:b4/f#4",
|
||||
);
|
||||
ee4h("e", "b", "g", 4, 3, 3, 3);
|
||||
push @notes, (
|
||||
"$ei:e5/b4/f#4",
|
||||
"$ei:e5/d4/a4",
|
||||
"$ei:e5/b4/d4/b3/g3/d3",
|
||||
"$ei:f#5/b4/d4/b3/g3/d3",
|
||||
"$qu:d5/b4/f#4",
|
||||
"$dei:c#5/a4/e4",
|
||||
"$dei:d5/b4/f#4",
|
||||
"$ei:e5/c#5/a4",
|
||||
"$ha:f#5/d#5/b4/f#4",
|
||||
);
|
||||
|
||||
# verse 7 which is almost like verse 1
|
||||
push @notes, (
|
||||
"$ei:a4/a2",
|
||||
"$ei:e5",
|
||||
"$ei:f#5/a2",
|
||||
"$si:a4/a3/f#3/d4",
|
||||
"$si:c#5",
|
||||
"$ei:f#5/a2",
|
||||
"$ei:g#5",
|
||||
"$ei:b4/a2",
|
||||
"$ei:g#5",
|
||||
"$ha:a5/e5",
|
||||
|
||||
"$dsi:b2",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5",
|
||||
"$ei:e5",
|
||||
"$ei:b4",
|
||||
|
||||
"$ei:g#4/g#2",
|
||||
"$ei:c#5",
|
||||
"$ei:e5/g#2",
|
||||
"$si:b4/g#3/e3/c#3",
|
||||
"$si:c#5",
|
||||
"$ei:f5/g#2",
|
||||
"$ei:b5",
|
||||
"$ei:f5",
|
||||
"$ei:g#5",
|
||||
"$dqu:a5",
|
||||
"$dqu:g#5",
|
||||
"$qu:e5",
|
||||
|
||||
"$ei:a4/f#2",
|
||||
"$ei:e5",
|
||||
"$ei:f#5/f#2",
|
||||
"$si:a4/f#3/d3/a2",
|
||||
"$si:e5",
|
||||
"$ei:f#5/f#2",
|
||||
"$ei:g#5",
|
||||
"$ei:b4/f#2",
|
||||
"$ei:f#5",
|
||||
"$dei:g#5",
|
||||
"$dei:a5",
|
||||
"$ei:b5",
|
||||
|
||||
"$dsi:g#2",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5",
|
||||
"$ei:f#5/g#2",
|
||||
"$ei:g#5",
|
||||
"$ei:f5/g#2",
|
||||
"$ei:g#5",
|
||||
"$ei:c#6/g#2",
|
||||
"$ei:f5",
|
||||
"$ei:g#5/g#2",
|
||||
"$ei:c#6",
|
||||
"$ei:f5/g#2",
|
||||
"$ei:g#5",
|
||||
"$dqu:b5",
|
||||
".967:a5"
|
||||
);
|
||||
|
||||
# verse 8 which is almost like verse 2
|
||||
push @notes, (
|
||||
"$ei:a4/f#4/a2",
|
||||
"$ei:e5/a4",
|
||||
"$ei:f#5/d5/a2",
|
||||
"$si:a4/a3/f#3/d3",
|
||||
"$si:c#5",
|
||||
"$ei:f#5/c#5/a2",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:b4/f#4/a2",
|
||||
"$ei:g#5/e5",
|
||||
"$ha:a5/e5/b4",
|
||||
|
||||
"$dsi:b2",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:e5/b4",
|
||||
"$ei:b4/g#4",
|
||||
|
||||
"$ei:g#4/g#2",
|
||||
"$ei:c#5/g#4",
|
||||
"$ei:e5/c#5/g#2",
|
||||
"$si:b4/g#3/e3/c#3",
|
||||
"$si:c#5",
|
||||
"$ei:f5/c#5/g#2",
|
||||
"$ei:b5/f5",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#5/f5",
|
||||
"$dqu:a5/f#5",
|
||||
"$dqu:g#5/e5",
|
||||
"$qu:e5/b4",
|
||||
|
||||
"$ei:a4/f#4/f#2",
|
||||
"$ei:e5/c#5",
|
||||
"$ei:f#5/d5/f#2",
|
||||
"$si:a4/f#3/d3/a2",
|
||||
"$si:e5",
|
||||
"$ei:f#5/d5/f#2",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:b4/g#4/f#2",
|
||||
"$ei:f#5/d5",
|
||||
"$dei:g#5/e5",
|
||||
"$dei:a5/f#5",
|
||||
"$ei:b5/g#5",
|
||||
|
||||
"$dsi:g#2",
|
||||
"$tsi:g5",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:f#5/c#5/g#2",
|
||||
"$ei:g#5/e5",
|
||||
"$ei:f5/c#5/g#2",
|
||||
"$ei:g#5/f5",
|
||||
"$ei:c#6/g#5/g#2",
|
||||
"$ei:f5/c#5",
|
||||
"$ei:g#5/f5/g#2",
|
||||
"$ei:c#6/g#5",
|
||||
"$ei:f5/c#5/g#2",
|
||||
"$ei:g#5/f5",
|
||||
"$dqu:b5/g#5",
|
||||
".967:a5/f#5"
|
||||
);
|
||||
|
||||
# verse 9 which is a higher pitched verse 3
|
||||
push @notes, (
|
||||
"$qu:g5/d#5/d#4/a#4/g4",
|
||||
"$ei:d6/a#5/g4/d#4",
|
||||
"$ei:d6/a#5/a#3",
|
||||
"$ei:c6/a5/f3",
|
||||
"$ei:c6/a5/c4/a3",
|
||||
"$ei:c6/a5",
|
||||
"$ei:c6/a5",
|
||||
);
|
||||
sub verse9common1 {
|
||||
push @notes, (
|
||||
"$dei:g5/d5",
|
||||
"$dei:c6/g5",
|
||||
"$ei:d6/a#5",
|
||||
"$dei:f6/d6",
|
||||
"$dei:d6/a#5",
|
||||
"$ei:c6/g5"
|
||||
);
|
||||
}
|
||||
verse9common1();
|
||||
push @notes, (
|
||||
"$qu:g5/d#5",
|
||||
"$qu:d6/a#5",
|
||||
"$ei:c6/a5/f5/c5/f3",
|
||||
"$ei:c6/a5/f5/c5/c3",
|
||||
"$ei:c6/a5/f5/c5/a3/f3",
|
||||
"$ei:c6/a5/f5/c5/a3/f3",
|
||||
|
||||
"$dei:g5/d5",
|
||||
"$dei:c6/g5",
|
||||
"$ei:d6/a#5/g3",
|
||||
"$si:g6/d6/a#3",
|
||||
"$si:f6/d4",
|
||||
"$si:g6/d6",
|
||||
"$si:f6",
|
||||
"$ei:d6/a#5/d4/a#3/g3",
|
||||
"$ei:a#5/g5/g3/d3",
|
||||
|
||||
"$qu:g5/d5",
|
||||
"$ei:d6/a#5/g4/d#4",
|
||||
"$ei:d6/a#5/a#3",
|
||||
"$ei:c6/a5/f3",
|
||||
"$ei:c6/a5/c4/a3",
|
||||
"$ei:c6/a5",
|
||||
"$ei:c6/a5"
|
||||
);
|
||||
verse9common1();
|
||||
push @notes, (
|
||||
"$qu:g5/d#5/g4",
|
||||
"$qu:d6/a#5/d#5",
|
||||
"$ei:c6/a5/c5/f3",
|
||||
"$ei:c6/a5/c5/c3",
|
||||
"$ei:c6/a5/c5/a3/f3",
|
||||
"$ei:c6/a5/c5/a3/f3",
|
||||
|
||||
"$dei:d6/g6",
|
||||
"$dei:g6/c6",
|
||||
"$ei:a#6/d6/g3",
|
||||
"$ha:g6/d6",
|
||||
|
||||
"$qu:g4/d#4/d#3",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:c5/a4/f3",
|
||||
"$ei:c5/a4/f3",
|
||||
"$ei:c5/a4/a3",
|
||||
"$ei:c5/a4/f3",
|
||||
|
||||
"$dei:g4/d4",
|
||||
"$dei:c5/g4",
|
||||
"$ei:d5/a#4",
|
||||
"$dei:d6/f5/d5",
|
||||
"$dei:d5/a#4",
|
||||
"$ei:c5/g4",
|
||||
|
||||
"$qu:g4/d#4",
|
||||
"$qu:d5/a#4/g3/d#3",
|
||||
"$ei:c6/c5/a4/f4/c4",
|
||||
"$ei:c5/a4/f4/c4",
|
||||
"$ei:f6/c5/a4/f4/c4",
|
||||
"$ei:c5/a4/f4/c4",
|
||||
|
||||
"$dei:a6/a5/g4/d4",
|
||||
"$dei:a#6/a#5/c5/g4",
|
||||
"$ei:c6/d5/a#4",
|
||||
"$dei:a#6/a#5",
|
||||
"$dei:a6/a5",
|
||||
"$ei:d6/d5",
|
||||
|
||||
"$qu:g4/d#4",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:d5/a#4",
|
||||
"$ei:c5/a4",
|
||||
"$ei:c5/a4",
|
||||
"$ei:c5/a4",
|
||||
"$ei:c5/a4",
|
||||
|
||||
"$dei:g4/d4",
|
||||
"$dei:c5/g4",
|
||||
"$ei:d5/a#4/a#3/g3",
|
||||
"$dei:f5/d5",
|
||||
"$dei:d5/a#4",
|
||||
"$ei:c5/g4/a#3/g3",
|
||||
|
||||
"$qu:g4/d#4/g3/d#3/a#2",
|
||||
"$qu:d6/d5/a#4/d#4",
|
||||
"$ei:c5/a4/c4",
|
||||
"$ei:c5/a4/c4",
|
||||
"$ei:c6/c5/a4/c4",
|
||||
"$ei:c5/a4/c4",
|
||||
|
||||
"$dei:a#6/a#5/d5/g4",
|
||||
"$dei:c6/g5/c5",
|
||||
"$ei:d6/a#5/d5",
|
||||
"$ei:g6/d6/g5"
|
||||
);
|
||||
push (@notes, "$si:g3/g2");
|
||||
silence("$si");
|
||||
push (@notes, "$si:g3/g2");
|
||||
silence("$si");
|
||||
push (@notes, "$si:g3/g2");
|
||||
silence("$si");
|
||||
|
||||
createSynths();
|
Reference in New Issue