diff --git a/CMakeLists.txt b/CMakeLists.txt index ad76c141e..15815fa6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,7 @@ else() if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(WITH_OUR_MALLOC ON CACHE BOOL "aaa" FORCE) endif() + set(BUILD_TESTS OFF CACHE BOOL "come on" FORCE) add_subdirectory(extern/fftw EXCLUDE_FROM_ALL) list(APPEND DEPENDENCIES_INCLUDE_DIRS extern/fftw/api) list(APPEND DEPENDENCIES_LIBRARIES fftw3) @@ -458,6 +459,10 @@ src/engine/platform/rf5c68.cpp src/engine/platform/dummy.cpp ) +if (USE_SNDFILE) + list(APPEND ENGINE_SOURCES src/engine/sfWrapper.cpp) +endif() + if (WIN32) list(APPEND ENGINE_SOURCES src/utfutils.cpp) list(APPEND ENGINE_SOURCES src/engine/winStuff.cpp) diff --git a/README.md b/README.md index caa4714cc..b75db0d05 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Furnace Tracker -![screenshot](papers/screenshot1.png) +![screenshot](papers/screenshot2.png) -this is a multi-system chiptune tracker. +the biggest multi-system chiptune tracker ever made! [downloads](#downloads) | [discussion/help](#quick-references) | [developer info](#developer-info) | [unofficial packages](#unofficial-packages) | [FAQ](#frequently-asked-questions) @@ -15,34 +15,91 @@ check out the [Releases](https://github.com/tildearrow/furnace/releases) page. a ## features -- supports the following systems: - - Sega Genesis - - Sega Master System +- over 50 sound chips - and counting: + - Yamaha FM chips: + - YM2151 (OPM) + - YM2203 (OPN) + - YM2413 (OPLL) + - YM2414 (OPZ) used in Yamaha TX81Z + - YM2608 (OPNA) used in PC-98 + - YM2610 (OPNB) used in Neo Geo + - YM2610B (OPNB2) + - YM2612 (OPN2) used in Sega Genesis and FM Towns + - YM3526 (OPL) used in C64 Sound Expander + - YM3812 (OPL2) + - YMF262 (OPL3) with full 4-op support! + - Y8950 (OPL with ADPCM) + - square wave chips: + - AY-3-8910/YM2149(F) used in several computers and game consoles + - Commodore VIC used in the VIC-20 + - Microchip AY8930 + - TI SN76489 used in Sega Master System and BBC Micro + - PC Speaker + - Philips SAA1099 used in SAM Coupé + - sample chips: + - Amiga + - SegaPCM - all 16 channels + - Capcom QSound + - Yamaha YMZ280B (PCMD8) + - Ricoh RF5C68 used in Sega CD and FM Towns + - OKI MSM6258 and MSM6295 + - wavetable chips: + - HuC6280 used in PC Engine + - Konami Bubble System WSG + - Konami SCC/SCC+ + - Namco arcade chips (WSG/C15/C30) + - WonderSwan + - Seta/Allumer X1-010 + - NES (Ricoh 2A03/2A07), with additional expansion sound support: + - Konami VRC6 + - Konami VRC7 + - MMC5 + - Famicom Disk System + - Sunsoft 5B + - Namco 163 + - Family Noraebang (OPLL) + - SID (6581/8580) used in Commodore 64 + - Mikey used in Atari Lynx + - ZX Spectrum beeper (SFX-like engine) + - TIA used in Atari 2600 - Game Boy - - PC Engine - - NES - - Commodore 64 - - Yamaha YM2151 (plus PCM) - - Neo Geo - - AY-3-8910 (ZX Spectrum, Atari ST, etc.) - - Microchip AY8930 - - Philips SAA1099 - - Amiga - - TIA (Atari 2600/7800) -- multiple sound chips in a single song! -- DefleMask compatibility - loads .dmf modules, .dmp instruments and .dmw wavetables -- clean-room design (guesswork and ABX tests only, no decompilation involved) -- bug/quirk implementation for increased playback accuracy -- VGM and audio file export -- accurate emulation cores whether possible (Nuked, MAME, SameBoy, Mednafen PCE, puNES, reSID, Stella, SAASound and ymfm) -- additional features on top: + - modern/fantasy: + - Commander X16 VERA + - tildearrow Sound Unit +- mix and match sound chips! + - over 200 ready to use presets from computers, game consoles and arcade boards... + - ...or create your own - up to 32 of them or a total of 128 channels! +- DefleMask compatibility + - loads .dmf modules from all versions (beta 1 to 1.1.3) + - saves .dmf modules - both modern and legacy + - Furnace doubles as a module downgrader + - loads .dmp instruments and .dmw wavetables as well + - clean-room design (guesswork and ABX tests only, no decompilation involved) + - bug/quirk implementation for increased playback accuracy through compatibility flags +- VGM export +- modular layout that you may adapt to your needs +- audio file export - entire song, per system or per channel +- quality emulation cores (Nuked, MAME, SameBoy, Mednafen PCE, NSFplay, puNES, reSID, Stella, SAASound, vgsound_emu and ymfm) +- wavetable synthesizer + - available on wavetable chips + - create complex sounds with ease - provide up to two wavetables, select and effect and let go! +- MIDI input support +- [Fractal Sound](https://gitlab.com/Natsumi/Fractal-Sound) support! + - the game-ready Sega Genesis/Mega Drive sound driver! + - compose your songs in Furnace using the Fractal Sound presets and then use them in your games with Fractal! +- additional features: - FM macros! - negative octaves - arbitrary pitch samples - sample loop points - - SSG envelopes in Neo Geo + - SSG envelopes and ADPCM-B in Neo Geo - full duty/cutoff range in C64 - - ability to change tempo mid-song with `Cxxx` effect (`xxx` between `000` and `3ff`) + - ability to change tempo mid-song + - multiple sub-songs in a module + - per-channel oscilloscope with waveform centering + - built-in sample editor + - chip mixing settings + - built-in visualizer in pattern view - open-source under GPLv2 or later. *** @@ -59,7 +116,7 @@ some people have provided packages for Unix/Unix-like distributions. here's a li - **Arch Linux**: [furnace-git is in the AUR.](https://aur.archlinux.org/packages/furnace-git) thank you Essem! - **FreeBSD**: [a package in ports](https://www.freshports.org/audio/furnace/) is available courtesy of ehaupt. - **Nix**: [package](https://search.nixos.org/packages?channel=unstable&show=furnace&from=0&size=50&sort=relevance&type=packages&query=furnace) thanks to OPNA2608. - - **OpenSUSE**: [a package](https://software.opensuse.org/package/furnace) is available, courtesy of fpesari. + - **openSUSE**: [a package](https://software.opensuse.org/package/furnace) is available, courtesy of fpesari. *** # developer info @@ -73,11 +130,17 @@ if you can't download these artifacts (because GitHub requires you to be logged ## dependencies - CMake -- SDL2 -- zlib -- JACK (optional) +- JACK (optional, macOS/Linux only) -SDL2 and zlib are included as submodules. +if building under Windows or macOS, no additional dependencies are required. +otherwise, you may also need the following: + +- libpulse +- libx11 +- libasound +- libGL + +some Linux distributions (e.g. Ubuntu or openSUSE) will require you to install the `-dev` versions of these. ## getting the source @@ -127,14 +190,20 @@ Available options: | Name | Default | Description | | :--: | :-----: | ----------- | | `BUILD_GUI` | `ON` | Build the tracker (disable to build only a headless player) | +| `USE_RTMIDI` | `ON` | Build with MIDI support using RtMidi | +| `USE_SDL2` | `ON` | Build with SDL2 (required to build with GUI) | +| `USE_SNDFILE` | `ON` | Build with libsndfile (required in order to work with audio files) | +| `USE_BACKWARD` | `ON` | Use backward-cpp to print a backtrace on crash/abort | | `WITH_JACK` | `ON` if system-installed JACK detected, otherwise `OFF` | Whether to build with JACK support. Auto-detects if JACK is available | +| `SYSTEM_FFTW` | `OFF` | Use a system-installed version of FFTW instead of the vendored one | | `SYSTEM_FMT` | `OFF` | Use a system-installed version of fmt instead of the vendored one | | `SYSTEM_LIBSNDFILE` | `OFF` | Use a system-installed version of libsndfile instead of the vendored one | +| `SYSTEM_RTMIDI` | `OFF` | Use a system-installed version of RtMidi instead of the vendored one | | `SYSTEM_ZLIB` | `OFF` | Use a system-installed version of zlib instead of the vendored one | | `SYSTEM_SDL2` | `OFF` | Use a system-installed version of SDL2 instead of the vendored one | | `WARNINGS_ARE_ERRORS` | `OFF` (but consider enabling this & reporting any errors that arise from it!) | Whether warnings in furnace's C++ code should be treated as errors | -## usage +## console usage ``` ./furnace @@ -156,36 +225,21 @@ this will play a compatible file and enable the commands view. **note that these commands only actually work in Linux environments. on other command lines, such as Windows' Command Prompt, or MacOS Terminal, it may not work correctly.** -*** -# notes - -> how do I use Neo Geo SSG envelopes? - -the following effects are provided: - -- `22xy`: set envelope mode. - - `x` sets the envelope shape, which may be one of the following: - - `0: \___` decay - - `4: /___` attack once - - `8: \\\\` saw - - `9: \___` decay - - `A: \/\/` inverse obelisco - - `B: \¯¯¯` decay once - - `C: ////` inverse saw - - `D: /¯¯¯` attack - - `E: /\/\` obelisco - - `F: /___` attack once - - if `y` is 1 then the envelope will affect this channel. -- `23xx`: set envelope period low byte. -- `24xx`: set envelope period high byte. -- `25xx`: slide envelope period up. -- `26xx`: slide envelope period down. - -a lower envelope period will make the envelope run faster. - *** # frequently asked questions +> woah! 50 sound chips?! I can't believe it! + +yup, it's real. + +> where's the manual? + +see [papers/](papers/doc/README.md). it's kind of incomplete, but at least the systems (sound chips) section is there. + +> it doesn't open under macOS! + +this is due to Apple's application signing policy. a workaround is to right click on the Furnace app icon and select Open. + > how do I use C64 absolute filter/duty? on Instrument Editor in the C64 tab there are two options to toggle these. @@ -195,25 +249,27 @@ also provided are two effects: - `4xxx`: set fine cutoff. `xxx` range is 000-7ff. additionally, you can change the cutoff and/or duty as a macro inside an instrument by clicking the `absolute cutoff macro` and/or `absolute duty macro` checkbox at the bottom of the instrument. (for the filter, you also need to click the checkbox that says `volume macro is cutoff macro`.) -> Q: how do I use PCM on a PCM-capable system? +> how do I use PCM on a PCM-capable system? -A: Two possibilities: the recommended way is via creating the "Amiga/Sample" type instrument and assigning sample to it, or via old, Deflemask-compatible method, using `17xx` effect +two possibilities: +- the recommended way is by creating the "Sample" type instrument and assigning a sample to it. +- otherwise you may employ the DefleMask-compatible method, using `17xx` effect. -> Q: my song sounds very odd at a certain point +> my .dmf song sounds very odd at a certain point -A: file a bug report. use the Issues page. it's probably another playback inaccuracy. +file a bug report. use the Issues page. it's probably another playback inaccuracy. -> Q: my song sounds correct, but it doesn't in DefleMask +> my .dmf song sounds correct, but it doesn't in DefleMask -A: file a bug report **here**. it still is a playback inaccuracy. +file a bug report **here**. it still is a playback inaccuracy. -> Q: my C64 song sounds terrible after saving as .dmf! +> my song sounds terrible after saving as .dmf! -A: that's a limitation of the DefleMask format. save in Furnace song format instead (.fur). +the DefleMask format has several limitations. save in Furnace song format instead (.fur). -> Q: how do I solo channels? +> how do I solo channels? -A: right click on the channel name. +right click on the channel name. *** # footnotes diff --git a/TODO.md b/TODO.md index 14016e825..85118b445 100644 --- a/TODO.md +++ b/TODO.md @@ -4,11 +4,7 @@ - reversed playing flag in instrument/macro/commands - transwave synthesizer (like ensoniq synths - 12 bit command and macro) -# to-do for 0.6pre1 - -- implement Defle slide bug when using E1xy/E2xy and repeating origin note (requires format change) - -# to-do for 0.6pre2 (as this requires new data structures) +# to-do for 0.6pre1.5-0.6pre2 - rewrite the system name detection function anyway - this involves the addition of a new "system" field in the song (which solves the problem) diff --git a/demos/Checknobankh.fur b/demos/Checknobankh.fur new file mode 100644 index 000000000..ac465df98 Binary files /dev/null and b/demos/Checknobankh.fur differ diff --git a/demos/Contraduct Design OPL3 Cover.fur b/demos/Contraduct Design OPL3 Cover.fur new file mode 100644 index 000000000..750fb2d32 Binary files /dev/null and b/demos/Contraduct Design OPL3 Cover.fur differ diff --git a/demos/the_king_of_crisp.fur b/demos/the_king_of_crisp.fur new file mode 100644 index 000000000..afb4cbb83 Binary files /dev/null and b/demos/the_king_of_crisp.fur differ diff --git a/demos/the_machines_are_socialising.fur b/demos/the_machines_are_socialising.fur new file mode 100644 index 000000000..870874daf Binary files /dev/null and b/demos/the_machines_are_socialising.fur differ diff --git a/demos/the_serenity_of_lonliness.fur b/demos/the_serenity_of_lonliness.fur new file mode 100644 index 000000000..dc733370f Binary files /dev/null and b/demos/the_serenity_of_lonliness.fur differ diff --git a/extern/Nuked-OPLL/opll.c b/extern/Nuked-OPLL/opll.c index ecff69fd3..bd59709ab 100644 --- a/extern/Nuked-OPLL/opll.c +++ b/extern/Nuked-OPLL/opll.c @@ -1019,6 +1019,10 @@ static void OPLL_Operator(opll_t *chip) { } chip->ch_out = ismod1 ? routput : (output>>3); + + if (!ismod1) { + chip->output_ch[(chip->cycles+1)%9] = chip->ch_out; + } } static void OPLL_DoRhythm(opll_t *chip) { diff --git a/extern/Nuked-OPLL/opll.h b/extern/Nuked-OPLL/opll.h index 85c721a78..981139396 100644 --- a/extern/Nuked-OPLL/opll.h +++ b/extern/Nuked-OPLL/opll.h @@ -191,6 +191,8 @@ typedef struct { int16_t output_m; int16_t output_r; + int16_t output_ch[9]; + } opll_t; const opll_patch_t* OPLL_GetPatchROM(uint32_t chip_type); diff --git a/extern/Nuked-PSG/ympsg.c b/extern/Nuked-PSG/ympsg.c index 935b43ea9..0cc065ed5 100644 --- a/extern/Nuked-PSG/ympsg.c +++ b/extern/Nuked-PSG/ympsg.c @@ -245,6 +245,11 @@ void YMPSG_Write(ympsg_t *chip, uint8_t data) chip->write_flag = 1; } +void YMPSG_WriteStereo(ympsg_t *chip, uint8_t data) +{ + chip->stereo = data; +} + uint16_t YMPSG_Read(ympsg_t *chip) { uint16_t data = 0; @@ -265,6 +270,7 @@ void YMPSG_Init(ympsg_t *chip, uint8_t real_sn, uint8_t noise_tap1, uint8_t nois chip->noise_tap1 = noise_tap1; chip->noise_tap2 = noise_tap2; chip->noise_size = noise_size; + chip->stereo = 0xff; for (i = 0; i < 17; i++) { chip->vol_table[i]=(real_sn?tipsg_vol[i]:ympsg_vol[i]) * 8192.0f; @@ -316,32 +322,62 @@ void YMPSG_Clock(ympsg_t *chip) } } -int YMPSG_GetOutput(ympsg_t *chip) +void YMPSG_GetOutput(ympsg_t *chip, int* left, int* right) { - int sample = 0; + int sample_left = 0; + int sample_right = 0; uint32_t i; YMPSG_UpdateSample(chip); if (chip->test & 1) { - sample += chip->vol_table[chip->volume_out[chip->test >> 1]]; - sample += chip->vol_table[16] * 3; + sample_left += chip->vol_table[chip->volume_out[chip->test >> 1]]; + sample_left += chip->vol_table[16] * 3; + sample_right += chip->vol_table[chip->volume_out[chip->test >> 1]]; + sample_right += chip->vol_table[16] * 3; } else if (!chip->mute) { - sample += chip->vol_table[chip->volume_out[0]]; - sample += chip->vol_table[chip->volume_out[1]]; - sample += chip->vol_table[chip->volume_out[2]]; - sample += chip->vol_table[chip->volume_out[3]]; + if (chip->stereo&(0x10)) { + sample_left += chip->vol_table[chip->volume_out[0]]; + } + if (chip->stereo&(0x01)) { + sample_right += chip->vol_table[chip->volume_out[0]]; + } + if (chip->stereo&(0x20)) { + sample_left += chip->vol_table[chip->volume_out[1]]; + } + if (chip->stereo&(0x02)) { + sample_right += chip->vol_table[chip->volume_out[1]]; + } + if (chip->stereo&(0x40)) { + sample_left += chip->vol_table[chip->volume_out[2]]; + } + if (chip->stereo&(0x04)) { + sample_right += chip->vol_table[chip->volume_out[2]]; + } + if (chip->stereo&(0x80)) { + sample_left += chip->vol_table[chip->volume_out[3]]; + } + if (chip->stereo&(0x08)) { + sample_right += chip->vol_table[chip->volume_out[3]]; + } } else { for (i = 0; i < 4; i++) { - if (!((chip->mute>>i) & 1)) - sample += chip->vol_table[chip->volume_out[i]]; + if (!((chip->mute>>i) & 1)) { + if (chip->stereo&(0x10<vol_table[chip->volume_out[i]]; + } + if (chip->stereo&(0x01<vol_table[chip->volume_out[i]]; + } + } } } - return sample; + *left=sample_left; + *right=sample_right; } void YMPSG_Test(ympsg_t *chip, uint16_t test) @@ -349,7 +385,7 @@ void YMPSG_Test(ympsg_t *chip, uint16_t test) chip->test = (test >> 9) & 7; } - +/* void YMPSG_Generate(ympsg_t *chip, int32_t *buf) { uint32_t i; @@ -373,7 +409,7 @@ void YMPSG_Generate(ympsg_t *chip, int32_t *buf) } out = YMPSG_GetOutput(chip); *buf = (int32_t)(out * 8192.f); -} +}*/ void YMPSG_WriteBuffered(ympsg_t *chip, uint8_t data) { diff --git a/extern/Nuked-PSG/ympsg.h b/extern/Nuked-PSG/ympsg.h index 97e039e3c..bb3f60094 100644 --- a/extern/Nuked-PSG/ympsg.h +++ b/extern/Nuked-PSG/ympsg.h @@ -52,6 +52,8 @@ typedef struct { uint8_t test; uint8_t volume_out[4]; + uint8_t stereo; + // uint64_t writebuf_samplecnt; uint32_t writebuf_cur; @@ -68,15 +70,16 @@ typedef struct { void YMPSG_Write(ympsg_t *chip, uint8_t data); +void YMPSG_WriteStereo(ympsg_t *chip, uint8_t data); uint16_t YMPSG_Read(ympsg_t *chip); void YMPSG_Init(ympsg_t *chip, uint8_t real_sn, uint8_t noise_tap1, uint8_t noise_tap2, uint32_t noise_size); void YMPSG_SetIC(ympsg_t *chip, uint32_t ic); void YMPSG_Clock(ympsg_t *chip); -int YMPSG_GetOutput(ympsg_t *chip); +void YMPSG_GetOutput(ympsg_t *chip, int* left, int* right); void YMPSG_Test(ympsg_t *chip, uint16_t test); -void YMPSG_Generate(ympsg_t *chip, int32_t *buf); +//void YMPSG_Generate(ympsg_t *chip, int32_t *buf); void YMPSG_WriteBuffered(ympsg_t *chip, uint8_t data); void YMPSG_SetMute(ympsg_t *chip, uint8_t mute); diff --git a/extern/nfd-modified/src/nfd_cocoa.mm b/extern/nfd-modified/src/nfd_cocoa.mm index 4e0f9e0bf..204d79f88 100644 --- a/extern/nfd-modified/src/nfd_cocoa.mm +++ b/extern/nfd-modified/src/nfd_cocoa.mm @@ -23,7 +23,12 @@ static NSArray *BuildAllowedFileTypes( const std::vector& filterLis NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; std::string typebuf; + int index=-1; for (const std::string& i: filterList) { + index++; + if (!(index&1)) { + continue; + } typebuf=""; for (const char& j: i) { if (j==' ' || j==',' || j ==';') { diff --git a/extern/nfd-modified/src/nfd_win.cpp b/extern/nfd-modified/src/nfd_win.cpp index 2e7f4000b..9273bb1e7 100644 --- a/extern/nfd-modified/src/nfd_win.cpp +++ b/extern/nfd-modified/src/nfd_win.cpp @@ -211,7 +211,8 @@ static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const std: // Count rows to alloc UINT filterCount = filterList.size()>>1; /* guaranteed to have one filter on a correct, non-empty parse */ - assert(filterCount); + if (filterCount==0) filterCount=1; + if ( !filterCount ) { NFDi_SetError("Error parsing filters."); @@ -219,12 +220,12 @@ static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const std: } /* filterCount plus 1 because we hardcode the *.* wildcard after the while loop */ - COMDLG_FILTERSPEC *specList = (COMDLG_FILTERSPEC*)NFDi_Malloc( sizeof(COMDLG_FILTERSPEC) * ((size_t)filterCount + 1) ); + COMDLG_FILTERSPEC *specList = (COMDLG_FILTERSPEC*)NFDi_Malloc( sizeof(COMDLG_FILTERSPEC) * ((size_t)filterCount) ); if ( !specList ) { return NFD_ERROR; } - for (UINT i = 0; i < filterCount+1; ++i ) + for (UINT i = 0; i < filterCount; ++i ) { specList[i].pszName = NULL; specList[i].pszSpec = NULL; @@ -236,19 +237,22 @@ static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const std: String name=filterList[i]; String spec=filterList[i+1]; for (char& i: spec) { - if (i==' ') i=','; + if (i==' ') i=';'; } + if (spec==".*") spec="*.*"; CopyNFDCharToWChar( name.c_str(), (wchar_t**)&specList[specIdx].pszName ); CopyNFDCharToWChar( spec.c_str(), (wchar_t**)&specList[specIdx].pszSpec ); ++specIdx; } - /* Add wildcard */ - specList[specIdx].pszSpec = WILDCARD; - specList[specIdx].pszName = WILDCARD; + /* Add wildcard if specIdx is 0 */ + if (specIdx==0) { + specList[specIdx].pszSpec = WILDCARD; + specList[specIdx].pszName = WILDCARD; + } - fileOpenDialog->SetFileTypes( filterCount+1, specList ); + fileOpenDialog->SetFileTypes( filterCount, specList ); /* free speclist */ for ( size_t i = 0; i < filterCount; ++i ) diff --git a/extern/rtmidi/RtMidi.cpp b/extern/rtmidi/RtMidi.cpp index 8958e6cca..b54da7e1d 100644 --- a/extern/rtmidi/RtMidi.cpp +++ b/extern/rtmidi/RtMidi.cpp @@ -40,6 +40,7 @@ #include "RtMidi.h" #include +#ifdef TARGET_OS_IPHONE #if (TARGET_OS_IPHONE == 1) #define AudioGetCurrentHostTime CAHostTimeBase::GetCurrentTime @@ -66,6 +67,7 @@ #define EndianS32_BtoN(n) n #endif +#endif // Default for Windows is to add an identifier to the port names; this // flag can be defined (e.g. in your project file) to disable this behaviour. @@ -814,7 +816,7 @@ MidiOutApi :: ~MidiOutApi( void ) // time values. // These are not available on iOS. -#if (TARGET_OS_IPHONE == 0) +#ifdef TARGET_OS_IPHONE #include #include #endif diff --git a/instruments/FM/accordion/Accordion.dmp b/instruments/FM/accordion/Accordion.dmp new file mode 100644 index 000000000..10b8011c2 Binary files /dev/null and b/instruments/FM/accordion/Accordion.dmp differ diff --git a/instruments/FM/accordion/Harmonium.dmp b/instruments/FM/accordion/Harmonium.dmp new file mode 100644 index 000000000..3dba2392f Binary files /dev/null and b/instruments/FM/accordion/Harmonium.dmp differ diff --git a/instruments/FM/accordion/brickblock369 Accordion.dmp b/instruments/FM/accordion/brickblock369 Accordion.dmp new file mode 100644 index 000000000..f3a1cd95a Binary files /dev/null and b/instruments/FM/accordion/brickblock369 Accordion.dmp differ diff --git a/instruments/FM/bass/(CH3) Double Synth.dmp b/instruments/FM/bass/(CH3) Double Synth.dmp new file mode 100644 index 000000000..3b3997249 Binary files /dev/null and b/instruments/FM/bass/(CH3) Double Synth.dmp differ diff --git a/instruments/FM/bass/(GEN) Bass Guitar 1.dmp b/instruments/FM/bass/(GEN) Bass Guitar 1.dmp new file mode 100644 index 000000000..4a7dff8df Binary files /dev/null and b/instruments/FM/bass/(GEN) Bass Guitar 1.dmp differ diff --git a/instruments/FM/bass/(GEN) Bass Guitar 2.dmp b/instruments/FM/bass/(GEN) Bass Guitar 2.dmp new file mode 100644 index 000000000..f2ab416ce Binary files /dev/null and b/instruments/FM/bass/(GEN) Bass Guitar 2.dmp differ diff --git a/instruments/FM/bass/(GEN) Bass Guitar 3.dmp b/instruments/FM/bass/(GEN) Bass Guitar 3.dmp new file mode 100644 index 000000000..f4b99414b Binary files /dev/null and b/instruments/FM/bass/(GEN) Bass Guitar 3.dmp differ diff --git a/instruments/FM/bass/(GEN) Common Genesis Bass.dmp b/instruments/FM/bass/(GEN) Common Genesis Bass.dmp new file mode 100644 index 000000000..5b408d4ea Binary files /dev/null and b/instruments/FM/bass/(GEN) Common Genesis Bass.dmp differ diff --git a/instruments/FM/bass/(GEN) Electric Bass Guitar.dmp b/instruments/FM/bass/(GEN) Electric Bass Guitar.dmp new file mode 100644 index 000000000..a82e47bc6 Binary files /dev/null and b/instruments/FM/bass/(GEN) Electric Bass Guitar.dmp differ diff --git a/instruments/FM/bass/(GEN) Growl Bass.dmp b/instruments/FM/bass/(GEN) Growl Bass.dmp new file mode 100644 index 000000000..0a8dcf475 Binary files /dev/null and b/instruments/FM/bass/(GEN) Growl Bass.dmp differ diff --git a/instruments/FM/bass/(GEN) Heavy Electric Bass.dmp b/instruments/FM/bass/(GEN) Heavy Electric Bass.dmp new file mode 100644 index 000000000..33e69bb3d Binary files /dev/null and b/instruments/FM/bass/(GEN) Heavy Electric Bass.dmp differ diff --git a/instruments/FM/bass/(GEN) Low Piano.dmp b/instruments/FM/bass/(GEN) Low Piano.dmp new file mode 100644 index 000000000..3e559a7cf Binary files /dev/null and b/instruments/FM/bass/(GEN) Low Piano.dmp differ diff --git a/instruments/FM/bass/(GEN) Low Sax.dmp b/instruments/FM/bass/(GEN) Low Sax.dmp new file mode 100644 index 000000000..5a01285f2 Binary files /dev/null and b/instruments/FM/bass/(GEN) Low Sax.dmp differ diff --git a/instruments/FM/bass/(GEN) Low Square.dmp b/instruments/FM/bass/(GEN) Low Square.dmp new file mode 100644 index 000000000..010a44600 Binary files /dev/null and b/instruments/FM/bass/(GEN) Low Square.dmp differ diff --git a/instruments/FM/bass/(GEN) Low Trumpet.dmp b/instruments/FM/bass/(GEN) Low Trumpet.dmp new file mode 100644 index 000000000..407a1504a Binary files /dev/null and b/instruments/FM/bass/(GEN) Low Trumpet.dmp differ diff --git a/instruments/FM/bass/(GEN) Punch Packer.dmp b/instruments/FM/bass/(GEN) Punch Packer.dmp new file mode 100644 index 000000000..8c33422bf Binary files /dev/null and b/instruments/FM/bass/(GEN) Punch Packer.dmp differ diff --git a/instruments/FM/bass/(GEN) Rounded Saw.dmp b/instruments/FM/bass/(GEN) Rounded Saw.dmp new file mode 100644 index 000000000..62e3b0efd Binary files /dev/null and b/instruments/FM/bass/(GEN) Rounded Saw.dmp differ diff --git a/instruments/FM/bass/(GEN) Slap Bass 1.dmp b/instruments/FM/bass/(GEN) Slap Bass 1.dmp new file mode 100644 index 000000000..d011abcd5 Binary files /dev/null and b/instruments/FM/bass/(GEN) Slap Bass 1.dmp differ diff --git a/instruments/FM/bass/(GEN) Slap Bass 2.dmp b/instruments/FM/bass/(GEN) Slap Bass 2.dmp new file mode 100644 index 000000000..fbd6ae8d7 Binary files /dev/null and b/instruments/FM/bass/(GEN) Slap Bass 2.dmp differ diff --git a/instruments/FM/bass/(GEN) Slap Bass 3.dmp b/instruments/FM/bass/(GEN) Slap Bass 3.dmp new file mode 100644 index 000000000..431b43fe1 Binary files /dev/null and b/instruments/FM/bass/(GEN) Slap Bass 3.dmp differ diff --git a/instruments/FM/bass/(GEN) Space Synth.dmp b/instruments/FM/bass/(GEN) Space Synth.dmp new file mode 100644 index 000000000..d84a79691 Binary files /dev/null and b/instruments/FM/bass/(GEN) Space Synth.dmp differ diff --git a/instruments/FM/bass/(GEN) Sunsoft Slap Bass.dmp b/instruments/FM/bass/(GEN) Sunsoft Slap Bass.dmp new file mode 100644 index 000000000..2da8452d1 Binary files /dev/null and b/instruments/FM/bass/(GEN) Sunsoft Slap Bass.dmp differ diff --git a/instruments/FM/bass/(GEN) Synth.dmp b/instruments/FM/bass/(GEN) Synth.dmp new file mode 100644 index 000000000..c2ea0d0e7 Binary files /dev/null and b/instruments/FM/bass/(GEN) Synth.dmp differ diff --git a/instruments/FM/bass/(GEN) Techno Bass 1.dmp b/instruments/FM/bass/(GEN) Techno Bass 1.dmp new file mode 100644 index 000000000..85d3cf965 Binary files /dev/null and b/instruments/FM/bass/(GEN) Techno Bass 1.dmp differ diff --git a/instruments/FM/bass/(GEN) Techno Bass 2.dmp b/instruments/FM/bass/(GEN) Techno Bass 2.dmp new file mode 100644 index 000000000..84e12a142 Binary files /dev/null and b/instruments/FM/bass/(GEN) Techno Bass 2.dmp differ diff --git a/instruments/FM/bass/(GEN) Thiel Bass.dmp b/instruments/FM/bass/(GEN) Thiel Bass.dmp new file mode 100644 index 000000000..17817d34e Binary files /dev/null and b/instruments/FM/bass/(GEN) Thiel Bass.dmp differ diff --git a/instruments/FM/bass/(GEN) Tuba 1.dmp b/instruments/FM/bass/(GEN) Tuba 1.dmp new file mode 100644 index 000000000..9b5250d97 Binary files /dev/null and b/instruments/FM/bass/(GEN) Tuba 1.dmp differ diff --git a/instruments/FM/bass/(GEN) Tuba 2.dmp b/instruments/FM/bass/(GEN) Tuba 2.dmp new file mode 100644 index 000000000..0a8dfcaf8 Binary files /dev/null and b/instruments/FM/bass/(GEN) Tuba 2.dmp differ diff --git a/instruments/FM/bass/(GEN) Twang.dmp b/instruments/FM/bass/(GEN) Twang.dmp new file mode 100644 index 000000000..093a0f8cf Binary files /dev/null and b/instruments/FM/bass/(GEN) Twang.dmp differ diff --git a/instruments/FM/bass/(GEN) VRC7 Bass.dmp b/instruments/FM/bass/(GEN) VRC7 Bass.dmp new file mode 100644 index 000000000..6f79a3394 Binary files /dev/null and b/instruments/FM/bass/(GEN) VRC7 Bass.dmp differ diff --git a/instruments/FM/bass/Algorithmic Bass.fui b/instruments/FM/bass/Algorithmic Bass.fui new file mode 100644 index 000000000..b1e2deb1a Binary files /dev/null and b/instruments/FM/bass/Algorithmic Bass.fui differ diff --git a/instruments/FM/bass/Bass Guitar.dmp b/instruments/FM/bass/Bass Guitar.dmp new file mode 100644 index 000000000..c55655574 Binary files /dev/null and b/instruments/FM/bass/Bass Guitar.dmp differ diff --git a/instruments/FM/bass/BassThing.dmp b/instruments/FM/bass/BassThing.dmp new file mode 100644 index 000000000..57c74f3bd Binary files /dev/null and b/instruments/FM/bass/BassThing.dmp differ diff --git a/instruments/FM/bass/Double Bass.dmp b/instruments/FM/bass/Double Bass.dmp new file mode 100644 index 000000000..4542d741c Binary files /dev/null and b/instruments/FM/bass/Double Bass.dmp differ diff --git a/instruments/FM/bass/FM-Bass-2.dmp b/instruments/FM/bass/FM-Bass-2.dmp new file mode 100644 index 000000000..f87bfbfff Binary files /dev/null and b/instruments/FM/bass/FM-Bass-2.dmp differ diff --git a/instruments/FM/bass/FM_Bass.dmp b/instruments/FM/bass/FM_Bass.dmp new file mode 100644 index 000000000..bcef63c5a Binary files /dev/null and b/instruments/FM/bass/FM_Bass.dmp differ diff --git a/instruments/FM/bass/GEMSLike Bass.dmp b/instruments/FM/bass/GEMSLike Bass.dmp new file mode 100644 index 000000000..04581696b Binary files /dev/null and b/instruments/FM/bass/GEMSLike Bass.dmp differ diff --git a/instruments/FM/bass/Levin Bass.dmp b/instruments/FM/bass/Levin Bass.dmp new file mode 100644 index 000000000..6c57392ad Binary files /dev/null and b/instruments/FM/bass/Levin Bass.dmp differ diff --git a/instruments/FM/bass/Passport Bass.dmp b/instruments/FM/bass/Passport Bass.dmp new file mode 100644 index 000000000..58c072868 Binary files /dev/null and b/instruments/FM/bass/Passport Bass.dmp differ diff --git a/instruments/FM/bass/Piano Bass.dmp b/instruments/FM/bass/Piano Bass.dmp new file mode 100644 index 000000000..d50da1b99 Binary files /dev/null and b/instruments/FM/bass/Piano Bass.dmp differ diff --git a/instruments/FM/bass/Power Bass.dmp b/instruments/FM/bass/Power Bass.dmp new file mode 100644 index 000000000..a7b5e98ed Binary files /dev/null and b/instruments/FM/bass/Power Bass.dmp differ diff --git a/instruments/FM/bass/Punch Bass.dmp b/instruments/FM/bass/Punch Bass.dmp new file mode 100644 index 000000000..90189febf Binary files /dev/null and b/instruments/FM/bass/Punch Bass.dmp differ diff --git a/instruments/FM/bass/Radical Bass.dmp b/instruments/FM/bass/Radical Bass.dmp new file mode 100644 index 000000000..095d225d7 Binary files /dev/null and b/instruments/FM/bass/Radical Bass.dmp differ diff --git a/instruments/FM/bass/Real Bass 1.dmp b/instruments/FM/bass/Real Bass 1.dmp new file mode 100644 index 000000000..58a0169b7 Binary files /dev/null and b/instruments/FM/bass/Real Bass 1.dmp differ diff --git a/instruments/FM/bass/Real Bass 2.dmp b/instruments/FM/bass/Real Bass 2.dmp new file mode 100644 index 000000000..5e6cefcc0 Binary files /dev/null and b/instruments/FM/bass/Real Bass 2.dmp differ diff --git a/instruments/FM/bass/Resonant Bass.dmp b/instruments/FM/bass/Resonant Bass.dmp new file mode 100644 index 000000000..2ae09ad01 Binary files /dev/null and b/instruments/FM/bass/Resonant Bass.dmp differ diff --git a/instruments/FM/bass/Slap Bass.dmp b/instruments/FM/bass/Slap Bass.dmp new file mode 100644 index 000000000..5c15c14c5 Binary files /dev/null and b/instruments/FM/bass/Slap Bass.dmp differ diff --git a/instruments/FM/bass/Spooky Bass.dmp b/instruments/FM/bass/Spooky Bass.dmp new file mode 100644 index 000000000..b511715b7 Binary files /dev/null and b/instruments/FM/bass/Spooky Bass.dmp differ diff --git a/instruments/FM/bass/Squire Bass.dmp b/instruments/FM/bass/Squire Bass.dmp new file mode 100644 index 000000000..887f25e42 Binary files /dev/null and b/instruments/FM/bass/Squire Bass.dmp differ diff --git a/instruments/FM/bass/Sublime Bass.dmp b/instruments/FM/bass/Sublime Bass.dmp new file mode 100644 index 000000000..3bae37d1d Binary files /dev/null and b/instruments/FM/bass/Sublime Bass.dmp differ diff --git a/instruments/FM/bass/acoustic bass.dmp b/instruments/FM/bass/acoustic bass.dmp new file mode 100644 index 000000000..6f58b76c9 Binary files /dev/null and b/instruments/FM/bass/acoustic bass.dmp differ diff --git a/instruments/FM/bass/algobass.dmp b/instruments/FM/bass/algobass.dmp new file mode 100644 index 000000000..e2d4197cb Binary files /dev/null and b/instruments/FM/bass/algobass.dmp differ diff --git a/instruments/FM/bass/bass_acoustic_00.fui b/instruments/FM/bass/bass_acoustic_00.fui new file mode 100644 index 000000000..0ba14ba9c Binary files /dev/null and b/instruments/FM/bass/bass_acoustic_00.fui differ diff --git a/instruments/FM/bass/bass_electric_00.fui b/instruments/FM/bass/bass_electric_00.fui new file mode 100644 index 000000000..7eedbc8ee Binary files /dev/null and b/instruments/FM/bass/bass_electric_00.fui differ diff --git a/instruments/FM/bass/bass_electric_01.fui b/instruments/FM/bass/bass_electric_01.fui new file mode 100644 index 000000000..f0a9f14bc Binary files /dev/null and b/instruments/FM/bass/bass_electric_01.fui differ diff --git a/instruments/FM/bass/bass_electric_02.fui b/instruments/FM/bass/bass_electric_02.fui new file mode 100644 index 000000000..c33d5a8c4 Binary files /dev/null and b/instruments/FM/bass/bass_electric_02.fui differ diff --git a/instruments/FM/bass/bass_electric_03_muffled.fui b/instruments/FM/bass/bass_electric_03_muffled.fui new file mode 100644 index 000000000..5fd71d8a3 Binary files /dev/null and b/instruments/FM/bass/bass_electric_03_muffled.fui differ diff --git a/instruments/FM/bass/bass_electric_04.fui b/instruments/FM/bass/bass_electric_04.fui new file mode 100644 index 000000000..9a015fbd8 Binary files /dev/null and b/instruments/FM/bass/bass_electric_04.fui differ diff --git a/instruments/FM/bass/bass_electric_05_amp.fui b/instruments/FM/bass/bass_electric_05_amp.fui new file mode 100644 index 000000000..a5ac0c048 Binary files /dev/null and b/instruments/FM/bass/bass_electric_05_amp.fui differ diff --git a/instruments/FM/bass/bass_growl_00_wobbly.fui b/instruments/FM/bass/bass_growl_00_wobbly.fui new file mode 100644 index 000000000..f8084eb89 Binary files /dev/null and b/instruments/FM/bass/bass_growl_00_wobbly.fui differ diff --git a/instruments/FM/bass/bass_growl_01_wobbly2.fui b/instruments/FM/bass/bass_growl_01_wobbly2.fui new file mode 100644 index 000000000..7111e2817 Binary files /dev/null and b/instruments/FM/bass/bass_growl_01_wobbly2.fui differ diff --git a/instruments/FM/bass/bass_growl_02_wobbly3.fui b/instruments/FM/bass/bass_growl_02_wobbly3.fui new file mode 100644 index 000000000..ac91ef7cf Binary files /dev/null and b/instruments/FM/bass/bass_growl_02_wobbly3.fui differ diff --git a/instruments/FM/bass/bass_picked_00.fui b/instruments/FM/bass/bass_picked_00.fui new file mode 100644 index 000000000..45d50b83d Binary files /dev/null and b/instruments/FM/bass/bass_picked_00.fui differ diff --git a/instruments/FM/bass/bass_picked_01_snappy.fui b/instruments/FM/bass/bass_picked_01_snappy.fui new file mode 100644 index 000000000..5561af9cc Binary files /dev/null and b/instruments/FM/bass/bass_picked_01_snappy.fui differ diff --git a/instruments/FM/bass/bass_picked_02.fui b/instruments/FM/bass/bass_picked_02.fui new file mode 100644 index 000000000..5093a621b Binary files /dev/null and b/instruments/FM/bass/bass_picked_02.fui differ diff --git a/instruments/FM/bass/bass_slap_00.fui b/instruments/FM/bass/bass_slap_00.fui new file mode 100644 index 000000000..7cadc66c4 Binary files /dev/null and b/instruments/FM/bass/bass_slap_00.fui differ diff --git a/instruments/FM/bass/bass_slap_01.fui b/instruments/FM/bass/bass_slap_01.fui new file mode 100644 index 000000000..280a0d1f4 Binary files /dev/null and b/instruments/FM/bass/bass_slap_01.fui differ diff --git a/instruments/FM/bass/bass_slap_02.fui b/instruments/FM/bass/bass_slap_02.fui new file mode 100644 index 000000000..5aae7b796 Binary files /dev/null and b/instruments/FM/bass/bass_slap_02.fui differ diff --git a/instruments/FM/bass/dxbass1.dmp b/instruments/FM/bass/dxbass1.dmp new file mode 100644 index 000000000..d77bb762f Binary files /dev/null and b/instruments/FM/bass/dxbass1.dmp differ diff --git a/instruments/FM/bass/dxbass2.dmp b/instruments/FM/bass/dxbass2.dmp new file mode 100644 index 000000000..800646cf6 Binary files /dev/null and b/instruments/FM/bass/dxbass2.dmp differ diff --git a/instruments/FM/bass/dxbass3.dmp b/instruments/FM/bass/dxbass3.dmp new file mode 100644 index 000000000..7bf0a5534 Binary files /dev/null and b/instruments/FM/bass/dxbass3.dmp differ diff --git a/instruments/FM/bass/dxbass4.dmp b/instruments/FM/bass/dxbass4.dmp new file mode 100644 index 000000000..a7db224a7 Binary files /dev/null and b/instruments/FM/bass/dxbass4.dmp differ diff --git a/instruments/FM/bass/dxbass5.dmp b/instruments/FM/bass/dxbass5.dmp new file mode 100644 index 000000000..abe46a08f Binary files /dev/null and b/instruments/FM/bass/dxbass5.dmp differ diff --git a/instruments/FM/bass/dxbass5slap.dmp b/instruments/FM/bass/dxbass5slap.dmp new file mode 100644 index 000000000..0ee63eb9a Binary files /dev/null and b/instruments/FM/bass/dxbass5slap.dmp differ diff --git a/instruments/FM/bass/fm_bass1.fui b/instruments/FM/bass/fm_bass1.fui new file mode 100644 index 000000000..d72ad4d9e Binary files /dev/null and b/instruments/FM/bass/fm_bass1.fui differ diff --git a/instruments/FM/bass/fm_bass2.fui b/instruments/FM/bass/fm_bass2.fui new file mode 100644 index 000000000..35fab8fbf Binary files /dev/null and b/instruments/FM/bass/fm_bass2.fui differ diff --git a/instruments/FM/bass/fm_bass3.fui b/instruments/FM/bass/fm_bass3.fui new file mode 100644 index 000000000..f2be99017 Binary files /dev/null and b/instruments/FM/bass/fm_bass3.fui differ diff --git a/instruments/FM/bass/generic alg 0 bass.dmp b/instruments/FM/bass/generic alg 0 bass.dmp new file mode 100644 index 000000000..c784e11f5 Binary files /dev/null and b/instruments/FM/bass/generic alg 0 bass.dmp differ diff --git a/instruments/FM/bass/nicco1690 Slap Bass.dmp b/instruments/FM/bass/nicco1690 Slap Bass.dmp new file mode 100644 index 000000000..32a80d194 Binary files /dev/null and b/instruments/FM/bass/nicco1690 Slap Bass.dmp differ diff --git a/instruments/FM/bass/sonic_modbass.dmp b/instruments/FM/bass/sonic_modbass.dmp new file mode 100644 index 000000000..2faf77c6c Binary files /dev/null and b/instruments/FM/bass/sonic_modbass.dmp differ diff --git a/instruments/FM/bass/weird bass.dmp b/instruments/FM/bass/weird bass.dmp new file mode 100644 index 000000000..7a81b3f18 Binary files /dev/null and b/instruments/FM/bass/weird bass.dmp differ diff --git a/instruments/FM/drums/(GEN) Crash.dmp b/instruments/FM/drums/(GEN) Crash.dmp new file mode 100644 index 000000000..3ca63d3c2 Binary files /dev/null and b/instruments/FM/drums/(GEN) Crash.dmp differ diff --git a/instruments/FM/drums/(GEN) Double Tom.dmp b/instruments/FM/drums/(GEN) Double Tom.dmp new file mode 100644 index 000000000..f2c20d24d Binary files /dev/null and b/instruments/FM/drums/(GEN) Double Tom.dmp differ diff --git a/instruments/FM/drums/(GEN) Hi-Hat Closed.dmp b/instruments/FM/drums/(GEN) Hi-Hat Closed.dmp new file mode 100644 index 000000000..11b708be7 Binary files /dev/null and b/instruments/FM/drums/(GEN) Hi-Hat Closed.dmp differ diff --git a/instruments/FM/drums/(GEN) Hi-Hat Open.dmp b/instruments/FM/drums/(GEN) Hi-Hat Open.dmp new file mode 100644 index 000000000..48b2a553e Binary files /dev/null and b/instruments/FM/drums/(GEN) Hi-Hat Open.dmp differ diff --git a/instruments/FM/drums/(GEN) Kick 1.dmp b/instruments/FM/drums/(GEN) Kick 1.dmp new file mode 100644 index 000000000..e260ccd28 Binary files /dev/null and b/instruments/FM/drums/(GEN) Kick 1.dmp differ diff --git a/instruments/FM/drums/(GEN) Kick 2.dmp b/instruments/FM/drums/(GEN) Kick 2.dmp new file mode 100644 index 000000000..7865aba26 Binary files /dev/null and b/instruments/FM/drums/(GEN) Kick 2.dmp differ diff --git a/instruments/FM/drums/(GEN) Light Snare.dmp b/instruments/FM/drums/(GEN) Light Snare.dmp new file mode 100644 index 000000000..9c7ee957b Binary files /dev/null and b/instruments/FM/drums/(GEN) Light Snare.dmp differ diff --git a/instruments/FM/drums/(GEN) Obvious Kick (C-5 02CC).dmp b/instruments/FM/drums/(GEN) Obvious Kick (C-5 02CC).dmp new file mode 100644 index 000000000..5b69c87c4 Binary files /dev/null and b/instruments/FM/drums/(GEN) Obvious Kick (C-5 02CC).dmp differ diff --git a/instruments/FM/drums/(GEN) Obvious Ride Closed (C-5).dmp b/instruments/FM/drums/(GEN) Obvious Ride Closed (C-5).dmp new file mode 100644 index 000000000..742fe944e Binary files /dev/null and b/instruments/FM/drums/(GEN) Obvious Ride Closed (C-5).dmp differ diff --git a/instruments/FM/drums/(GEN) Obvious Ride Open (C-5).dmp b/instruments/FM/drums/(GEN) Obvious Ride Open (C-5).dmp new file mode 100644 index 000000000..bc01447bb Binary files /dev/null and b/instruments/FM/drums/(GEN) Obvious Ride Open (C-5).dmp differ diff --git a/instruments/FM/drums/(GEN) Obvious Snare (D#5 0299).dmp b/instruments/FM/drums/(GEN) Obvious Snare (D#5 0299).dmp new file mode 100644 index 000000000..ade18f3a3 Binary files /dev/null and b/instruments/FM/drums/(GEN) Obvious Snare (D#5 0299).dmp differ diff --git a/instruments/FM/drums/(GEN) Obvious Tom (C-5 0266, G#4 0255, E-4 0244).dmp b/instruments/FM/drums/(GEN) Obvious Tom (C-5 0266, G#4 0255, E-4 0244).dmp new file mode 100644 index 000000000..fad653d35 Binary files /dev/null and b/instruments/FM/drums/(GEN) Obvious Tom (C-5 0266, G#4 0255, E-4 0244).dmp differ diff --git a/instruments/FM/drums/(GEN) Snare 1.dmp b/instruments/FM/drums/(GEN) Snare 1.dmp new file mode 100644 index 000000000..e2150df5c Binary files /dev/null and b/instruments/FM/drums/(GEN) Snare 1.dmp differ diff --git a/instruments/FM/drums/(GEN) Snare 2.dmp b/instruments/FM/drums/(GEN) Snare 2.dmp new file mode 100644 index 000000000..76b5100d3 Binary files /dev/null and b/instruments/FM/drums/(GEN) Snare 2.dmp differ diff --git a/instruments/FM/drums/(GEN) Snare 3.dmp b/instruments/FM/drums/(GEN) Snare 3.dmp new file mode 100644 index 000000000..77e488bec Binary files /dev/null and b/instruments/FM/drums/(GEN) Snare 3.dmp differ diff --git a/instruments/FM/drums/(GEN) Timpani.dmp b/instruments/FM/drums/(GEN) Timpani.dmp new file mode 100644 index 000000000..e603fb3c9 Binary files /dev/null and b/instruments/FM/drums/(GEN) Timpani.dmp differ diff --git a/instruments/FM/drums/(GEN) Tom.dmp b/instruments/FM/drums/(GEN) Tom.dmp new file mode 100644 index 000000000..23e8fba24 Binary files /dev/null and b/instruments/FM/drums/(GEN) Tom.dmp differ diff --git a/instruments/FM/drums/(GEN) Trap Snare Carry (C-4, 0201).dmp b/instruments/FM/drums/(GEN) Trap Snare Carry (C-4, 0201).dmp new file mode 100644 index 000000000..7412d8b5b Binary files /dev/null and b/instruments/FM/drums/(GEN) Trap Snare Carry (C-4, 0201).dmp differ diff --git a/instruments/FM/drums/(GEN) Trap Snare Start (D-4 023F).dmp b/instruments/FM/drums/(GEN) Trap Snare Start (D-4 023F).dmp new file mode 100644 index 000000000..24e76a6b6 Binary files /dev/null and b/instruments/FM/drums/(GEN) Trap Snare Start (D-4 023F).dmp differ diff --git a/instruments/FM/drums/(GEN) Triangle.dmp b/instruments/FM/drums/(GEN) Triangle.dmp new file mode 100644 index 000000000..d6c815827 Binary files /dev/null and b/instruments/FM/drums/(GEN) Triangle.dmp differ diff --git a/instruments/FM/drums/(GEN) Wood Block.dmp b/instruments/FM/drums/(GEN) Wood Block.dmp new file mode 100644 index 000000000..7db9914fb Binary files /dev/null and b/instruments/FM/drums/(GEN) Wood Block.dmp differ diff --git a/instruments/FM/drums/909 Hat.dmp b/instruments/FM/drums/909 Hat.dmp new file mode 100644 index 000000000..f741549e8 Binary files /dev/null and b/instruments/FM/drums/909 Hat.dmp differ diff --git a/instruments/FM/drums/Compressed Clap.fui b/instruments/FM/drums/Compressed Clap.fui new file mode 100644 index 000000000..febdab11d Binary files /dev/null and b/instruments/FM/drums/Compressed Clap.fui differ diff --git a/instruments/FM/drums/Cymbal.dmp b/instruments/FM/drums/Cymbal.dmp new file mode 100644 index 000000000..d479515ea Binary files /dev/null and b/instruments/FM/drums/Cymbal.dmp differ diff --git a/instruments/FM/drums/GB Tom.fui b/instruments/FM/drums/GB Tom.fui new file mode 100644 index 000000000..41d0fe407 Binary files /dev/null and b/instruments/FM/drums/GB Tom.fui differ diff --git a/instruments/FM/drums/Heavy Kick.fui b/instruments/FM/drums/Heavy Kick.fui new file mode 100644 index 000000000..79a85e516 Binary files /dev/null and b/instruments/FM/drums/Heavy Kick.fui differ diff --git a/instruments/FM/drums/Kick_B0.dmp b/instruments/FM/drums/Kick_B0.dmp new file mode 100644 index 000000000..765d486a5 Binary files /dev/null and b/instruments/FM/drums/Kick_B0.dmp differ diff --git a/instruments/FM/drums/Less Chrunchy Snare.dmp b/instruments/FM/drums/Less Chrunchy Snare.dmp new file mode 100644 index 000000000..3d23eaeed Binary files /dev/null and b/instruments/FM/drums/Less Chrunchy Snare.dmp differ diff --git a/instruments/FM/drums/Snare_B2.dmp b/instruments/FM/drums/Snare_B2.dmp new file mode 100644 index 000000000..7a659bf09 Binary files /dev/null and b/instruments/FM/drums/Snare_B2.dmp differ diff --git a/instruments/FM/drums/Squishy Snare.fui b/instruments/FM/drums/Squishy Snare.fui new file mode 100644 index 000000000..3ccef338c Binary files /dev/null and b/instruments/FM/drums/Squishy Snare.fui differ diff --git a/instruments/FM/drums/Trap Kick.dmp b/instruments/FM/drums/Trap Kick.dmp new file mode 100644 index 000000000..5ec7e633b Binary files /dev/null and b/instruments/FM/drums/Trap Kick.dmp differ diff --git a/instruments/FM/drums/Trap Snare.dmp b/instruments/FM/drums/Trap Snare.dmp new file mode 100644 index 000000000..32bedfd87 Binary files /dev/null and b/instruments/FM/drums/Trap Snare.dmp differ diff --git a/instruments/FM/drums/[2OPHigh]HatClosed_B2.dmp b/instruments/FM/drums/[2OPHigh]HatClosed_B2.dmp new file mode 100644 index 000000000..89d5af4d8 Binary files /dev/null and b/instruments/FM/drums/[2OPHigh]HatClosed_B2.dmp differ diff --git a/instruments/FM/drums/[2OPHigh]HatOpen_B2.dmp b/instruments/FM/drums/[2OPHigh]HatOpen_B2.dmp new file mode 100644 index 000000000..3977bb67e Binary files /dev/null and b/instruments/FM/drums/[2OPHigh]HatOpen_B2.dmp differ diff --git a/instruments/FM/drums/crash_00.fui b/instruments/FM/drums/crash_00.fui new file mode 100644 index 000000000..cacf151c1 Binary files /dev/null and b/instruments/FM/drums/crash_00.fui differ diff --git a/instruments/FM/drums/hihat_00.fui b/instruments/FM/drums/hihat_00.fui new file mode 100644 index 000000000..90e56468a Binary files /dev/null and b/instruments/FM/drums/hihat_00.fui differ diff --git a/instruments/FM/drums/kick_00_classic.fui b/instruments/FM/drums/kick_00_classic.fui new file mode 100644 index 000000000..e48795c8f Binary files /dev/null and b/instruments/FM/drums/kick_00_classic.fui differ diff --git a/instruments/FM/drums/kick_01_power.fui b/instruments/FM/drums/kick_01_power.fui new file mode 100644 index 000000000..d091d9e85 Binary files /dev/null and b/instruments/FM/drums/kick_01_power.fui differ diff --git a/instruments/FM/drums/kick_02_power2.fui b/instruments/FM/drums/kick_02_power2.fui new file mode 100644 index 000000000..2e348ba4f Binary files /dev/null and b/instruments/FM/drums/kick_02_power2.fui differ diff --git a/instruments/FM/drums/kick_03_muffled.fui b/instruments/FM/drums/kick_03_muffled.fui new file mode 100644 index 000000000..3e0219533 Binary files /dev/null and b/instruments/FM/drums/kick_03_muffled.fui differ diff --git a/instruments/FM/drums/kick_04_bassdrum.fui b/instruments/FM/drums/kick_04_bassdrum.fui new file mode 100644 index 000000000..d86c2450f Binary files /dev/null and b/instruments/FM/drums/kick_04_bassdrum.fui differ diff --git a/instruments/FM/drums/kick_05_noisy.fui b/instruments/FM/drums/kick_05_noisy.fui new file mode 100644 index 000000000..5dbabbfd6 Binary files /dev/null and b/instruments/FM/drums/kick_05_noisy.fui differ diff --git a/instruments/FM/drums/kick_06_fat.fui b/instruments/FM/drums/kick_06_fat.fui new file mode 100644 index 000000000..151f01720 Binary files /dev/null and b/instruments/FM/drums/kick_06_fat.fui differ diff --git a/instruments/FM/drums/kick_07_fat2.fui b/instruments/FM/drums/kick_07_fat2.fui new file mode 100644 index 000000000..99dbe4dfd Binary files /dev/null and b/instruments/FM/drums/kick_07_fat2.fui differ diff --git a/instruments/FM/drums/snare_00_simple.fui b/instruments/FM/drums/snare_00_simple.fui new file mode 100644 index 000000000..882e10916 Binary files /dev/null and b/instruments/FM/drums/snare_00_simple.fui differ diff --git a/instruments/FM/drums/snare_01_curvy.fui b/instruments/FM/drums/snare_01_curvy.fui new file mode 100644 index 000000000..e82114730 Binary files /dev/null and b/instruments/FM/drums/snare_01_curvy.fui differ diff --git a/instruments/FM/drums/snare_02_weak.fui b/instruments/FM/drums/snare_02_weak.fui new file mode 100644 index 000000000..b7e8487a0 Binary files /dev/null and b/instruments/FM/drums/snare_02_weak.fui differ diff --git a/instruments/FM/drums/snare_03_weak2.fui b/instruments/FM/drums/snare_03_weak2.fui new file mode 100644 index 000000000..2206f1394 Binary files /dev/null and b/instruments/FM/drums/snare_03_weak2.fui differ diff --git a/instruments/FM/drums/snare_04_muffled.fui b/instruments/FM/drums/snare_04_muffled.fui new file mode 100644 index 000000000..a5fc768b6 Binary files /dev/null and b/instruments/FM/drums/snare_04_muffled.fui differ diff --git a/instruments/FM/drums/snare_05_intense.fui b/instruments/FM/drums/snare_05_intense.fui new file mode 100644 index 000000000..087f8d6cb Binary files /dev/null and b/instruments/FM/drums/snare_05_intense.fui differ diff --git a/instruments/FM/drums/thinclosedhihat.dmp b/instruments/FM/drums/thinclosedhihat.dmp new file mode 100644 index 000000000..4c6f22407 Binary files /dev/null and b/instruments/FM/drums/thinclosedhihat.dmp differ diff --git a/instruments/FM/effect/(GEN) Buzzer.dmp b/instruments/FM/effect/(GEN) Buzzer.dmp new file mode 100644 index 000000000..bf3b95dbb Binary files /dev/null and b/instruments/FM/effect/(GEN) Buzzer.dmp differ diff --git a/instruments/FM/effect/(GEN) C64 Wave Combo.dmp b/instruments/FM/effect/(GEN) C64 Wave Combo.dmp new file mode 100644 index 000000000..57cb4fd4f Binary files /dev/null and b/instruments/FM/effect/(GEN) C64 Wave Combo.dmp differ diff --git a/instruments/FM/effect/(GEN) Clap.dmp b/instruments/FM/effect/(GEN) Clap.dmp new file mode 100644 index 000000000..ba8295fdf Binary files /dev/null and b/instruments/FM/effect/(GEN) Clap.dmp differ diff --git a/instruments/FM/effect/(GEN) Clink.dmp b/instruments/FM/effect/(GEN) Clink.dmp new file mode 100644 index 000000000..3fd1f28b9 Binary files /dev/null and b/instruments/FM/effect/(GEN) Clink.dmp differ diff --git a/instruments/FM/effect/(GEN) Crank Turn.dmp b/instruments/FM/effect/(GEN) Crank Turn.dmp new file mode 100644 index 000000000..99a632c01 Binary files /dev/null and b/instruments/FM/effect/(GEN) Crank Turn.dmp differ diff --git a/instruments/FM/effect/(GEN) Decay Laser.dmp b/instruments/FM/effect/(GEN) Decay Laser.dmp new file mode 100644 index 000000000..7b5218ed5 Binary files /dev/null and b/instruments/FM/effect/(GEN) Decay Laser.dmp differ diff --git a/instruments/FM/effect/(GEN) Laser Gun.dmp b/instruments/FM/effect/(GEN) Laser Gun.dmp new file mode 100644 index 000000000..a3e5f860a Binary files /dev/null and b/instruments/FM/effect/(GEN) Laser Gun.dmp differ diff --git a/instruments/FM/effect/(GEN) Laser.dmp b/instruments/FM/effect/(GEN) Laser.dmp new file mode 100644 index 000000000..0198eaf41 Binary files /dev/null and b/instruments/FM/effect/(GEN) Laser.dmp differ diff --git a/instruments/FM/effect/(GEN) Lightning Bolt.dmp b/instruments/FM/effect/(GEN) Lightning Bolt.dmp new file mode 100644 index 000000000..969483bcb Binary files /dev/null and b/instruments/FM/effect/(GEN) Lightning Bolt.dmp differ diff --git a/instruments/FM/effect/(GEN) TV Static.dmp b/instruments/FM/effect/(GEN) TV Static.dmp new file mode 100644 index 000000000..a00524f58 Binary files /dev/null and b/instruments/FM/effect/(GEN) TV Static.dmp differ diff --git a/instruments/FM/effect/(GEN) Techno TL Pitch Slider.dmp b/instruments/FM/effect/(GEN) Techno TL Pitch Slider.dmp new file mode 100644 index 000000000..c10cc7d95 Binary files /dev/null and b/instruments/FM/effect/(GEN) Techno TL Pitch Slider.dmp differ diff --git a/instruments/FM/effect/(GEN) Thunder Strike.dmp b/instruments/FM/effect/(GEN) Thunder Strike.dmp new file mode 100644 index 000000000..9d4a8dc78 Binary files /dev/null and b/instruments/FM/effect/(GEN) Thunder Strike.dmp differ diff --git a/instruments/FM/effect/(GEN) U.F.O.dmp b/instruments/FM/effect/(GEN) U.F.O.dmp new file mode 100644 index 000000000..a54e97363 Binary files /dev/null and b/instruments/FM/effect/(GEN) U.F.O.dmp differ diff --git a/instruments/FM/GEN_weird.fui b/instruments/FM/effect/GEN_weird.fui similarity index 100% rename from instruments/FM/GEN_weird.fui rename to instruments/FM/effect/GEN_weird.fui diff --git a/instruments/FM/effect/Glide.dmp b/instruments/FM/effect/Glide.dmp new file mode 100644 index 000000000..0364388fd Binary files /dev/null and b/instruments/FM/effect/Glide.dmp differ diff --git a/instruments/FM/effect/Heart.dmp b/instruments/FM/effect/Heart.dmp new file mode 100644 index 000000000..bb32d70c5 Binary files /dev/null and b/instruments/FM/effect/Heart.dmp differ diff --git a/instruments/FM/effect/Interference.dmp b/instruments/FM/effect/Interference.dmp new file mode 100644 index 000000000..9a436c77f Binary files /dev/null and b/instruments/FM/effect/Interference.dmp differ diff --git a/instruments/FM/effect/Ocean.dmp b/instruments/FM/effect/Ocean.dmp new file mode 100644 index 000000000..c9e6f3393 Binary files /dev/null and b/instruments/FM/effect/Ocean.dmp differ diff --git a/instruments/FM/effect/Skid.dmp b/instruments/FM/effect/Skid.dmp new file mode 100644 index 000000000..a6d4a6f17 Binary files /dev/null and b/instruments/FM/effect/Skid.dmp differ diff --git a/instruments/FM/effect/Sore Throat.dmp b/instruments/FM/effect/Sore Throat.dmp new file mode 100644 index 000000000..b4975acda Binary files /dev/null and b/instruments/FM/effect/Sore Throat.dmp differ diff --git a/instruments/FM/effect/[2OPLow]Analog Horror 1.dmp b/instruments/FM/effect/[2OPLow]Analog Horror 1.dmp new file mode 100644 index 000000000..fdb79f2a0 Binary files /dev/null and b/instruments/FM/effect/[2OPLow]Analog Horror 1.dmp differ diff --git a/instruments/FM/effect/[2OPLow]Analog Horror 2.dmp b/instruments/FM/effect/[2OPLow]Analog Horror 2.dmp new file mode 100644 index 000000000..894185538 Binary files /dev/null and b/instruments/FM/effect/[2OPLow]Analog Horror 2.dmp differ diff --git a/instruments/FM/effect/fm_propeller.fui b/instruments/FM/effect/fm_propeller.fui new file mode 100644 index 000000000..f7e5dd97f Binary files /dev/null and b/instruments/FM/effect/fm_propeller.fui differ diff --git a/instruments/FM/effect/white nosie.dmp b/instruments/FM/effect/white nosie.dmp new file mode 100644 index 000000000..fd1eae3cb Binary files /dev/null and b/instruments/FM/effect/white nosie.dmp differ diff --git a/instruments/FM/guitar/(CH3) Double Guitar.dmp b/instruments/FM/guitar/(CH3) Double Guitar.dmp new file mode 100644 index 000000000..ddb05eab1 Binary files /dev/null and b/instruments/FM/guitar/(CH3) Double Guitar.dmp differ diff --git a/instruments/FM/guitar/(GEN) Banjo.dmp b/instruments/FM/guitar/(GEN) Banjo.dmp new file mode 100644 index 000000000..b388e3de8 Binary files /dev/null and b/instruments/FM/guitar/(GEN) Banjo.dmp differ diff --git a/instruments/FM/guitar/(GEN) Electric Guitar 1.dmp b/instruments/FM/guitar/(GEN) Electric Guitar 1.dmp new file mode 100644 index 000000000..8c418100d Binary files /dev/null and b/instruments/FM/guitar/(GEN) Electric Guitar 1.dmp differ diff --git a/instruments/FM/guitar/(GEN) Electric Guitar 2.dmp b/instruments/FM/guitar/(GEN) Electric Guitar 2.dmp new file mode 100644 index 000000000..75bd6feb7 Binary files /dev/null and b/instruments/FM/guitar/(GEN) Electric Guitar 2.dmp differ diff --git a/instruments/FM/guitar/(GEN) Electric Guitar 3.dmp b/instruments/FM/guitar/(GEN) Electric Guitar 3.dmp new file mode 100644 index 000000000..2eea9cf09 Binary files /dev/null and b/instruments/FM/guitar/(GEN) Electric Guitar 3.dmp differ diff --git a/instruments/FM/guitar/(GEN) Electric Guitar EX.dmp b/instruments/FM/guitar/(GEN) Electric Guitar EX.dmp new file mode 100644 index 000000000..cb5d36aab Binary files /dev/null and b/instruments/FM/guitar/(GEN) Electric Guitar EX.dmp differ diff --git a/instruments/FM/guitar/(GEN) Grunge.dmp b/instruments/FM/guitar/(GEN) Grunge.dmp new file mode 100644 index 000000000..5a1764a15 Binary files /dev/null and b/instruments/FM/guitar/(GEN) Grunge.dmp differ diff --git a/instruments/FM/guitar/(GEN) Guitar.dmp b/instruments/FM/guitar/(GEN) Guitar.dmp new file mode 100644 index 000000000..3100a10ef Binary files /dev/null and b/instruments/FM/guitar/(GEN) Guitar.dmp differ diff --git a/instruments/FM/guitar/(GEN) Rough Sitar.dmp b/instruments/FM/guitar/(GEN) Rough Sitar.dmp new file mode 100644 index 000000000..4ea936f2c Binary files /dev/null and b/instruments/FM/guitar/(GEN) Rough Sitar.dmp differ diff --git a/instruments/FM/guitar/(GEN) Shamisen.dmp b/instruments/FM/guitar/(GEN) Shamisen.dmp new file mode 100644 index 000000000..489bbb641 Binary files /dev/null and b/instruments/FM/guitar/(GEN) Shamisen.dmp differ diff --git a/instruments/FM/guitar/(GEN) Sitar.dmp b/instruments/FM/guitar/(GEN) Sitar.dmp new file mode 100644 index 000000000..1bbfb88ef Binary files /dev/null and b/instruments/FM/guitar/(GEN) Sitar.dmp differ diff --git a/instruments/FM/guitar/(GEN) Space Sitar.dmp b/instruments/FM/guitar/(GEN) Space Sitar.dmp new file mode 100644 index 000000000..507fcc417 Binary files /dev/null and b/instruments/FM/guitar/(GEN) Space Sitar.dmp differ diff --git a/instruments/FM/guitar/Acoustic Guitar.dmp b/instruments/FM/guitar/Acoustic Guitar.dmp new file mode 100644 index 000000000..d31998da3 Binary files /dev/null and b/instruments/FM/guitar/Acoustic Guitar.dmp differ diff --git a/instruments/FM/guitar/Acoustic Nylon Guitar.dmp b/instruments/FM/guitar/Acoustic Nylon Guitar.dmp new file mode 100644 index 000000000..b79addcf1 Binary files /dev/null and b/instruments/FM/guitar/Acoustic Nylon Guitar.dmp differ diff --git a/instruments/FM/guitar/Acoustic Steel Guitar.dmp b/instruments/FM/guitar/Acoustic Steel Guitar.dmp new file mode 100644 index 000000000..64e77b9c8 Binary files /dev/null and b/instruments/FM/guitar/Acoustic Steel Guitar.dmp differ diff --git a/instruments/FM/guitar/Distorted Guitar 1.dmp b/instruments/FM/guitar/Distorted Guitar 1.dmp new file mode 100644 index 000000000..319c4cf08 Binary files /dev/null and b/instruments/FM/guitar/Distorted Guitar 1.dmp differ diff --git a/instruments/FM/guitar/Distorted Guitar 2.dmp b/instruments/FM/guitar/Distorted Guitar 2.dmp new file mode 100644 index 000000000..67f361cf4 Binary files /dev/null and b/instruments/FM/guitar/Distorted Guitar 2.dmp differ diff --git a/instruments/FM/guitar/Electric Clean Guitar.dmp b/instruments/FM/guitar/Electric Clean Guitar.dmp new file mode 100644 index 000000000..08c7ec708 Binary files /dev/null and b/instruments/FM/guitar/Electric Clean Guitar.dmp differ diff --git a/instruments/FM/guitar/Electric Distorted Guitar (High).dmp b/instruments/FM/guitar/Electric Distorted Guitar (High).dmp new file mode 100644 index 000000000..aa3288522 Binary files /dev/null and b/instruments/FM/guitar/Electric Distorted Guitar (High).dmp differ diff --git a/instruments/FM/guitar/Electric Distorted Guitar (Low).dmp b/instruments/FM/guitar/Electric Distorted Guitar (Low).dmp new file mode 100644 index 000000000..12715c4d8 Binary files /dev/null and b/instruments/FM/guitar/Electric Distorted Guitar (Low).dmp differ diff --git a/instruments/FM/guitar/Electric Funk Guitar.dmp b/instruments/FM/guitar/Electric Funk Guitar.dmp new file mode 100644 index 000000000..64800f377 Binary files /dev/null and b/instruments/FM/guitar/Electric Funk Guitar.dmp differ diff --git a/instruments/FM/guitar/Electric Guitar Harmonics.dmp b/instruments/FM/guitar/Electric Guitar Harmonics.dmp new file mode 100644 index 000000000..07f210328 Binary files /dev/null and b/instruments/FM/guitar/Electric Guitar Harmonics.dmp differ diff --git a/instruments/FM/guitar/Electric Jazz Guitar.dmp b/instruments/FM/guitar/Electric Jazz Guitar.dmp new file mode 100644 index 000000000..0660deffd Binary files /dev/null and b/instruments/FM/guitar/Electric Jazz Guitar.dmp differ diff --git a/instruments/FM/guitar/Electric Lap Guitar.dmp b/instruments/FM/guitar/Electric Lap Guitar.dmp new file mode 100644 index 000000000..97fcdfe29 Binary files /dev/null and b/instruments/FM/guitar/Electric Lap Guitar.dmp differ diff --git a/instruments/FM/guitar/Electric Muted Guitar.dmp b/instruments/FM/guitar/Electric Muted Guitar.dmp new file mode 100644 index 000000000..97e30e942 Binary files /dev/null and b/instruments/FM/guitar/Electric Muted Guitar.dmp differ diff --git a/instruments/FM/guitar/Electric Overdriven Guitar (High).dmp b/instruments/FM/guitar/Electric Overdriven Guitar (High).dmp new file mode 100644 index 000000000..a6fdfa683 Binary files /dev/null and b/instruments/FM/guitar/Electric Overdriven Guitar (High).dmp differ diff --git a/instruments/FM/guitar/Electric Overdriven Guitar (Low).dmp b/instruments/FM/guitar/Electric Overdriven Guitar (Low).dmp new file mode 100644 index 000000000..8d276a1ae Binary files /dev/null and b/instruments/FM/guitar/Electric Overdriven Guitar (Low).dmp differ diff --git a/instruments/FM/guitar/Funk Guitar.fui b/instruments/FM/guitar/Funk Guitar.fui new file mode 100644 index 000000000..15db04457 Binary files /dev/null and b/instruments/FM/guitar/Funk Guitar.fui differ diff --git a/instruments/FM/guitar/Gardenshroom.dmp b/instruments/FM/guitar/Gardenshroom.dmp new file mode 100644 index 000000000..2fbf54316 Binary files /dev/null and b/instruments/FM/guitar/Gardenshroom.dmp differ diff --git a/instruments/FM/guitar/Guitar Test.opm b/instruments/FM/guitar/Guitar Test.opm new file mode 100644 index 000000000..d1d27a04b --- /dev/null +++ b/instruments/FM/guitar/Guitar Test.opm @@ -0,0 +1,1030 @@ +//MiOPMdrv sound bank Paramer Ver2002.04.22 +//LFO: LFRQ AMD PMD WF NFRQ +//@:[Num] [Name] +//CH: PAN FL CON AMS PMS SLOT NE +//[OPname]: AR D1R D2R RR D1L TL KS MUL DT1 DT2 AMS-EN + +@:0 Nylon Guitar +LFO: 0 0 0 0 0 +CH: 64 0 2 0 0 120 0 +M1: 25 28 0 15 15 50 0 8 3 0 0 +C1: 31 0 0 4 15 40 0 5 3 0 0 +M2: 31 4 0 1 9 38 0 2 3 0 0 +C2: 31 10 0 9 15 0 0 1 3 0 0 + +@:1 Ukulele +LFO: 0 0 0 0 0 +CH: 64 0 2 0 0 120 0 +M1: 20 24 0 15 15 42 0 4 3 0 0 +C1: 31 11 0 4 15 40 0 5 3 0 0 +M2: 31 4 0 1 11 50 0 2 3 0 0 +C2: 31 11 10 10 4 0 0 1 3 0 0 + +@:2 Steel Guitar +LFO: 0 0 0 0 0 +CH: 64 0 2 0 0 120 0 +M1: 25 28 0 15 15 39 0 8 3 0 0 +C1: 31 4 0 4 15 24 0 3 3 0 0 +M2: 31 5 0 1 9 40 0 1 3 0 0 +C2: 31 10 0 9 15 0 0 1 3 0 0 + +@:3 Jazz Guitar +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 23 21 0 15 15 36 0 1 3 0 0 +C1: 31 0 0 4 15 45 0 4 2 0 0 +M2: 31 0 0 1 15 43 0 1 3 0 0 +C2: 31 10 0 9 15 0 0 1 3 0 0 + +@:4 Lap Guitar +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 23 21 0 15 15 42 0 1 3 0 0 +C1: 31 0 0 4 15 37 0 2 2 0 0 +M2: 31 0 0 1 15 45 0 1 5 0 0 +C2: 31 8 0 9 15 0 0 1 3 0 0 + +@:5 Clean Guitar +LFO: 0 0 0 0 0 +CH: 64 7 0 0 0 120 0 +M1: 31 13 0 9 15 46 0 9 2 0 0 +C1: 31 8 0 4 15 15 0 1 2 0 0 +M2: 31 4 0 1 11 30 0 1 3 0 0 +C2: 31 9 0 11 15 0 0 1 3 0 0 + +@:6 Muted Guitar +LFO: 0 0 0 0 0 +CH: 64 4 2 0 0 120 0 +M1: 28 21 0 15 15 32 0 4 5 0 0 +C1: 31 3 0 4 15 50 0 1 0 0 0 +M2: 31 2 0 1 11 33 0 1 5 0 0 +C2: 31 10 0 9 15 0 0 1 0 0 0 + +@:7 Funk Guitar +LFO: 0 0 0 0 0 +CH: 64 7 0 0 0 120 0 +M1: 23 13 0 15 15 56 0 9 3 0 0 +C1: 31 8 0 4 15 20 0 1 2 0 0 +M2: 31 4 0 1 11 30 0 1 3 0 0 +C2: 31 9 0 11 15 0 0 1 3 0 0 + +@:8 Overdrive(Low) +LFO: 0 0 0 0 0 +CH: 64 6 2 0 0 120 0 +M1: 31 23 0 15 15 9 0 3 3 0 0 +C1: 31 0 0 4 15 18 0 1 4 0 0 +M2: 31 0 0 1 11 14 0 1 1 0 0 +C2: 31 7 0 12 15 0 0 1 3 0 0 + +@:9 Distorted(Low) +LFO: 0 0 0 0 0 +CH: 64 6 2 0 0 120 0 +M1: 31 23 0 15 15 9 0 4 3 0 0 +C1: 31 0 0 4 15 19 0 1 4 0 0 +M2: 31 6 0 1 11 6 0 1 1 0 0 +C2: 31 7 0 12 15 0 0 1 3 0 0 + +@:10 Overdrive(High) +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 31 23 0 15 15 16 0 3 3 0 0 +C1: 31 0 0 4 15 37 0 2 3 0 0 +M2: 31 0 0 1 11 22 0 1 1 0 0 +C2: 31 7 0 11 15 0 0 3 3 0 0 + +@:11 Distorted(High) +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 31 23 0 15 15 9 0 3 3 0 0 +C1: 31 0 0 4 15 27 0 1 3 0 0 +M2: 31 0 0 1 11 20 0 1 1 0 0 +C2: 31 7 0 11 15 0 0 3 3 0 0 + +@:12 GtrHarmonics +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 31 23 0 15 15 16 0 2 3 0 0 +C1: 31 0 0 4 15 33 0 8 4 0 0 +M2: 31 0 0 1 11 22 0 4 4 0 0 +C2: 31 6 0 11 15 0 0 2 3 0 0 + +@:13 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:14 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:15 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:16 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:17 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:18 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:19 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:20 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:21 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:22 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:23 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:24 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:25 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:26 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:27 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:28 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:29 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:30 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:31 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:32 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:33 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:34 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:35 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:36 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:37 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:38 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:39 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:40 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:41 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:42 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:43 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:44 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:45 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:46 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:47 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:48 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:49 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:50 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:51 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:52 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:53 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:54 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:55 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:56 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:57 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:58 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:59 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:60 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:61 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:62 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:63 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:64 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:65 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:66 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:67 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:68 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:69 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:70 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:71 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:72 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:73 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:74 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:75 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:76 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:77 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:78 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:79 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:80 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:81 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:82 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:83 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:84 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:85 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:86 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:87 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:88 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:89 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:90 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:91 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:92 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:93 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:94 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:95 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:96 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:97 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:98 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:99 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:100 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:101 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:102 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:103 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:104 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:105 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:106 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:107 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:108 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:109 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:110 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:111 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:112 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:113 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:114 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:115 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:116 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:117 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:118 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:119 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:120 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:121 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:122 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:123 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:124 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:125 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:126 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:127 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + diff --git a/instruments/FM/guitar/Hard Guitar.fui b/instruments/FM/guitar/Hard Guitar.fui new file mode 100644 index 000000000..5d7c60ef3 Binary files /dev/null and b/instruments/FM/guitar/Hard Guitar.fui differ diff --git a/instruments/FM/guitar/SSGuitar_A2.dmp b/instruments/FM/guitar/SSGuitar_A2.dmp new file mode 100644 index 000000000..a0b01b7e0 Binary files /dev/null and b/instruments/FM/guitar/SSGuitar_A2.dmp differ diff --git a/instruments/FM/guitar/SSGuitar_B2.dmp b/instruments/FM/guitar/SSGuitar_B2.dmp new file mode 100644 index 000000000..5f541f317 Binary files /dev/null and b/instruments/FM/guitar/SSGuitar_B2.dmp differ diff --git a/instruments/FM/guitar/SSGuitar_F#2.dmp b/instruments/FM/guitar/SSGuitar_F#2.dmp new file mode 100644 index 000000000..87cca094e Binary files /dev/null and b/instruments/FM/guitar/SSGuitar_F#2.dmp differ diff --git a/instruments/FM/guitar/SSGuitar_G2.dmp b/instruments/FM/guitar/SSGuitar_G2.dmp new file mode 100644 index 000000000..8303444f4 Binary files /dev/null and b/instruments/FM/guitar/SSGuitar_G2.dmp differ diff --git a/instruments/FM/guitar/Spanish Guitar.dmp b/instruments/FM/guitar/Spanish Guitar.dmp new file mode 100644 index 000000000..ca7318496 Binary files /dev/null and b/instruments/FM/guitar/Spanish Guitar.dmp differ diff --git a/instruments/FM/guitar/Ukulele.dmp b/instruments/FM/guitar/Ukulele.dmp new file mode 100644 index 000000000..a23c5114c Binary files /dev/null and b/instruments/FM/guitar/Ukulele.dmp differ diff --git a/instruments/FM/guitar/distguitar_00.fui b/instruments/FM/guitar/distguitar_00.fui new file mode 100644 index 000000000..ac54e77ca Binary files /dev/null and b/instruments/FM/guitar/distguitar_00.fui differ diff --git a/instruments/FM/guitar/high guitar.dmp b/instruments/FM/guitar/high guitar.dmp new file mode 100644 index 000000000..04095f165 Binary files /dev/null and b/instruments/FM/guitar/high guitar.dmp differ diff --git a/instruments/FM/powerchord.fui b/instruments/FM/guitar/powerchord.fui similarity index 100% rename from instruments/FM/powerchord.fui rename to instruments/FM/guitar/powerchord.fui diff --git a/instruments/FM/guitar/sine distorted guitar.dmp b/instruments/FM/guitar/sine distorted guitar.dmp new file mode 100644 index 000000000..b8ad3dbf6 Binary files /dev/null and b/instruments/FM/guitar/sine distorted guitar.dmp differ diff --git a/instruments/FM/guitar/trashy guitar.dmp b/instruments/FM/guitar/trashy guitar.dmp new file mode 100644 index 000000000..8677f9a08 Binary files /dev/null and b/instruments/FM/guitar/trashy guitar.dmp differ diff --git a/instruments/FM/horn/(CH3) Trumpet + Echo.dmp b/instruments/FM/horn/(CH3) Trumpet + Echo.dmp new file mode 100644 index 000000000..b7cb7e750 Binary files /dev/null and b/instruments/FM/horn/(CH3) Trumpet + Echo.dmp differ diff --git a/instruments/FM/horn/(GEN) Dubious Trumpet.dmp b/instruments/FM/horn/(GEN) Dubious Trumpet.dmp new file mode 100644 index 000000000..bed9dee03 Binary files /dev/null and b/instruments/FM/horn/(GEN) Dubious Trumpet.dmp differ diff --git a/instruments/FM/horn/(GEN) Ringing Trumpet.dmp b/instruments/FM/horn/(GEN) Ringing Trumpet.dmp new file mode 100644 index 000000000..0cf615ef0 Binary files /dev/null and b/instruments/FM/horn/(GEN) Ringing Trumpet.dmp differ diff --git a/instruments/FM/horn/(GEN) Trumpet 1.dmp b/instruments/FM/horn/(GEN) Trumpet 1.dmp new file mode 100644 index 000000000..bea221387 Binary files /dev/null and b/instruments/FM/horn/(GEN) Trumpet 1.dmp differ diff --git a/instruments/FM/horn/(GEN) Trumpet 2.dmp b/instruments/FM/horn/(GEN) Trumpet 2.dmp new file mode 100644 index 000000000..e333c3273 Binary files /dev/null and b/instruments/FM/horn/(GEN) Trumpet 2.dmp differ diff --git a/instruments/FM/horn/(GEN) Trumpet 3.dmp b/instruments/FM/horn/(GEN) Trumpet 3.dmp new file mode 100644 index 000000000..a7771344c Binary files /dev/null and b/instruments/FM/horn/(GEN) Trumpet 3.dmp differ diff --git a/instruments/FM/horn/(GEN) Trumpet EX.dmp b/instruments/FM/horn/(GEN) Trumpet EX.dmp new file mode 100644 index 000000000..238f701a1 Binary files /dev/null and b/instruments/FM/horn/(GEN) Trumpet EX.dmp differ diff --git a/instruments/FM/horn/(GEN) VRC7 Trumpet.dmp b/instruments/FM/horn/(GEN) VRC7 Trumpet.dmp new file mode 100644 index 000000000..931482df6 Binary files /dev/null and b/instruments/FM/horn/(GEN) VRC7 Trumpet.dmp differ diff --git a/instruments/FM/horn/FM Brass.dmp b/instruments/FM/horn/FM Brass.dmp new file mode 100644 index 000000000..852bcfe14 Binary files /dev/null and b/instruments/FM/horn/FM Brass.dmp differ diff --git a/instruments/FM/horn/Saw Trumpet.dmp b/instruments/FM/horn/Saw Trumpet.dmp new file mode 100644 index 000000000..e8f3e43fe Binary files /dev/null and b/instruments/FM/horn/Saw Trumpet.dmp differ diff --git a/instruments/FM/horn/Trumpet.dmp b/instruments/FM/horn/Trumpet.dmp new file mode 100644 index 000000000..5abd62ddf Binary files /dev/null and b/instruments/FM/horn/Trumpet.dmp differ diff --git a/instruments/FM/horn/ass overtone brass.dmp b/instruments/FM/horn/ass overtone brass.dmp new file mode 100644 index 000000000..f6aca14b5 Binary files /dev/null and b/instruments/FM/horn/ass overtone brass.dmp differ diff --git a/instruments/FM/horn/brass_00_wobbly.fui b/instruments/FM/horn/brass_00_wobbly.fui new file mode 100644 index 000000000..3631dcd28 Binary files /dev/null and b/instruments/FM/horn/brass_00_wobbly.fui differ diff --git a/instruments/FM/horn/brass_01_bassish.fui b/instruments/FM/horn/brass_01_bassish.fui new file mode 100644 index 000000000..9a967d185 Binary files /dev/null and b/instruments/FM/horn/brass_01_bassish.fui differ diff --git a/instruments/FM/horn/brass_02_boring.fui b/instruments/FM/horn/brass_02_boring.fui new file mode 100644 index 000000000..3d9dcc31f Binary files /dev/null and b/instruments/FM/horn/brass_02_boring.fui differ diff --git a/instruments/FM/horn/brass_03_boring2.fui b/instruments/FM/horn/brass_03_boring2.fui new file mode 100644 index 000000000..14159e71a Binary files /dev/null and b/instruments/FM/horn/brass_03_boring2.fui differ diff --git a/instruments/FM/keys/(CH3) Double Piano.dmp b/instruments/FM/keys/(CH3) Double Piano.dmp new file mode 100644 index 000000000..8706f9637 Binary files /dev/null and b/instruments/FM/keys/(CH3) Double Piano.dmp differ diff --git a/instruments/FM/keys/(CH3) Double Reed Organ.dmp b/instruments/FM/keys/(CH3) Double Reed Organ.dmp new file mode 100644 index 000000000..bf5bd1848 Binary files /dev/null and b/instruments/FM/keys/(CH3) Double Reed Organ.dmp differ diff --git a/instruments/FM/keys/(GEN) Church Organ.dmp b/instruments/FM/keys/(GEN) Church Organ.dmp new file mode 100644 index 000000000..f923ab38e Binary files /dev/null and b/instruments/FM/keys/(GEN) Church Organ.dmp differ diff --git a/instruments/FM/keys/(GEN) Piano 1.dmp b/instruments/FM/keys/(GEN) Piano 1.dmp new file mode 100644 index 000000000..8354b9f9b Binary files /dev/null and b/instruments/FM/keys/(GEN) Piano 1.dmp differ diff --git a/instruments/FM/keys/(GEN) Piano 2.dmp b/instruments/FM/keys/(GEN) Piano 2.dmp new file mode 100644 index 000000000..dffd316eb Binary files /dev/null and b/instruments/FM/keys/(GEN) Piano 2.dmp differ diff --git a/instruments/FM/keys/(GEN) Reed Organ.dmp b/instruments/FM/keys/(GEN) Reed Organ.dmp new file mode 100644 index 000000000..020074b1f Binary files /dev/null and b/instruments/FM/keys/(GEN) Reed Organ.dmp differ diff --git a/instruments/FM/keys/(GEN) Short Piano.dmp b/instruments/FM/keys/(GEN) Short Piano.dmp new file mode 100644 index 000000000..1d5cb18f5 Binary files /dev/null and b/instruments/FM/keys/(GEN) Short Piano.dmp differ diff --git a/instruments/FM/keys/(GEN) Space Piano.dmp b/instruments/FM/keys/(GEN) Space Piano.dmp new file mode 100644 index 000000000..543b69384 Binary files /dev/null and b/instruments/FM/keys/(GEN) Space Piano.dmp differ diff --git a/instruments/FM/keys/(GEN) Spoopy Organ.dmp b/instruments/FM/keys/(GEN) Spoopy Organ.dmp new file mode 100644 index 000000000..4217049a3 Binary files /dev/null and b/instruments/FM/keys/(GEN) Spoopy Organ.dmp differ diff --git a/instruments/FM/keys/(GEN) VRC7 Reed Organ.dmp b/instruments/FM/keys/(GEN) VRC7 Reed Organ.dmp new file mode 100644 index 000000000..79cc28361 Binary files /dev/null and b/instruments/FM/keys/(GEN) VRC7 Reed Organ.dmp differ diff --git a/instruments/FM/keys/80's Organ.dmp b/instruments/FM/keys/80's Organ.dmp new file mode 100644 index 000000000..647a52541 Binary files /dev/null and b/instruments/FM/keys/80's Organ.dmp differ diff --git a/instruments/FM/keys/Bite Organ.dmp b/instruments/FM/keys/Bite Organ.dmp new file mode 100644 index 000000000..c24478018 Binary files /dev/null and b/instruments/FM/keys/Bite Organ.dmp differ diff --git a/instruments/FM/keys/Celesta (High).dmp b/instruments/FM/keys/Celesta (High).dmp new file mode 100644 index 000000000..37ff712d3 Binary files /dev/null and b/instruments/FM/keys/Celesta (High).dmp differ diff --git a/instruments/FM/keys/Celesta (Low).dmp b/instruments/FM/keys/Celesta (Low).dmp new file mode 100644 index 000000000..8e348b289 Binary files /dev/null and b/instruments/FM/keys/Celesta (Low).dmp differ diff --git a/instruments/FM/keys/Church Organ.dmp b/instruments/FM/keys/Church Organ.dmp new file mode 100644 index 000000000..958f04edd Binary files /dev/null and b/instruments/FM/keys/Church Organ.dmp differ diff --git a/instruments/FM/keys/Circus Organ.fui b/instruments/FM/keys/Circus Organ.fui new file mode 100644 index 000000000..fa4fa7184 Binary files /dev/null and b/instruments/FM/keys/Circus Organ.fui differ diff --git a/instruments/FM/keys/Clavinet.dmp b/instruments/FM/keys/Clavinet.dmp new file mode 100644 index 000000000..038d3bf41 Binary files /dev/null and b/instruments/FM/keys/Clavinet.dmp differ diff --git a/instruments/FM/keys/Creep Organ.dmp b/instruments/FM/keys/Creep Organ.dmp new file mode 100644 index 000000000..048d2ae9d Binary files /dev/null and b/instruments/FM/keys/Creep Organ.dmp differ diff --git a/instruments/FM/keys/E. Piano 1 (Rhodes).dmp b/instruments/FM/keys/E. Piano 1 (Rhodes).dmp new file mode 100644 index 000000000..1047d95a5 Binary files /dev/null and b/instruments/FM/keys/E. Piano 1 (Rhodes).dmp differ diff --git a/instruments/FM/keys/E. Piano 2 (DX).dmp b/instruments/FM/keys/E. Piano 2 (DX).dmp new file mode 100644 index 000000000..cf7a206dd Binary files /dev/null and b/instruments/FM/keys/E. Piano 2 (DX).dmp differ diff --git a/instruments/FM/keys/Harpsichord.dmp b/instruments/FM/keys/Harpsichord.dmp new file mode 100644 index 000000000..ce0d98220 Binary files /dev/null and b/instruments/FM/keys/Harpsichord.dmp differ diff --git a/instruments/FM/keys/Less Soft E Piano.dmp b/instruments/FM/keys/Less Soft E Piano.dmp new file mode 100644 index 000000000..e55ec1162 Binary files /dev/null and b/instruments/FM/keys/Less Soft E Piano.dmp differ diff --git a/instruments/FM/keys/Low Piano.dmp b/instruments/FM/keys/Low Piano.dmp new file mode 100644 index 000000000..60d7f5718 Binary files /dev/null and b/instruments/FM/keys/Low Piano.dmp differ diff --git a/instruments/FM/keys/Organ 1 (Drawbar).dmp b/instruments/FM/keys/Organ 1 (Drawbar).dmp new file mode 100644 index 000000000..062870a7f Binary files /dev/null and b/instruments/FM/keys/Organ 1 (Drawbar).dmp differ diff --git a/instruments/FM/keys/Organ 2 (Percussive).dmp b/instruments/FM/keys/Organ 2 (Percussive).dmp new file mode 100644 index 000000000..34bc54c59 Binary files /dev/null and b/instruments/FM/keys/Organ 2 (Percussive).dmp differ diff --git a/instruments/FM/keys/Organ 3 (Rock Organ).dmp b/instruments/FM/keys/Organ 3 (Rock Organ).dmp new file mode 100644 index 000000000..10e1bfdb5 Binary files /dev/null and b/instruments/FM/keys/Organ 3 (Rock Organ).dmp differ diff --git a/instruments/FM/keys/Organ 3 Alt (Rock Organ Alt).dmp b/instruments/FM/keys/Organ 3 Alt (Rock Organ Alt).dmp new file mode 100644 index 000000000..e5e472e4d Binary files /dev/null and b/instruments/FM/keys/Organ 3 Alt (Rock Organ Alt).dmp differ diff --git a/instruments/FM/keys/Organ 5 (Percussive Variation).dmp b/instruments/FM/keys/Organ 5 (Percussive Variation).dmp new file mode 100644 index 000000000..40a7b335e Binary files /dev/null and b/instruments/FM/keys/Organ 5 (Percussive Variation).dmp differ diff --git a/instruments/FM/keys/Organ.dmp b/instruments/FM/keys/Organ.dmp new file mode 100644 index 000000000..1fba6f19e Binary files /dev/null and b/instruments/FM/keys/Organ.dmp differ diff --git a/instruments/FM/keys/Piano 1 (Acoustic).dmp b/instruments/FM/keys/Piano 1 (Acoustic).dmp new file mode 100644 index 000000000..32fa8c64e Binary files /dev/null and b/instruments/FM/keys/Piano 1 (Acoustic).dmp differ diff --git a/instruments/FM/keys/Piano 2 (Bright Acoustic).dmp b/instruments/FM/keys/Piano 2 (Bright Acoustic).dmp new file mode 100644 index 000000000..887c9abc6 Binary files /dev/null and b/instruments/FM/keys/Piano 2 (Bright Acoustic).dmp differ diff --git a/instruments/FM/keys/Piano 3 (Electric Grand).dmp b/instruments/FM/keys/Piano 3 (Electric Grand).dmp new file mode 100644 index 000000000..c5041b1f3 Binary files /dev/null and b/instruments/FM/keys/Piano 3 (Electric Grand).dmp differ diff --git a/instruments/FM/keys/Piano Test.opm b/instruments/FM/keys/Piano Test.opm new file mode 100644 index 000000000..ad372590c --- /dev/null +++ b/instruments/FM/keys/Piano Test.opm @@ -0,0 +1,1030 @@ +//MiOPMdrv sound bank Paramer Ver2002.04.22 +//LFO: LFRQ AMD PMD WF NFRQ +//@:[Num] [Name] +//CH: PAN FL CON AMS PMS SLOT NE +//[OPname]: AR D1R D2R RR D1L TL KS MUL DT1 DT2 AMS-EN + +@:0 Piano1 (Acou.) +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 31 24 4 4 2 41 0 3 4 0 0 +C1: 31 0 0 4 15 41 0 1 3 0 0 +M2: 31 7 0 1 11 43 0 2 3 0 0 +C2: 29 9 0 9 15 0 0 1 3 0 0 + +@:1 Piano2 (Brite) +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 31 24 4 4 3 31 0 1 4 0 0 +C1: 31 0 0 4 15 39 0 3 3 0 0 +M2: 31 4 0 1 11 40 0 2 3 0 0 +C2: 29 9 0 9 15 0 0 1 3 0 0 + +@:2 Piano3 (EGrand) +LFO: 0 0 0 0 0 +CH: 64 7 2 0 0 120 0 +M1: 27 24 4 4 3 29 0 1 4 0 0 +C1: 31 12 0 4 15 35 0 1 3 0 0 +M2: 31 18 8 1 2 24 0 2 3 0 0 +C2: 29 9 0 9 15 0 0 1 3 0 0 + +@:3 EPiano1 (Rhodes) +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 21 0 3 3 57 0 14 5 0 0 +C1: 31 9 0 10 15 23 0 1 0 0 0 +M2: 31 1 0 1 5 53 0 1 5 0 0 +C2: 31 8 0 9 15 2 0 1 0 0 0 + +@:4 EPiano2 (DX) +LFO: 0 0 0 0 0 +CH: 64 7 4 0 0 120 0 +M1: 31 0 0 3 15 38 0 11 3 0 0 +C1: 31 15 0 8 15 30 0 12 3 0 0 +M2: 31 6 0 1 11 33 0 1 3 0 0 +C2: 31 8 0 9 15 0 0 1 3 0 0 + +@:5 Harpsichord +LFO: 0 0 0 0 0 +CH: 64 7 0 0 0 120 0 +M1: 31 4 0 3 15 42 0 2 3 0 0 +C1: 31 28 6 4 1 21 0 5 3 0 0 +M2: 31 5 0 1 1 31 0 9 3 0 0 +C2: 31 9 0 9 15 0 0 1 3 0 0 + +@:6 Clavinet +LFO: 0 0 0 0 0 +CH: 64 7 0 0 0 120 0 +M1: 31 23 8 3 4 32 0 1 3 0 0 +C1: 31 0 0 4 15 22 0 1 3 0 0 +M2: 31 0 0 1 11 19 0 2 3 0 0 +C2: 31 9 0 10 15 0 0 1 3 0 0 + +@:7 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:8 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:9 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:10 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:11 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:12 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:13 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:14 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:15 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:16 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:17 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:18 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:19 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:20 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:21 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:22 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:23 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:24 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:25 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:26 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:27 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:28 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:29 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:30 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:31 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:32 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:33 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:34 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:35 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:36 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:37 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:38 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:39 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:40 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:41 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:42 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:43 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:44 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:45 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:46 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:47 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:48 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:49 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:50 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:51 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:52 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:53 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:54 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:55 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:56 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:57 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:58 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:59 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:60 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:61 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:62 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:63 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:64 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:65 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:66 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:67 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:68 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:69 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:70 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:71 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:72 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:73 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:74 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:75 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:76 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:77 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:78 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:79 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:80 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:81 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:82 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:83 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:84 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:85 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:86 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:87 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:88 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:89 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:90 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:91 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:92 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:93 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:94 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:95 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:96 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:97 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:98 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:99 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:100 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:101 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:102 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:103 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:104 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:105 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:106 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:107 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:108 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:109 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:110 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:111 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:112 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:113 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:114 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:115 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:116 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:117 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:118 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:119 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:120 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:121 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:122 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:123 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:124 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:125 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:126 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:127 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + diff --git a/instruments/FM/keys/Reed Organ or Bandoneon.dmp b/instruments/FM/keys/Reed Organ or Bandoneon.dmp new file mode 100644 index 000000000..04a27e103 Binary files /dev/null and b/instruments/FM/keys/Reed Organ or Bandoneon.dmp differ diff --git a/instruments/FM/keys/Rock Organ.dmp b/instruments/FM/keys/Rock Organ.dmp new file mode 100644 index 000000000..5b2e36925 Binary files /dev/null and b/instruments/FM/keys/Rock Organ.dmp differ diff --git a/instruments/FM/keys/Soft E Piano.dmp b/instruments/FM/keys/Soft E Piano.dmp new file mode 100644 index 000000000..09c0ee36f Binary files /dev/null and b/instruments/FM/keys/Soft E Piano.dmp differ diff --git a/instruments/FM/keys/Sparksichord.dmp b/instruments/FM/keys/Sparksichord.dmp new file mode 100644 index 000000000..e75439a50 Binary files /dev/null and b/instruments/FM/keys/Sparksichord.dmp differ diff --git a/instruments/FM/keys/brickblock369 Church Organ.dmp b/instruments/FM/keys/brickblock369 Church Organ.dmp new file mode 100644 index 000000000..4bb90d2be Binary files /dev/null and b/instruments/FM/keys/brickblock369 Church Organ.dmp differ diff --git a/instruments/FM/keys/brickblock369 Harpsichord.dmp b/instruments/FM/keys/brickblock369 Harpsichord.dmp new file mode 100644 index 000000000..a2aba1f2d Binary files /dev/null and b/instruments/FM/keys/brickblock369 Harpsichord.dmp differ diff --git a/instruments/FM/keys/harpsisine.dmp b/instruments/FM/keys/harpsisine.dmp new file mode 100644 index 000000000..d5633cbb3 Binary files /dev/null and b/instruments/FM/keys/harpsisine.dmp differ diff --git a/instruments/FM/keys/nicco1690 Church Organ.dmp b/instruments/FM/keys/nicco1690 Church Organ.dmp new file mode 100644 index 000000000..543bf3522 Binary files /dev/null and b/instruments/FM/keys/nicco1690 Church Organ.dmp differ diff --git a/instruments/FM/keys/organ_test/Organ Test - Notes.txt b/instruments/FM/keys/organ_test/Organ Test - Notes.txt new file mode 100644 index 000000000..794ac3987 --- /dev/null +++ b/instruments/FM/keys/organ_test/Organ Test - Notes.txt @@ -0,0 +1,12 @@ +--- EXAMPLE OF LESLIE EFFECT MACRO FOR OVERALL VOLUME LEVEL, IN FURNACE--- +127 126 125 124 123 122 121 120 121 122 123 124 125 126 127 126 125 124 123 122 121 120 121 122 123 124 125 126 127 126 125 124 123 122 121 120 121 122 123 124 125 126 127 125 123 121 119 121 123 125 127 125 123 121 119 121 123 125 | 127 124 121 124 +For the pitch oscillation, use the vibrato command and gradually increase its depth and speed. + +--- 80'S ORGAN: YM2612 AND YM2151 DIFFERENCES --- +80's Organ was originally intended for YM2612, as this particular chip's specification causes a buzz for the high operator levels. +The YM2151 will simply make it play pure sine-waves. + +--- SPECIAL THANKS --- +Organ 3 Alt (Rock Organ Alt) - thanks to freq-mod for providing the parameters to make that sound! +Church Organ - mainly based off of the high score theme from Swords of Fury. +All the rest are chosen by me. \ No newline at end of file diff --git a/instruments/FM/keys/organ_test/Organ Test.opm b/instruments/FM/keys/organ_test/Organ Test.opm new file mode 100644 index 000000000..0ce75672d --- /dev/null +++ b/instruments/FM/keys/organ_test/Organ Test.opm @@ -0,0 +1,94 @@ +//LFO: LFRQ AMD PMD WF NFRQ +//@:[Num] [Name] +//CH: PAN FL CON AMS PMS SLOT NE +//OP: AR D1R D2R RR D1L TL KS MUL DT1 DT2 AMS-EN + +// vgm offset = 000001db, channels used = 123-5--- +@:0 DrawbarOrgan +LFO: 0 0 0 0 0 +CH: 64 0 7 0 0 120 0 +M1: 31 13 0 11 1 19 0 8 3 0 0 +C1: 31 13 0 11 1 17 0 4 3 0 0 +M2: 31 13 0 11 1 12 0 2 3 0 0 +C2: 31 13 0 11 1 5 0 1 3 0 0 + +// vgm offset = 00000a7b, channels used = 123----- +@:1 80's Organ +LFO: 0 0 0 0 0 +CH: 64 6 7 0 0 120 0 +M1: 31 13 0 11 0 18 0 1 3 0 0 +C1: 31 13 0 11 0 6 0 8 3 0 0 +M2: 31 13 0 11 0 0 0 4 3 0 0 +C2: 31 13 0 11 0 0 0 6 3 0 0 + +// vgm offset = 00001f36, channels used = 123----- +@:2 PercussiveOrgan +LFO: 0 0 0 0 0 +CH: 64 0 7 0 0 120 0 +M1: 31 16 0 11 5 16 0 6 3 0 0 +C1: 31 13 0 11 1 13 0 3 3 0 0 +M2: 31 13 0 11 1 9 0 2 3 0 0 +C2: 31 13 0 11 1 5 0 1 3 0 0 + +// vgm offset = 0000222d, channels used = 123----- +@:3 PercussiveOrgn2 +LFO: 0 0 0 0 0 +CH: 64 0 7 0 0 120 0 +M1: 31 18 0 11 15 5 0 6 3 0 0 +C1: 31 13 0 11 1 17 0 4 3 0 0 +M2: 31 13 0 11 1 12 0 2 3 0 0 +C2: 31 13 0 11 1 5 0 1 3 0 0 + +// vgm offset = 000025c3, channels used = 123-5--- +@:4 Rock Organ +LFO: 0 0 0 0 0 +CH: 64 0 2 0 0 120 0 +M1: 23 31 0 14 15 54 0 13 5 0 0 +C1: 31 0 0 4 15 30 0 2 0 0 0 +M2: 31 0 0 1 11 35 0 1 4 0 0 +C2: 31 0 0 11 15 2 0 1 3 0 0 + +// vgm offset = 00002fc9, channels used = 123-5--- +@:5 Rock Organ 2 +LFO: 0 0 0 0 0 +CH: 64 0 6 0 0 120 0 +M1: 31 14 0 4 3 15 1 1 4 0 0 +C1: 20 4 1 11 0 10 0 2 1 0 0 +M2: 20 15 4 11 2 10 1 4 2 0 0 +C2: 31 13 1 11 4 12 0 6 6 0 0 + +// vgm offset = 00003bbb, channels used = 123-5--- +@:6 Church Organ +LFO: 0 0 0 0 0 +CH: 64 7 4 0 0 120 0 +M1: 22 0 0 10 0 55 0 10 2 0 0 +C1: 15 15 0 8 0 17 2 2 0 0 0 +M2: 24 0 0 5 0 15 2 0 0 0 0 +C2: 13 0 0 8 0 6 2 0 6 0 0 + +// vgm offset = 00003fef, channels used = 123-56-- +@:7 ReedOr/Bndoneon +LFO: 0 0 0 0 0 +CH: 64 4 4 0 0 120 0 +M1: 31 0 0 3 0 29 0 4 3 0 0 +C1: 16 10 0 11 1 11 0 2 3 0 0 +M2: 31 0 0 1 0 16 0 1 3 0 0 +C2: 16 10 0 11 1 6 0 1 3 0 0 + +// vgm offset = 000045f8, channels used = 123-567- +@:8 Accordion +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 0 0 3 0 19 0 1 6 0 0 +C1: 14 14 0 9 1 13 0 1 2 0 0 +M2: 31 0 0 1 0 35 0 4 2 0 0 +C2: 14 14 0 9 1 6 0 1 3 0 0 + +// vgm offset = 0000509e, channels used = 1------- +@:9 Harmonica +LFO: 0 0 0 0 0 +CH: 64 7 0 0 0 120 0 +M1: 31 0 0 6 0 50 0 2 3 0 0 +C1: 31 0 0 6 0 27 0 2 3 0 0 +M2: 31 0 0 6 0 22 0 1 3 0 0 +C2: 16 12 0 11 1 2 0 1 3 0 0 \ No newline at end of file diff --git a/instruments/FM/percussion/(CH3) Double Metalliphone.dmp b/instruments/FM/percussion/(CH3) Double Metalliphone.dmp new file mode 100644 index 000000000..f0b4237c4 Binary files /dev/null and b/instruments/FM/percussion/(CH3) Double Metalliphone.dmp differ diff --git a/instruments/FM/percussion/(CH3) Double Steel Drum.dmp b/instruments/FM/percussion/(CH3) Double Steel Drum.dmp new file mode 100644 index 000000000..25779c24d Binary files /dev/null and b/instruments/FM/percussion/(CH3) Double Steel Drum.dmp differ diff --git a/instruments/FM/percussion/(CH3) Double Xylophone.dmp b/instruments/FM/percussion/(CH3) Double Xylophone.dmp new file mode 100644 index 000000000..3586764cf Binary files /dev/null and b/instruments/FM/percussion/(CH3) Double Xylophone.dmp differ diff --git a/instruments/FM/percussion/(GEN) Bongo.dmp b/instruments/FM/percussion/(GEN) Bongo.dmp new file mode 100644 index 000000000..386297e4f Binary files /dev/null and b/instruments/FM/percussion/(GEN) Bongo.dmp differ diff --git a/instruments/FM/percussion/(GEN) Chime.dmp b/instruments/FM/percussion/(GEN) Chime.dmp new file mode 100644 index 000000000..47981cd4e Binary files /dev/null and b/instruments/FM/percussion/(GEN) Chime.dmp differ diff --git a/instruments/FM/percussion/(GEN) Cowbell.dmp b/instruments/FM/percussion/(GEN) Cowbell.dmp new file mode 100644 index 000000000..cb75b8cab Binary files /dev/null and b/instruments/FM/percussion/(GEN) Cowbell.dmp differ diff --git a/instruments/FM/percussion/(GEN) Deep Marimba.dmp b/instruments/FM/percussion/(GEN) Deep Marimba.dmp new file mode 100644 index 000000000..9d550db90 Binary files /dev/null and b/instruments/FM/percussion/(GEN) Deep Marimba.dmp differ diff --git a/instruments/FM/percussion/(GEN) Marimba.dmp b/instruments/FM/percussion/(GEN) Marimba.dmp new file mode 100644 index 000000000..d6ddd79f3 Binary files /dev/null and b/instruments/FM/percussion/(GEN) Marimba.dmp differ diff --git a/instruments/FM/percussion/(GEN) Metalliphone.dmp b/instruments/FM/percussion/(GEN) Metalliphone.dmp new file mode 100644 index 000000000..5622fb6d2 Binary files /dev/null and b/instruments/FM/percussion/(GEN) Metalliphone.dmp differ diff --git a/instruments/FM/percussion/(GEN) Short Bongo.dmp b/instruments/FM/percussion/(GEN) Short Bongo.dmp new file mode 100644 index 000000000..2eb7bcc74 Binary files /dev/null and b/instruments/FM/percussion/(GEN) Short Bongo.dmp differ diff --git a/instruments/FM/percussion/(GEN) Space Chime.dmp b/instruments/FM/percussion/(GEN) Space Chime.dmp new file mode 100644 index 000000000..43bc38024 Binary files /dev/null and b/instruments/FM/percussion/(GEN) Space Chime.dmp differ diff --git a/instruments/FM/percussion/(GEN) Space Marimba.dmp b/instruments/FM/percussion/(GEN) Space Marimba.dmp new file mode 100644 index 000000000..503c643f9 Binary files /dev/null and b/instruments/FM/percussion/(GEN) Space Marimba.dmp differ diff --git a/instruments/FM/percussion/(GEN) Steel Drum.dmp b/instruments/FM/percussion/(GEN) Steel Drum.dmp new file mode 100644 index 000000000..52c34c0ba Binary files /dev/null and b/instruments/FM/percussion/(GEN) Steel Drum.dmp differ diff --git a/instruments/FM/percussion/(GEN) VRC7 Chime.dmp b/instruments/FM/percussion/(GEN) VRC7 Chime.dmp new file mode 100644 index 000000000..6eb34b105 Binary files /dev/null and b/instruments/FM/percussion/(GEN) VRC7 Chime.dmp differ diff --git a/instruments/FM/percussion/(GEN) VRC7 Marimba.dmp b/instruments/FM/percussion/(GEN) VRC7 Marimba.dmp new file mode 100644 index 000000000..d6ddd79f3 Binary files /dev/null and b/instruments/FM/percussion/(GEN) VRC7 Marimba.dmp differ diff --git a/instruments/FM/percussion/(GEN) VRC7 Metalliphone.dmp b/instruments/FM/percussion/(GEN) VRC7 Metalliphone.dmp new file mode 100644 index 000000000..5083c5f62 Binary files /dev/null and b/instruments/FM/percussion/(GEN) VRC7 Metalliphone.dmp differ diff --git a/instruments/FM/percussion/(GEN) VRC7 Soft Hestian.dmp b/instruments/FM/percussion/(GEN) VRC7 Soft Hestian.dmp new file mode 100644 index 000000000..1ec29ac4d Binary files /dev/null and b/instruments/FM/percussion/(GEN) VRC7 Soft Hestian.dmp differ diff --git a/instruments/FM/percussion/(GEN) VRC7 Xylophone.dmp b/instruments/FM/percussion/(GEN) VRC7 Xylophone.dmp new file mode 100644 index 000000000..c0c72352d Binary files /dev/null and b/instruments/FM/percussion/(GEN) VRC7 Xylophone.dmp differ diff --git a/instruments/FM/percussion/(GEN) Xylophone 1.dmp b/instruments/FM/percussion/(GEN) Xylophone 1.dmp new file mode 100644 index 000000000..990f0684a Binary files /dev/null and b/instruments/FM/percussion/(GEN) Xylophone 1.dmp differ diff --git a/instruments/FM/percussion/(GEN) Xylophone 2.dmp b/instruments/FM/percussion/(GEN) Xylophone 2.dmp new file mode 100644 index 000000000..05e7c566a Binary files /dev/null and b/instruments/FM/percussion/(GEN) Xylophone 2.dmp differ diff --git a/instruments/FM/percussion/Agogo or Cowbell.dmp b/instruments/FM/percussion/Agogo or Cowbell.dmp new file mode 100644 index 000000000..4b3b2e350 Binary files /dev/null and b/instruments/FM/percussion/Agogo or Cowbell.dmp differ diff --git a/instruments/FM/percussion/Bell_Oct4-7.dmp b/instruments/FM/percussion/Bell_Oct4-7.dmp new file mode 100644 index 000000000..709745569 Binary files /dev/null and b/instruments/FM/percussion/Bell_Oct4-7.dmp differ diff --git a/instruments/FM/percussion/Chromatic Percussion.opm b/instruments/FM/percussion/Chromatic Percussion.opm new file mode 100644 index 000000000..76eb84505 --- /dev/null +++ b/instruments/FM/percussion/Chromatic Percussion.opm @@ -0,0 +1,1040 @@ +//LFO: LFRQ AMD PMD WF NFRQ +//@:[Num] [Name] +//CH: PAN FL CON AMS PMS SLOT NE +//OP: AR D1R D2R RR D1L TL KS MUL DT1 DT2 AMS-EN + +// vgm offset = 000001de, channels used = 12------ +@:0 Celesta (Low) +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 27 0 12 15 40 0 6 3 0 0 +C1: 31 26 0 12 15 0 0 6 3 0 0 +M2: 31 11 0 1 11 44 0 6 3 0 0 +C2: 31 11 0 7 15 0 0 1 3 0 0 + +// vgm offset = 00000387, channels used = --3-567- +@:1 Celesta (High) +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 26 0 11 15 40 0 6 5 0 0 +C1: 31 26 0 11 15 18 0 6 3 0 0 +M2: 31 11 0 1 11 60 0 6 3 0 0 +C2: 31 11 0 7 15 0 0 1 3 0 0 + +// vgm offset = 0000095c, channels used = 12------ +@:2 Glockenspiel +LFO: 0 0 0 0 0 +CH: 64 0 2 0 0 120 0 +M1: 31 27 0 14 15 28 0 9 3 0 0 +C1: 31 11 0 6 15 43 0 12 3 0 0 +M2: 31 10 0 5 15 35 0 6 3 0 0 +C2: 31 13 12 7 6 0 0 1 3 0 0 + +// vgm offset = 00000bd2, channels used = 123-567- +@:3 Music Box +LFO: 0 0 0 0 0 +CH: 64 4 4 0 0 120 0 +M1: 31 8 0 6 15 47 0 10 3 0 0 +C1: 14 10 0 7 15 16 0 2 3 0 0 +M2: 21 11 0 1 11 45 0 6 3 0 0 +C2: 31 10 0 7 15 1 0 1 3 0 0 + +// vgm offset = 00000f9f, channels used = 123-56-- +@:4 Vibraphone +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 14 6 11 10 45 0 5 3 0 0 +C1: 31 13 16 11 15 10 0 4 3 0 0 +M2: 31 10 0 1 11 80 0 5 3 0 0 +C2: 31 10 0 8 15 4 0 1 3 0 0 + +// vgm offset = 00001450, channels used = 12------ +@:5 Marimba +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 16 6 11 14 29 0 5 3 0 0 +C1: 31 18 16 11 15 16 0 4 3 0 0 +M2: 31 19 12 1 7 30 0 5 3 0 0 +C2: 31 12 14 8 4 4 0 1 3 0 0 + +// vgm offset = 00001802, channels used = 12------ +@:6 Xylophone +LFO: 0 0 0 0 0 +CH: 64 0 4 0 0 120 0 +M1: 31 20 6 12 14 19 0 5 3 0 0 +C1: 31 22 16 11 15 16 0 4 3 0 0 +M2: 31 19 15 1 4 28 0 6 3 0 0 +C2: 31 18 14 8 4 4 0 1 3 0 0 + +// vgm offset = 00001d9c, channels used = 12------ +@:7 Tubular Bells +LFO: 0 0 0 0 0 +CH: 64 4 4 0 0 120 0 +M1: 31 8 0 4 15 43 0 10 6 0 0 +C1: 31 10 0 6 15 10 0 8 2 0 0 +M2: 31 4 0 1 11 36 0 8 0 0 0 +C2: 31 9 0 6 15 6 0 5 5 0 0 + +// vgm offset = 00002066, channels used = 123----- +@:8 Dulcimer +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 120 0 +M1: 31 17 9 3 2 33 0 3 3 0 0 +C1: 31 7 0 3 15 27 0 3 3 0 0 +M2: 31 4 0 5 11 38 0 1 3 0 0 +C2: 31 9 0 5 15 2 0 1 3 0 0 + +// vgm offset = 00002783, channels used = 12------ +@:9 Timpani +LFO: 0 0 0 0 0 +CH: 64 0 2 0 0 120 0 +M1: 31 19 0 9 15 23 0 3 3 0 0 +C1: 31 14 14 4 6 18 0 1 0 0 0 +M2: 31 12 8 1 2 18 0 1 1 0 0 +C2: 31 12 0 6 15 2 0 1 3 0 0 + +// vgm offset = 00002bb8, channels used = 123-567- +@:10 Steel Drum +LFO: 0 0 0 0 0 +CH: 64 4 0 0 0 120 0 +M1: 31 8 0 3 15 42 0 5 5 0 0 +C1: 16 13 0 9 15 71 0 5 0 0 0 +M2: 16 11 10 7 3 33 0 3 6 0 0 +C2: 31 10 0 7 15 0 0 1 3 0 0 + +@:11 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:12 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:13 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:14 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:15 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:16 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:17 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:18 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:19 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:20 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:21 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:22 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:23 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:24 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:25 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:26 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:27 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:28 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:29 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:30 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:31 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:32 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:33 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:34 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:35 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:36 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:37 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:38 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:39 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:40 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:41 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:42 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:43 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:44 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:45 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:46 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:47 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:48 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:49 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:50 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:51 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:52 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:53 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:54 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:55 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:56 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:57 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:58 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:59 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:60 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:61 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:62 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:63 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:64 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:65 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:66 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:67 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:68 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:69 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:70 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:71 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:72 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:73 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:74 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:75 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:76 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:77 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:78 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:79 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:80 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:81 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:82 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:83 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:84 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:85 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:86 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:87 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:88 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:89 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:90 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:91 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:92 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:93 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:94 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:95 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:96 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:97 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:98 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:99 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:100 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:101 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:102 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:103 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:104 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:105 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:106 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:107 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:108 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:109 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:110 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:111 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:112 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:113 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:114 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:115 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:116 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:117 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:118 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:119 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:120 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:121 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:122 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:123 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:124 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:125 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:126 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + +@:127 no Name +LFO: 0 0 0 0 0 +CH: 64 0 0 0 0 64 0 +M1: 31 0 0 4 0 0 0 1 0 0 0 +C1: 31 0 0 4 0 0 0 1 0 0 0 +M2: 31 0 0 4 0 0 0 1 0 0 0 +C2: 31 0 0 4 0 0 0 1 0 0 0 + diff --git a/instruments/FM/percussion/Cowbell_F#5.dmp b/instruments/FM/percussion/Cowbell_F#5.dmp new file mode 100644 index 000000000..3ba4d1f7c Binary files /dev/null and b/instruments/FM/percussion/Cowbell_F#5.dmp differ diff --git a/instruments/FM/percussion/Dangerously Cheap Timpani.fui b/instruments/FM/percussion/Dangerously Cheap Timpani.fui new file mode 100644 index 000000000..45bc65db3 Binary files /dev/null and b/instruments/FM/percussion/Dangerously Cheap Timpani.fui differ diff --git a/instruments/FM/percussion/Dulcimer.dmp b/instruments/FM/percussion/Dulcimer.dmp new file mode 100644 index 000000000..76ddf97a7 Binary files /dev/null and b/instruments/FM/percussion/Dulcimer.dmp differ diff --git a/instruments/FM/percussion/Glockenspiel.dmp b/instruments/FM/percussion/Glockenspiel.dmp new file mode 100644 index 000000000..a33a224b3 Binary files /dev/null and b/instruments/FM/percussion/Glockenspiel.dmp differ diff --git a/instruments/FM/percussion/Kalimba.dmp b/instruments/FM/percussion/Kalimba.dmp new file mode 100644 index 000000000..b62ae7d45 Binary files /dev/null and b/instruments/FM/percussion/Kalimba.dmp differ diff --git a/instruments/FM/percussion/Marimba.dmp b/instruments/FM/percussion/Marimba.dmp new file mode 100644 index 000000000..8efcfc4ea Binary files /dev/null and b/instruments/FM/percussion/Marimba.dmp differ diff --git a/instruments/FM/percussion/Music Box.dmp b/instruments/FM/percussion/Music Box.dmp new file mode 100644 index 000000000..1b65c6a16 Binary files /dev/null and b/instruments/FM/percussion/Music Box.dmp differ diff --git a/instruments/FM/percussion/Peck.dmp b/instruments/FM/percussion/Peck.dmp new file mode 100644 index 000000000..451de73ff Binary files /dev/null and b/instruments/FM/percussion/Peck.dmp differ diff --git a/instruments/FM/percussion/Realistic Bell.dmp b/instruments/FM/percussion/Realistic Bell.dmp new file mode 100644 index 000000000..9c44759e2 Binary files /dev/null and b/instruments/FM/percussion/Realistic Bell.dmp differ diff --git a/instruments/FM/percussion/Steel Drum.dmp b/instruments/FM/percussion/Steel Drum.dmp new file mode 100644 index 000000000..386c60abf Binary files /dev/null and b/instruments/FM/percussion/Steel Drum.dmp differ diff --git a/instruments/FM/percussion/Timpani.dmp b/instruments/FM/percussion/Timpani.dmp new file mode 100644 index 000000000..07974971c Binary files /dev/null and b/instruments/FM/percussion/Timpani.dmp differ diff --git a/instruments/FM/percussion/Tubular Bells.dmp b/instruments/FM/percussion/Tubular Bells.dmp new file mode 100644 index 000000000..bb1e55f0f Binary files /dev/null and b/instruments/FM/percussion/Tubular Bells.dmp differ diff --git a/instruments/FM/percussion/VRC7 Vibraphone.dmp b/instruments/FM/percussion/VRC7 Vibraphone.dmp new file mode 100644 index 000000000..56a05197e Binary files /dev/null and b/instruments/FM/percussion/VRC7 Vibraphone.dmp differ diff --git a/instruments/FM/percussion/Vibraphone.dmp b/instruments/FM/percussion/Vibraphone.dmp new file mode 100644 index 000000000..1a9aa3872 Binary files /dev/null and b/instruments/FM/percussion/Vibraphone.dmp differ diff --git a/instruments/FM/percussion/Xylophone.dmp b/instruments/FM/percussion/Xylophone.dmp new file mode 100644 index 000000000..c3c02f8a2 Binary files /dev/null and b/instruments/FM/percussion/Xylophone.dmp differ diff --git a/instruments/FM/percussion/agogo.fui b/instruments/FM/percussion/agogo.fui new file mode 100644 index 000000000..ef42689ba Binary files /dev/null and b/instruments/FM/percussion/agogo.fui differ diff --git a/instruments/FM/percussion/alg 7 bongoes.dmp b/instruments/FM/percussion/alg 7 bongoes.dmp new file mode 100644 index 000000000..b628c6e25 Binary files /dev/null and b/instruments/FM/percussion/alg 7 bongoes.dmp differ diff --git a/instruments/FM/percussion/bell_00_glockenspiel.fui b/instruments/FM/percussion/bell_00_glockenspiel.fui new file mode 100644 index 000000000..072100aef Binary files /dev/null and b/instruments/FM/percussion/bell_00_glockenspiel.fui differ diff --git a/instruments/FM/percussion/bell_01_glockenspiel_echoing.fui b/instruments/FM/percussion/bell_01_glockenspiel_echoing.fui new file mode 100644 index 000000000..d177ddec1 Binary files /dev/null and b/instruments/FM/percussion/bell_01_glockenspiel_echoing.fui differ diff --git a/instruments/FM/percussion/bell_02_glockenspiel_wobbly.fui b/instruments/FM/percussion/bell_02_glockenspiel_wobbly.fui new file mode 100644 index 000000000..2534f79c7 Binary files /dev/null and b/instruments/FM/percussion/bell_02_glockenspiel_wobbly.fui differ diff --git a/instruments/FM/percussion/brickblock369 Glockenspiel.dmp b/instruments/FM/percussion/brickblock369 Glockenspiel.dmp new file mode 100644 index 000000000..eae09ee9d Binary files /dev/null and b/instruments/FM/percussion/brickblock369 Glockenspiel.dmp differ diff --git a/instruments/FM/percussion/brickblock369 Steel Drum.dmp b/instruments/FM/percussion/brickblock369 Steel Drum.dmp new file mode 100644 index 000000000..a43ef62a4 Binary files /dev/null and b/instruments/FM/percussion/brickblock369 Steel Drum.dmp differ diff --git a/instruments/FM/percussion/brickblock369 Timpani.dmp b/instruments/FM/percussion/brickblock369 Timpani.dmp new file mode 100644 index 000000000..1e5297492 Binary files /dev/null and b/instruments/FM/percussion/brickblock369 Timpani.dmp differ diff --git a/instruments/FM/percussion/fm_cowbell.fui b/instruments/FM/percussion/fm_cowbell.fui new file mode 100644 index 000000000..8a5c21d40 Binary files /dev/null and b/instruments/FM/percussion/fm_cowbell.fui differ diff --git a/instruments/FM/percussion/trashy handbells.dmp b/instruments/FM/percussion/trashy handbells.dmp new file mode 100644 index 000000000..4568da9f2 Binary files /dev/null and b/instruments/FM/percussion/trashy handbells.dmp differ diff --git a/instruments/FM/strings/(CH3) Double Viola.dmp b/instruments/FM/strings/(CH3) Double Viola.dmp new file mode 100644 index 000000000..1924f58ca Binary files /dev/null and b/instruments/FM/strings/(CH3) Double Viola.dmp differ diff --git a/instruments/FM/strings/(GEN) Choir.dmp b/instruments/FM/strings/(GEN) Choir.dmp new file mode 100644 index 000000000..bf7ff11a1 Binary files /dev/null and b/instruments/FM/strings/(GEN) Choir.dmp differ diff --git a/instruments/FM/strings/(GEN) Fiddle.dmp b/instruments/FM/strings/(GEN) Fiddle.dmp new file mode 100644 index 000000000..ebffe0706 Binary files /dev/null and b/instruments/FM/strings/(GEN) Fiddle.dmp differ diff --git a/instruments/FM/strings/(GEN) Rapid Fiddle.dmp b/instruments/FM/strings/(GEN) Rapid Fiddle.dmp new file mode 100644 index 000000000..a6c84ca21 Binary files /dev/null and b/instruments/FM/strings/(GEN) Rapid Fiddle.dmp differ diff --git a/instruments/FM/strings/(GEN) Space Violin.dmp b/instruments/FM/strings/(GEN) Space Violin.dmp new file mode 100644 index 000000000..248023216 Binary files /dev/null and b/instruments/FM/strings/(GEN) Space Violin.dmp differ diff --git a/instruments/FM/strings/(GEN) VRC7 Strings.dmp b/instruments/FM/strings/(GEN) VRC7 Strings.dmp new file mode 100644 index 000000000..796059359 Binary files /dev/null and b/instruments/FM/strings/(GEN) VRC7 Strings.dmp differ diff --git a/instruments/FM/strings/(GEN) VRC7 Viola.dmp b/instruments/FM/strings/(GEN) VRC7 Viola.dmp new file mode 100644 index 000000000..4bb4b3695 Binary files /dev/null and b/instruments/FM/strings/(GEN) VRC7 Viola.dmp differ diff --git a/instruments/FM/strings/(GEN) Violin 1.dmp b/instruments/FM/strings/(GEN) Violin 1.dmp new file mode 100644 index 000000000..0650590f0 Binary files /dev/null and b/instruments/FM/strings/(GEN) Violin 1.dmp differ diff --git a/instruments/FM/strings/(GEN) Violin 2.dmp b/instruments/FM/strings/(GEN) Violin 2.dmp new file mode 100644 index 000000000..57e9a3fb3 Binary files /dev/null and b/instruments/FM/strings/(GEN) Violin 2.dmp differ diff --git a/instruments/FM/strings/Earthbound Strings.dmp b/instruments/FM/strings/Earthbound Strings.dmp new file mode 100644 index 000000000..edbb9343f Binary files /dev/null and b/instruments/FM/strings/Earthbound Strings.dmp differ diff --git a/instruments/FM/strings/Enchant.dmp b/instruments/FM/strings/Enchant.dmp new file mode 100644 index 000000000..88d1cb3da Binary files /dev/null and b/instruments/FM/strings/Enchant.dmp differ diff --git a/instruments/FM/strings/Ethereal Something.dmp b/instruments/FM/strings/Ethereal Something.dmp new file mode 100644 index 000000000..e7458064b Binary files /dev/null and b/instruments/FM/strings/Ethereal Something.dmp differ diff --git a/instruments/FM/strings/Fifths Pad.dmp b/instruments/FM/strings/Fifths Pad.dmp new file mode 100644 index 000000000..0ab2b61a5 Binary files /dev/null and b/instruments/FM/strings/Fifths Pad.dmp differ diff --git a/instruments/FM/strings/Fifths Type Beat.dmp b/instruments/FM/strings/Fifths Type Beat.dmp new file mode 100644 index 000000000..78af1f7a6 Binary files /dev/null and b/instruments/FM/strings/Fifths Type Beat.dmp differ diff --git a/instruments/FM/strings/Pad.dmp b/instruments/FM/strings/Pad.dmp new file mode 100644 index 000000000..9e6674f16 Binary files /dev/null and b/instruments/FM/strings/Pad.dmp differ diff --git a/instruments/FM/strings/SSGPad.dmp b/instruments/FM/strings/SSGPad.dmp new file mode 100644 index 000000000..6b37a3b02 Binary files /dev/null and b/instruments/FM/strings/SSGPad.dmp differ diff --git a/instruments/FM/strings/Sawsine pad.dmp b/instruments/FM/strings/Sawsine pad.dmp new file mode 100644 index 000000000..d03286c54 Binary files /dev/null and b/instruments/FM/strings/Sawsine pad.dmp differ diff --git a/instruments/FM/strings/orchestal bullshit.dmp b/instruments/FM/strings/orchestal bullshit.dmp new file mode 100644 index 000000000..0c49c423c Binary files /dev/null and b/instruments/FM/strings/orchestal bullshit.dmp differ diff --git a/instruments/FM/strings/strings_00.fui b/instruments/FM/strings/strings_00.fui new file mode 100644 index 000000000..64a38f8b5 Binary files /dev/null and b/instruments/FM/strings/strings_00.fui differ diff --git a/instruments/FM/synth/(CH3) Double Ambience.dmp b/instruments/FM/synth/(CH3) Double Ambience.dmp new file mode 100644 index 000000000..335e026c3 Binary files /dev/null and b/instruments/FM/synth/(CH3) Double Ambience.dmp differ diff --git a/instruments/FM/synth/(CH3) Double Choir.dmp b/instruments/FM/synth/(CH3) Double Choir.dmp new file mode 100644 index 000000000..0d27f5600 Binary files /dev/null and b/instruments/FM/synth/(CH3) Double Choir.dmp differ diff --git a/instruments/FM/synth/(CH3) Double Rounded Square.dmp b/instruments/FM/synth/(CH3) Double Rounded Square.dmp new file mode 100644 index 000000000..cbe498c8d Binary files /dev/null and b/instruments/FM/synth/(CH3) Double Rounded Square.dmp differ diff --git a/instruments/FM/synth/(CH3) Saw & Organ.dmp b/instruments/FM/synth/(CH3) Saw & Organ.dmp new file mode 100644 index 000000000..386926915 Binary files /dev/null and b/instruments/FM/synth/(CH3) Saw & Organ.dmp differ diff --git a/instruments/FM/synth/(CH3) Sine Chord.dmp b/instruments/FM/synth/(CH3) Sine Chord.dmp new file mode 100644 index 000000000..d8ece9978 Binary files /dev/null and b/instruments/FM/synth/(CH3) Sine Chord.dmp differ diff --git a/instruments/FM/synth/(CH3) Synth with Light Snare.dmp b/instruments/FM/synth/(CH3) Synth with Light Snare.dmp new file mode 100644 index 000000000..2f0772844 Binary files /dev/null and b/instruments/FM/synth/(CH3) Synth with Light Snare.dmp differ diff --git a/instruments/FM/synth/(GEN) 1 16 Pulse.dmp b/instruments/FM/synth/(GEN) 1 16 Pulse.dmp new file mode 100644 index 000000000..1549815da Binary files /dev/null and b/instruments/FM/synth/(GEN) 1 16 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) 1 4 Pulse.dmp b/instruments/FM/synth/(GEN) 1 4 Pulse.dmp new file mode 100644 index 000000000..ca08407e2 Binary files /dev/null and b/instruments/FM/synth/(GEN) 1 4 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) 1 8 Pulse.dmp b/instruments/FM/synth/(GEN) 1 8 Pulse.dmp new file mode 100644 index 000000000..66d86a1ed Binary files /dev/null and b/instruments/FM/synth/(GEN) 1 8 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) 3 16 Pulse.dmp b/instruments/FM/synth/(GEN) 3 16 Pulse.dmp new file mode 100644 index 000000000..15a469a78 Binary files /dev/null and b/instruments/FM/synth/(GEN) 3 16 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) 3 8 Pulse.dmp b/instruments/FM/synth/(GEN) 3 8 Pulse.dmp new file mode 100644 index 000000000..4f516de95 Binary files /dev/null and b/instruments/FM/synth/(GEN) 3 8 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) 5 16 Pulse.dmp b/instruments/FM/synth/(GEN) 5 16 Pulse.dmp new file mode 100644 index 000000000..1c91d1e2a Binary files /dev/null and b/instruments/FM/synth/(GEN) 5 16 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) 7 16 Pulse.dmp b/instruments/FM/synth/(GEN) 7 16 Pulse.dmp new file mode 100644 index 000000000..498ec8624 Binary files /dev/null and b/instruments/FM/synth/(GEN) 7 16 Pulse.dmp differ diff --git a/instruments/FM/synth/(GEN) Ambience.dmp b/instruments/FM/synth/(GEN) Ambience.dmp new file mode 100644 index 000000000..abee9ed1b Binary files /dev/null and b/instruments/FM/synth/(GEN) Ambience.dmp differ diff --git a/instruments/FM/synth/(GEN) Church Hestian.dmp b/instruments/FM/synth/(GEN) Church Hestian.dmp new file mode 100644 index 000000000..3617d2815 Binary files /dev/null and b/instruments/FM/synth/(GEN) Church Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Cutoff.dmp b/instruments/FM/synth/(GEN) Cutoff.dmp new file mode 100644 index 000000000..ad556e085 Binary files /dev/null and b/instruments/FM/synth/(GEN) Cutoff.dmp differ diff --git a/instruments/FM/synth/(GEN) Distorted Hestian.dmp b/instruments/FM/synth/(GEN) Distorted Hestian.dmp new file mode 100644 index 000000000..2068543ba Binary files /dev/null and b/instruments/FM/synth/(GEN) Distorted Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Hestian.dmp b/instruments/FM/synth/(GEN) Hestian.dmp new file mode 100644 index 000000000..98f85cf6d Binary files /dev/null and b/instruments/FM/synth/(GEN) Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) High Hestian.dmp b/instruments/FM/synth/(GEN) High Hestian.dmp new file mode 100644 index 000000000..2c5a3a2dd Binary files /dev/null and b/instruments/FM/synth/(GEN) High Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Hyperspeed Decay Sine.dmp b/instruments/FM/synth/(GEN) Hyperspeed Decay Sine.dmp new file mode 100644 index 000000000..e55628f90 Binary files /dev/null and b/instruments/FM/synth/(GEN) Hyperspeed Decay Sine.dmp differ diff --git a/instruments/FM/synth/(GEN) K.K. Slider Aah.dmp b/instruments/FM/synth/(GEN) K.K. Slider Aah.dmp new file mode 100644 index 000000000..29ff0e16c Binary files /dev/null and b/instruments/FM/synth/(GEN) K.K. Slider Aah.dmp differ diff --git a/instruments/FM/synth/(GEN) K.K. Slider Weh.dmp b/instruments/FM/synth/(GEN) K.K. Slider Weh.dmp new file mode 100644 index 000000000..a85e7f109 Binary files /dev/null and b/instruments/FM/synth/(GEN) K.K. Slider Weh.dmp differ diff --git a/instruments/FM/synth/(GEN) Low Hestian.dmp b/instruments/FM/synth/(GEN) Low Hestian.dmp new file mode 100644 index 000000000..bd68de849 Binary files /dev/null and b/instruments/FM/synth/(GEN) Low Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) NES Triangle.dmp b/instruments/FM/synth/(GEN) NES Triangle.dmp new file mode 100644 index 000000000..4d4a99d1c Binary files /dev/null and b/instruments/FM/synth/(GEN) NES Triangle.dmp differ diff --git a/instruments/FM/synth/(GEN) Near Perfect Saw Wave.dmp b/instruments/FM/synth/(GEN) Near Perfect Saw Wave.dmp new file mode 100644 index 000000000..d489f69c5 Binary files /dev/null and b/instruments/FM/synth/(GEN) Near Perfect Saw Wave.dmp differ diff --git a/instruments/FM/synth/(GEN) Near Perfect Square Wave.dmp b/instruments/FM/synth/(GEN) Near Perfect Square Wave.dmp new file mode 100644 index 000000000..47f59cdf5 Binary files /dev/null and b/instruments/FM/synth/(GEN) Near Perfect Square Wave.dmp differ diff --git a/instruments/FM/synth/(GEN) Perfect Saw Wave.dmp b/instruments/FM/synth/(GEN) Perfect Saw Wave.dmp new file mode 100644 index 000000000..7f4dbafcd Binary files /dev/null and b/instruments/FM/synth/(GEN) Perfect Saw Wave.dmp differ diff --git a/instruments/FM/synth/(GEN) Perfect Square Wave.dmp b/instruments/FM/synth/(GEN) Perfect Square Wave.dmp new file mode 100644 index 000000000..0742fa533 Binary files /dev/null and b/instruments/FM/synth/(GEN) Perfect Square Wave.dmp differ diff --git a/instruments/FM/synth/(GEN) Perfect Triangle Wave.dmp b/instruments/FM/synth/(GEN) Perfect Triangle Wave.dmp new file mode 100644 index 000000000..09867025d Binary files /dev/null and b/instruments/FM/synth/(GEN) Perfect Triangle Wave.dmp differ diff --git a/instruments/FM/synth/(GEN) Rattling Hestian.dmp b/instruments/FM/synth/(GEN) Rattling Hestian.dmp new file mode 100644 index 000000000..f7ef159db Binary files /dev/null and b/instruments/FM/synth/(GEN) Rattling Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Rough Hestian.dmp b/instruments/FM/synth/(GEN) Rough Hestian.dmp new file mode 100644 index 000000000..f3662fada Binary files /dev/null and b/instruments/FM/synth/(GEN) Rough Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Rough Square.dmp b/instruments/FM/synth/(GEN) Rough Square.dmp new file mode 100644 index 000000000..c0586dfd4 Binary files /dev/null and b/instruments/FM/synth/(GEN) Rough Square.dmp differ diff --git a/instruments/FM/synth/(GEN) Rounded Square.dmp b/instruments/FM/synth/(GEN) Rounded Square.dmp new file mode 100644 index 000000000..c8d87e0fd Binary files /dev/null and b/instruments/FM/synth/(GEN) Rounded Square.dmp differ diff --git a/instruments/FM/synth/(GEN) Saw Malleable.dmp b/instruments/FM/synth/(GEN) Saw Malleable.dmp new file mode 100644 index 000000000..6fa43a8d8 Binary files /dev/null and b/instruments/FM/synth/(GEN) Saw Malleable.dmp differ diff --git a/instruments/FM/synth/(GEN) Sharp Saw.dmp b/instruments/FM/synth/(GEN) Sharp Saw.dmp new file mode 100644 index 000000000..509101765 Binary files /dev/null and b/instruments/FM/synth/(GEN) Sharp Saw.dmp differ diff --git a/instruments/FM/synth/(GEN) Sine Growl.dmp b/instruments/FM/synth/(GEN) Sine Growl.dmp new file mode 100644 index 000000000..fefea8da5 Binary files /dev/null and b/instruments/FM/synth/(GEN) Sine Growl.dmp differ diff --git a/instruments/FM/synth/(GEN) Space Hestian.dmp b/instruments/FM/synth/(GEN) Space Hestian.dmp new file mode 100644 index 000000000..68c302aee Binary files /dev/null and b/instruments/FM/synth/(GEN) Space Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Space Organ.dmp b/instruments/FM/synth/(GEN) Space Organ.dmp new file mode 100644 index 000000000..e7d796d41 Binary files /dev/null and b/instruments/FM/synth/(GEN) Space Organ.dmp differ diff --git a/instruments/FM/synth/(GEN) Space Saw.dmp b/instruments/FM/synth/(GEN) Space Saw.dmp new file mode 100644 index 000000000..fe36dafaa Binary files /dev/null and b/instruments/FM/synth/(GEN) Space Saw.dmp differ diff --git a/instruments/FM/synth/(GEN) Sparkle.dmp b/instruments/FM/synth/(GEN) Sparkle.dmp new file mode 100644 index 000000000..d0ebfcdf6 Binary files /dev/null and b/instruments/FM/synth/(GEN) Sparkle.dmp differ diff --git a/instruments/FM/synth/(GEN) Spoopy.dmp b/instruments/FM/synth/(GEN) Spoopy.dmp new file mode 100644 index 000000000..6ba2222b7 Binary files /dev/null and b/instruments/FM/synth/(GEN) Spoopy.dmp differ diff --git a/instruments/FM/synth/(GEN) Square Wave.dmp b/instruments/FM/synth/(GEN) Square Wave.dmp new file mode 100644 index 000000000..67bd8a95d Binary files /dev/null and b/instruments/FM/synth/(GEN) Square Wave.dmp differ diff --git a/instruments/FM/synth/(GEN) Synth with Closed Hi-Hat.dmp b/instruments/FM/synth/(GEN) Synth with Closed Hi-Hat.dmp new file mode 100644 index 000000000..8f2e3389a Binary files /dev/null and b/instruments/FM/synth/(GEN) Synth with Closed Hi-Hat.dmp differ diff --git a/instruments/FM/synth/(GEN) Synth with Open Hi-Hat.dmp b/instruments/FM/synth/(GEN) Synth with Open Hi-Hat.dmp new file mode 100644 index 000000000..2a94410fe Binary files /dev/null and b/instruments/FM/synth/(GEN) Synth with Open Hi-Hat.dmp differ diff --git a/instruments/FM/synth/(GEN) Twang EX.dmp b/instruments/FM/synth/(GEN) Twang EX.dmp new file mode 100644 index 000000000..10503c963 Binary files /dev/null and b/instruments/FM/synth/(GEN) Twang EX.dmp differ diff --git a/instruments/FM/synth/(GEN) Twang Whistle.dmp b/instruments/FM/synth/(GEN) Twang Whistle.dmp new file mode 100644 index 000000000..6e0a2bdc1 Binary files /dev/null and b/instruments/FM/synth/(GEN) Twang Whistle.dmp differ diff --git a/instruments/FM/synth/(GEN) VRC7 Choir.dmp b/instruments/FM/synth/(GEN) VRC7 Choir.dmp new file mode 100644 index 000000000..a0a4c8733 Binary files /dev/null and b/instruments/FM/synth/(GEN) VRC7 Choir.dmp differ diff --git a/instruments/FM/synth/(GEN) VRC7 Hestian.dmp b/instruments/FM/synth/(GEN) VRC7 Hestian.dmp new file mode 100644 index 000000000..2f90a68e9 Binary files /dev/null and b/instruments/FM/synth/(GEN) VRC7 Hestian.dmp differ diff --git a/instruments/FM/synth/(GEN) Wahwah.dmp b/instruments/FM/synth/(GEN) Wahwah.dmp new file mode 100644 index 000000000..7b3dbbace Binary files /dev/null and b/instruments/FM/synth/(GEN) Wahwah.dmp differ diff --git a/instruments/FM/synth/Abduction.dmp b/instruments/FM/synth/Abduction.dmp new file mode 100644 index 000000000..600478b65 Binary files /dev/null and b/instruments/FM/synth/Abduction.dmp differ diff --git a/instruments/FM/synth/Altered Square.dmp b/instruments/FM/synth/Altered Square.dmp new file mode 100644 index 000000000..ca8e89d31 Binary files /dev/null and b/instruments/FM/synth/Altered Square.dmp differ diff --git a/instruments/FM/synth/Buttermilk.dmp b/instruments/FM/synth/Buttermilk.dmp new file mode 100644 index 000000000..9a9c4de7c Binary files /dev/null and b/instruments/FM/synth/Buttermilk.dmp differ diff --git a/instruments/FM/synth/Circuitbird Donk.dmp b/instruments/FM/synth/Circuitbird Donk.dmp new file mode 100644 index 000000000..c3b618247 Binary files /dev/null and b/instruments/FM/synth/Circuitbird Donk.dmp differ diff --git a/instruments/FM/synth/Cricket Chorus.fui b/instruments/FM/synth/Cricket Chorus.fui new file mode 100644 index 000000000..4dfaefeed Binary files /dev/null and b/instruments/FM/synth/Cricket Chorus.fui differ diff --git a/instruments/FM/synth/Desert Synth.dmp b/instruments/FM/synth/Desert Synth.dmp new file mode 100644 index 000000000..0d1880855 Binary files /dev/null and b/instruments/FM/synth/Desert Synth.dmp differ diff --git a/instruments/FM/synth/Ecco.dmp b/instruments/FM/synth/Ecco.dmp new file mode 100644 index 000000000..87c8520bd Binary files /dev/null and b/instruments/FM/synth/Ecco.dmp differ diff --git a/instruments/FM/synth/FM_noname1.fui b/instruments/FM/synth/FM_noname1.fui new file mode 100644 index 000000000..bd7397133 Binary files /dev/null and b/instruments/FM/synth/FM_noname1.fui differ diff --git a/instruments/FM/synth/Guess.dmp b/instruments/FM/synth/Guess.dmp new file mode 100644 index 000000000..be35eb8c3 Binary files /dev/null and b/instruments/FM/synth/Guess.dmp differ diff --git a/instruments/FM/synth/Klax.dmp b/instruments/FM/synth/Klax.dmp new file mode 100644 index 000000000..5ad6a10fd Binary files /dev/null and b/instruments/FM/synth/Klax.dmp differ diff --git a/instruments/FM/synth/Kyd.dmp b/instruments/FM/synth/Kyd.dmp new file mode 100644 index 000000000..4506530e2 Binary files /dev/null and b/instruments/FM/synth/Kyd.dmp differ diff --git a/instruments/FM/synth/Love.dmp b/instruments/FM/synth/Love.dmp new file mode 100644 index 000000000..75ff867c6 Binary files /dev/null and b/instruments/FM/synth/Love.dmp differ diff --git a/instruments/FM/Octave_Square.fui b/instruments/FM/synth/Octave_Square.fui similarity index 100% rename from instruments/FM/Octave_Square.fui rename to instruments/FM/synth/Octave_Square.fui diff --git a/instruments/FM/Octave_Square2.fui b/instruments/FM/synth/Octave_Square2.fui similarity index 100% rename from instruments/FM/Octave_Square2.fui rename to instruments/FM/synth/Octave_Square2.fui diff --git a/instruments/FM/Reverby_Live_Chords.fui b/instruments/FM/synth/Reverby_Live_Chords.fui similarity index 100% rename from instruments/FM/Reverby_Live_Chords.fui rename to instruments/FM/synth/Reverby_Live_Chords.fui diff --git a/instruments/FM/synth/RustEcho.dmp b/instruments/FM/synth/RustEcho.dmp new file mode 100644 index 000000000..d4fb916b5 Binary files /dev/null and b/instruments/FM/synth/RustEcho.dmp differ diff --git a/instruments/FM/synth/Saw.dmp b/instruments/FM/synth/Saw.dmp new file mode 100644 index 000000000..e75a1603c Binary files /dev/null and b/instruments/FM/synth/Saw.dmp differ diff --git a/instruments/FM/synth/Signal.dmp b/instruments/FM/synth/Signal.dmp new file mode 100644 index 000000000..d5bfcceed Binary files /dev/null and b/instruments/FM/synth/Signal.dmp differ diff --git a/instruments/FM/synth/Space Cowboy.dmp b/instruments/FM/synth/Space Cowboy.dmp new file mode 100644 index 000000000..c17037a27 Binary files /dev/null and b/instruments/FM/synth/Space Cowboy.dmp differ diff --git a/instruments/FM/synth/Space Shredder.dmp b/instruments/FM/synth/Space Shredder.dmp new file mode 100644 index 000000000..c9cbbc9d0 Binary files /dev/null and b/instruments/FM/synth/Space Shredder.dmp differ diff --git a/instruments/FM/synth/Square.dmp b/instruments/FM/synth/Square.dmp new file mode 100644 index 000000000..11e1f822e Binary files /dev/null and b/instruments/FM/synth/Square.dmp differ diff --git a/instruments/FM/Square.fui b/instruments/FM/synth/Square.fui similarity index 100% rename from instruments/FM/Square.fui rename to instruments/FM/synth/Square.fui diff --git a/instruments/FM/synth/Squid.dmp b/instruments/FM/synth/Squid.dmp new file mode 100644 index 000000000..4635260a1 Binary files /dev/null and b/instruments/FM/synth/Squid.dmp differ diff --git a/instruments/FM/synth/Thin.dmp b/instruments/FM/synth/Thin.dmp new file mode 100644 index 000000000..b4ddac9e2 Binary files /dev/null and b/instruments/FM/synth/Thin.dmp differ diff --git a/instruments/FM/synth/Tri.dmp b/instruments/FM/synth/Tri.dmp new file mode 100644 index 000000000..37c05b3eb Binary files /dev/null and b/instruments/FM/synth/Tri.dmp differ diff --git a/instruments/FM/synth/Twoah.dmp b/instruments/FM/synth/Twoah.dmp new file mode 100644 index 000000000..4059578a9 Binary files /dev/null and b/instruments/FM/synth/Twoah.dmp differ diff --git a/instruments/FM/synth/[1OPHigh]Saw.dmp b/instruments/FM/synth/[1OPHigh]Saw.dmp new file mode 100644 index 000000000..d62ce8093 Binary files /dev/null and b/instruments/FM/synth/[1OPHigh]Saw.dmp differ diff --git a/instruments/FM/synth/[2OPHigh]Filtered Square.dmp b/instruments/FM/synth/[2OPHigh]Filtered Square.dmp new file mode 100644 index 000000000..cd2cbd3ba Binary files /dev/null and b/instruments/FM/synth/[2OPHigh]Filtered Square.dmp differ diff --git a/instruments/FM/synth/ass-loud lead.dmp b/instruments/FM/synth/ass-loud lead.dmp new file mode 100644 index 000000000..328f79877 Binary files /dev/null and b/instruments/FM/synth/ass-loud lead.dmp differ diff --git a/instruments/FM/synth/cool leaed.dmp b/instruments/FM/synth/cool leaed.dmp new file mode 100644 index 000000000..4f226d637 Binary files /dev/null and b/instruments/FM/synth/cool leaed.dmp differ diff --git a/instruments/FM/synth/early 80s bs.dmp b/instruments/FM/synth/early 80s bs.dmp new file mode 100644 index 000000000..74e0440b0 Binary files /dev/null and b/instruments/FM/synth/early 80s bs.dmp differ diff --git a/instruments/FM/synth/fm_grinder.fui b/instruments/FM/synth/fm_grinder.fui new file mode 100644 index 000000000..21dea5906 Binary files /dev/null and b/instruments/FM/synth/fm_grinder.fui differ diff --git a/instruments/FM/synth/fm_horror.fui b/instruments/FM/synth/fm_horror.fui new file mode 100644 index 000000000..029cfc5bd Binary files /dev/null and b/instruments/FM/synth/fm_horror.fui differ diff --git a/instruments/FM/synth/fm_noname2.fui b/instruments/FM/synth/fm_noname2.fui new file mode 100644 index 000000000..6c5cae746 Binary files /dev/null and b/instruments/FM/synth/fm_noname2.fui differ diff --git a/instruments/FM/synth/fm_noname3.fui b/instruments/FM/synth/fm_noname3.fui new file mode 100644 index 000000000..faedb9955 Binary files /dev/null and b/instruments/FM/synth/fm_noname3.fui differ diff --git a/instruments/FM/synth/fm_noname4.fui b/instruments/FM/synth/fm_noname4.fui new file mode 100644 index 000000000..68f0c66b5 Binary files /dev/null and b/instruments/FM/synth/fm_noname4.fui differ diff --git a/instruments/FM/synth/fm_noname5.fui b/instruments/FM/synth/fm_noname5.fui new file mode 100644 index 000000000..87ba4761f Binary files /dev/null and b/instruments/FM/synth/fm_noname5.fui differ diff --git a/instruments/FM/synth/fm_noname6.fui b/instruments/FM/synth/fm_noname6.fui new file mode 100644 index 000000000..353969741 Binary files /dev/null and b/instruments/FM/synth/fm_noname6.fui differ diff --git a/instruments/FM/synth/fm_noname7.fui b/instruments/FM/synth/fm_noname7.fui new file mode 100644 index 000000000..e88b4d342 Binary files /dev/null and b/instruments/FM/synth/fm_noname7.fui differ diff --git a/instruments/FM/growl.fui b/instruments/FM/synth/growl.fui similarity index 100% rename from instruments/FM/growl.fui rename to instruments/FM/synth/growl.fui diff --git a/instruments/FM/synth/huh.dmp b/instruments/FM/synth/huh.dmp new file mode 100644 index 000000000..1124f9d55 Binary files /dev/null and b/instruments/FM/synth/huh.dmp differ diff --git a/instruments/FM/synth/mystic cave lead.dmp b/instruments/FM/synth/mystic cave lead.dmp new file mode 100644 index 000000000..86ec421c0 Binary files /dev/null and b/instruments/FM/synth/mystic cave lead.dmp differ diff --git a/instruments/FM/synth/saw + whatever the fuck.dmp b/instruments/FM/synth/saw + whatever the fuck.dmp new file mode 100644 index 000000000..6c23682c7 Binary files /dev/null and b/instruments/FM/synth/saw + whatever the fuck.dmp differ diff --git a/instruments/FM/synth/sawtooth.dmp b/instruments/FM/synth/sawtooth.dmp new file mode 100644 index 000000000..7841e21f9 Binary files /dev/null and b/instruments/FM/synth/sawtooth.dmp differ diff --git a/instruments/FM/synth/snes-ish square.dmp b/instruments/FM/synth/snes-ish square.dmp new file mode 100644 index 000000000..e984ed153 Binary files /dev/null and b/instruments/FM/synth/snes-ish square.dmp differ diff --git a/instruments/FM/synth/sonic spinball toxic caves thingy.dmp b/instruments/FM/synth/sonic spinball toxic caves thingy.dmp new file mode 100644 index 000000000..aa6cc88f8 Binary files /dev/null and b/instruments/FM/synth/sonic spinball toxic caves thingy.dmp differ diff --git a/instruments/FM/synth/whut.dmp b/instruments/FM/synth/whut.dmp new file mode 100644 index 000000000..94b3e55b1 Binary files /dev/null and b/instruments/FM/synth/whut.dmp differ diff --git a/instruments/FM/synth/yrwywryw.dmp b/instruments/FM/synth/yrwywryw.dmp new file mode 100644 index 000000000..15127fe6d Binary files /dev/null and b/instruments/FM/synth/yrwywryw.dmp differ diff --git a/instruments/FM/tfilib/banjo.tfi b/instruments/FM/tfilib/banjo.tfi new file mode 100644 index 000000000..7c1701888 Binary files /dev/null and b/instruments/FM/tfilib/banjo.tfi differ diff --git a/instruments/FM/tfilib/bass.tfi b/instruments/FM/tfilib/bass.tfi new file mode 100644 index 000000000..fe5504bd1 Binary files /dev/null and b/instruments/FM/tfilib/bass.tfi differ diff --git a/instruments/FM/tfilib/bell.tfi b/instruments/FM/tfilib/bell.tfi new file mode 100644 index 000000000..1ecdb0e4a Binary files /dev/null and b/instruments/FM/tfilib/bell.tfi differ diff --git a/instruments/FM/tfilib/cymbal.tfi b/instruments/FM/tfilib/cymbal.tfi new file mode 100644 index 000000000..2abe7ac0d Binary files /dev/null and b/instruments/FM/tfilib/cymbal.tfi differ diff --git a/instruments/FM/tfilib/distbass.tfi b/instruments/FM/tfilib/distbass.tfi new file mode 100644 index 000000000..6e93bb770 Binary files /dev/null and b/instruments/FM/tfilib/distbass.tfi differ diff --git a/instruments/FM/tfilib/distguit.tfi b/instruments/FM/tfilib/distguit.tfi new file mode 100644 index 000000000..5929926f4 Binary files /dev/null and b/instruments/FM/tfilib/distguit.tfi differ diff --git a/instruments/FM/tfilib/distslap.tfi b/instruments/FM/tfilib/distslap.tfi new file mode 100644 index 000000000..44b4d1f04 Binary files /dev/null and b/instruments/FM/tfilib/distslap.tfi differ diff --git a/instruments/FM/tfilib/elecbass.tfi b/instruments/FM/tfilib/elecbass.tfi new file mode 100644 index 000000000..2d275444d Binary files /dev/null and b/instruments/FM/tfilib/elecbass.tfi differ diff --git a/instruments/FM/tfilib/fifths.tfi b/instruments/FM/tfilib/fifths.tfi new file mode 100644 index 000000000..f7a1a0b3c Binary files /dev/null and b/instruments/FM/tfilib/fifths.tfi differ diff --git a/instruments/FM/tfilib/flute.tfi b/instruments/FM/tfilib/flute.tfi new file mode 100644 index 000000000..d98b6847c Binary files /dev/null and b/instruments/FM/tfilib/flute.tfi differ diff --git a/instruments/FM/tfilib/guitar.tfi b/instruments/FM/tfilib/guitar.tfi new file mode 100644 index 000000000..27b6206c8 Binary files /dev/null and b/instruments/FM/tfilib/guitar.tfi differ diff --git a/instruments/FM/tfilib/harp.tfi b/instruments/FM/tfilib/harp.tfi new file mode 100644 index 000000000..c7fd62beb Binary files /dev/null and b/instruments/FM/tfilib/harp.tfi differ diff --git a/instruments/FM/tfilib/harpsich.tfi b/instruments/FM/tfilib/harpsich.tfi new file mode 100644 index 000000000..a64a86cab Binary files /dev/null and b/instruments/FM/tfilib/harpsich.tfi differ diff --git a/instruments/FM/tfilib/hithat.tfi b/instruments/FM/tfilib/hithat.tfi new file mode 100644 index 000000000..67559890c Binary files /dev/null and b/instruments/FM/tfilib/hithat.tfi differ diff --git a/instruments/FM/tfilib/kick.tfi b/instruments/FM/tfilib/kick.tfi new file mode 100644 index 000000000..fe0ebba62 Binary files /dev/null and b/instruments/FM/tfilib/kick.tfi differ diff --git a/instruments/FM/tfilib/list.txt b/instruments/FM/tfilib/list.txt new file mode 100644 index 000000000..78d9c5b9c --- /dev/null +++ b/instruments/FM/tfilib/list.txt @@ -0,0 +1,42 @@ +Middle column is recommended octave range or pitch. +Octaves are counted from 1 (i.e. full range is 1~8) + +piano ...... 3~8 ... acoustic piano +tackpian ... 3~8 ... tack piano +sofpiano ... 3~8 ... soft synth piano +toypiano ... 3~8 ... toy piano +organ ...... 3~8 ... organ +marimba .... 4~7 ... marimba +harp ....... 5~8 ... harp +lyre ....... 5~8 ... lyre +harpsich ... 5~8 ... harpsichord +bell ....... 6~8 ... bell +synbell .... 6~8 ... synth bell +flute ...... 5~8 ... flute (recorder) +ocarina .... 5~8 ... ocarina +trumpet .... 4~6 ... trumpet +sax ........ 3~5 ... saxophone +guitar ..... 3~6 ... acoustic guitar +banjo ...... 3~6 ... banjo +bass ....... 3~4 ... acoustic bass +elecbass ... 3~4 ... electric bass +slapbass ... 3~4 ... slap bass +distguit ... 3~4 ... distortion guitar +distbass ... 3~4 ... distortion bass +distslap ... 3~4 ... distortion slap bass +square ..... 1~8 ... square wave (sharp) +softsqr .... 1~8 ... square wave (softer) +sawtooth ... 1~8 ... sawtooth wave (sharp) +softsaw .... 1~8 ... sawtooth wave (softer) +triangle ... 1~8 ... triangle wave +sine ....... 1~8 ... sine wave +neslike .... 1~8 ... "NES"-ish sound (25.0% square-like) +fifths ..... 1~8 ... perfect fifth synth +snare ...... c-2 ... snare drum +kick ....... c-2 ... kick drum +cymbal ..... a-6 ... cymbals +hithat ..... a-6 ... hit-hats +timpani1 ... c-1 ... timpani +timpani2 ... c-1 ... timpani (deeper) +wooddrum ... c-2 ... wooden drum +steldrum ... c-2 ... steel drum diff --git a/instruments/FM/tfilib/lyre.tfi b/instruments/FM/tfilib/lyre.tfi new file mode 100644 index 000000000..b984544c8 Binary files /dev/null and b/instruments/FM/tfilib/lyre.tfi differ diff --git a/instruments/FM/tfilib/marimba.tfi b/instruments/FM/tfilib/marimba.tfi new file mode 100644 index 000000000..c55c888a7 Binary files /dev/null and b/instruments/FM/tfilib/marimba.tfi differ diff --git a/instruments/FM/tfilib/neslike.tfi b/instruments/FM/tfilib/neslike.tfi new file mode 100644 index 000000000..663ae2d3b Binary files /dev/null and b/instruments/FM/tfilib/neslike.tfi differ diff --git a/instruments/FM/tfilib/ocarina.tfi b/instruments/FM/tfilib/ocarina.tfi new file mode 100644 index 000000000..739774a92 Binary files /dev/null and b/instruments/FM/tfilib/ocarina.tfi differ diff --git a/instruments/FM/tfilib/organ.tfi b/instruments/FM/tfilib/organ.tfi new file mode 100644 index 000000000..aa365241f Binary files /dev/null and b/instruments/FM/tfilib/organ.tfi differ diff --git a/instruments/FM/tfilib/piano.tfi b/instruments/FM/tfilib/piano.tfi new file mode 100644 index 000000000..fda5e9746 Binary files /dev/null and b/instruments/FM/tfilib/piano.tfi differ diff --git a/instruments/FM/tfilib/sawtooth.tfi b/instruments/FM/tfilib/sawtooth.tfi new file mode 100644 index 000000000..a4263e52c Binary files /dev/null and b/instruments/FM/tfilib/sawtooth.tfi differ diff --git a/instruments/FM/tfilib/sax.tfi b/instruments/FM/tfilib/sax.tfi new file mode 100644 index 000000000..78ce03590 Binary files /dev/null and b/instruments/FM/tfilib/sax.tfi differ diff --git a/instruments/FM/tfilib/sine.tfi b/instruments/FM/tfilib/sine.tfi new file mode 100644 index 000000000..e41ef03f2 Binary files /dev/null and b/instruments/FM/tfilib/sine.tfi differ diff --git a/instruments/FM/tfilib/slapbass.tfi b/instruments/FM/tfilib/slapbass.tfi new file mode 100644 index 000000000..47eb03ed6 Binary files /dev/null and b/instruments/FM/tfilib/slapbass.tfi differ diff --git a/instruments/FM/tfilib/snare.tfi b/instruments/FM/tfilib/snare.tfi new file mode 100644 index 000000000..2148b239b Binary files /dev/null and b/instruments/FM/tfilib/snare.tfi differ diff --git a/instruments/FM/tfilib/sofpiano.tfi b/instruments/FM/tfilib/sofpiano.tfi new file mode 100644 index 000000000..462f88cf2 Binary files /dev/null and b/instruments/FM/tfilib/sofpiano.tfi differ diff --git a/instruments/FM/tfilib/softsaw.tfi b/instruments/FM/tfilib/softsaw.tfi new file mode 100644 index 000000000..18c1cf9d1 Binary files /dev/null and b/instruments/FM/tfilib/softsaw.tfi differ diff --git a/instruments/FM/tfilib/softsqr.tfi b/instruments/FM/tfilib/softsqr.tfi new file mode 100644 index 000000000..c5b87811e Binary files /dev/null and b/instruments/FM/tfilib/softsqr.tfi differ diff --git a/instruments/FM/tfilib/square.tfi b/instruments/FM/tfilib/square.tfi new file mode 100644 index 000000000..40777a94a Binary files /dev/null and b/instruments/FM/tfilib/square.tfi differ diff --git a/instruments/FM/tfilib/steldrum.tfi b/instruments/FM/tfilib/steldrum.tfi new file mode 100644 index 000000000..e953684a4 Binary files /dev/null and b/instruments/FM/tfilib/steldrum.tfi differ diff --git a/instruments/FM/tfilib/synbell.tfi b/instruments/FM/tfilib/synbell.tfi new file mode 100644 index 000000000..5be44e6b4 Binary files /dev/null and b/instruments/FM/tfilib/synbell.tfi differ diff --git a/instruments/FM/tfilib/tackpian.tfi b/instruments/FM/tfilib/tackpian.tfi new file mode 100644 index 000000000..9a98fe2ac Binary files /dev/null and b/instruments/FM/tfilib/tackpian.tfi differ diff --git a/instruments/FM/tfilib/timpani1.tfi b/instruments/FM/tfilib/timpani1.tfi new file mode 100644 index 000000000..acfbf7cda Binary files /dev/null and b/instruments/FM/tfilib/timpani1.tfi differ diff --git a/instruments/FM/tfilib/timpani2.tfi b/instruments/FM/tfilib/timpani2.tfi new file mode 100644 index 000000000..8fe446f4d Binary files /dev/null and b/instruments/FM/tfilib/timpani2.tfi differ diff --git a/instruments/FM/tfilib/toypiano.tfi b/instruments/FM/tfilib/toypiano.tfi new file mode 100644 index 000000000..8bb517897 Binary files /dev/null and b/instruments/FM/tfilib/toypiano.tfi differ diff --git a/instruments/FM/tfilib/triangle.tfi b/instruments/FM/tfilib/triangle.tfi new file mode 100644 index 000000000..abf0ed310 Binary files /dev/null and b/instruments/FM/tfilib/triangle.tfi differ diff --git a/instruments/FM/tfilib/trumpet.tfi b/instruments/FM/tfilib/trumpet.tfi new file mode 100644 index 000000000..a5a9c6a81 Binary files /dev/null and b/instruments/FM/tfilib/trumpet.tfi differ diff --git a/instruments/FM/tfilib/wooddrum.tfi b/instruments/FM/tfilib/wooddrum.tfi new file mode 100644 index 000000000..a661547e6 Binary files /dev/null and b/instruments/FM/tfilib/wooddrum.tfi differ diff --git a/instruments/FM/wind/(CH3) Double Clarinet.dmp b/instruments/FM/wind/(CH3) Double Clarinet.dmp new file mode 100644 index 000000000..158b45a1d Binary files /dev/null and b/instruments/FM/wind/(CH3) Double Clarinet.dmp differ diff --git a/instruments/FM/wind/(CH3) Double Flute.dmp b/instruments/FM/wind/(CH3) Double Flute.dmp new file mode 100644 index 000000000..697ab487f Binary files /dev/null and b/instruments/FM/wind/(CH3) Double Flute.dmp differ diff --git a/instruments/FM/wind/(CH3) Double Woodwind.dmp b/instruments/FM/wind/(CH3) Double Woodwind.dmp new file mode 100644 index 000000000..d348a2c4a Binary files /dev/null and b/instruments/FM/wind/(CH3) Double Woodwind.dmp differ diff --git a/instruments/FM/wind/(CH3) Quadruple Ocarina.dmp b/instruments/FM/wind/(CH3) Quadruple Ocarina.dmp new file mode 100644 index 000000000..66d69334c Binary files /dev/null and b/instruments/FM/wind/(CH3) Quadruple Ocarina.dmp differ diff --git a/instruments/FM/wind/(GEN) Clarinet.dmp b/instruments/FM/wind/(GEN) Clarinet.dmp new file mode 100644 index 000000000..ad0ea8e66 Binary files /dev/null and b/instruments/FM/wind/(GEN) Clarinet.dmp differ diff --git a/instruments/FM/wind/(GEN) Didgeridoo.dmp b/instruments/FM/wind/(GEN) Didgeridoo.dmp new file mode 100644 index 000000000..dd510a4e1 Binary files /dev/null and b/instruments/FM/wind/(GEN) Didgeridoo.dmp differ diff --git a/instruments/FM/wind/(GEN) Flute.dmp b/instruments/FM/wind/(GEN) Flute.dmp new file mode 100644 index 000000000..dadfe9641 Binary files /dev/null and b/instruments/FM/wind/(GEN) Flute.dmp differ diff --git a/instruments/FM/wind/(GEN) Forest Flute.dmp b/instruments/FM/wind/(GEN) Forest Flute.dmp new file mode 100644 index 000000000..98a711e6d Binary files /dev/null and b/instruments/FM/wind/(GEN) Forest Flute.dmp differ diff --git a/instruments/FM/wind/(GEN) Harmonica.dmp b/instruments/FM/wind/(GEN) Harmonica.dmp new file mode 100644 index 000000000..7b17b15c8 Binary files /dev/null and b/instruments/FM/wind/(GEN) Harmonica.dmp differ diff --git a/instruments/FM/wind/(GEN) Ocarina.dmp b/instruments/FM/wind/(GEN) Ocarina.dmp new file mode 100644 index 000000000..74527df59 Binary files /dev/null and b/instruments/FM/wind/(GEN) Ocarina.dmp differ diff --git a/instruments/FM/wind/(GEN) Saxophone EX.dmp b/instruments/FM/wind/(GEN) Saxophone EX.dmp new file mode 100644 index 000000000..acd8695de Binary files /dev/null and b/instruments/FM/wind/(GEN) Saxophone EX.dmp differ diff --git a/instruments/FM/wind/(GEN) Saxophone.dmp b/instruments/FM/wind/(GEN) Saxophone.dmp new file mode 100644 index 000000000..efe3e79c9 Binary files /dev/null and b/instruments/FM/wind/(GEN) Saxophone.dmp differ diff --git a/instruments/FM/wind/B'arinet.dmp b/instruments/FM/wind/B'arinet.dmp new file mode 100644 index 000000000..2d249ca65 Binary files /dev/null and b/instruments/FM/wind/B'arinet.dmp differ diff --git a/instruments/FM/wind/Clarinet.dmp b/instruments/FM/wind/Clarinet.dmp new file mode 100644 index 000000000..4fcc3c241 Binary files /dev/null and b/instruments/FM/wind/Clarinet.dmp differ diff --git a/instruments/FM/wind/English Horn.dmp b/instruments/FM/wind/English Horn.dmp new file mode 100644 index 000000000..71b17ce65 Binary files /dev/null and b/instruments/FM/wind/English Horn.dmp differ diff --git a/instruments/FM/FM_4OP_-_Tenor_Sax.fui b/instruments/FM/wind/FM_4OP_-_Tenor_Sax.fui similarity index 100% rename from instruments/FM/FM_4OP_-_Tenor_Sax.fui rename to instruments/FM/wind/FM_4OP_-_Tenor_Sax.fui diff --git a/instruments/FM/wind/Flute.dmp b/instruments/FM/wind/Flute.dmp new file mode 100644 index 000000000..946358943 Binary files /dev/null and b/instruments/FM/wind/Flute.dmp differ diff --git a/instruments/FM/wind/Harmonica.dmp b/instruments/FM/wind/Harmonica.dmp new file mode 100644 index 000000000..6514e2594 Binary files /dev/null and b/instruments/FM/wind/Harmonica.dmp differ diff --git a/instruments/FM/OPNx_BottleBlow.fui b/instruments/FM/wind/OPNx_BottleBlow.fui similarity index 100% rename from instruments/FM/OPNx_BottleBlow.fui rename to instruments/FM/wind/OPNx_BottleBlow.fui diff --git a/instruments/FM/wind/Pan Flute.dmp b/instruments/FM/wind/Pan Flute.dmp new file mode 100644 index 000000000..933c61297 Binary files /dev/null and b/instruments/FM/wind/Pan Flute.dmp differ diff --git a/instruments/FM/wind/bassoon.fui b/instruments/FM/wind/bassoon.fui new file mode 100644 index 000000000..7e71d1b63 Binary files /dev/null and b/instruments/FM/wind/bassoon.fui differ diff --git a/instruments/FM/wind/bassoon_clarinet.fui b/instruments/FM/wind/bassoon_clarinet.fui new file mode 100644 index 000000000..730dd3239 Binary files /dev/null and b/instruments/FM/wind/bassoon_clarinet.fui differ diff --git a/instruments/FM/wind/fm_pipeflute.fui b/instruments/FM/wind/fm_pipeflute.fui new file mode 100644 index 000000000..d397017a3 Binary files /dev/null and b/instruments/FM/wind/fm_pipeflute.fui differ diff --git a/instruments/FM/wind/woodwind_00.fui b/instruments/FM/wind/woodwind_00.fui new file mode 100644 index 000000000..3f3f6db90 Binary files /dev/null and b/instruments/FM/wind/woodwind_00.fui differ diff --git a/instruments/OPL/OPL-ClickKik.fui b/instruments/OPL/OPL-ClickKik.fui new file mode 100644 index 000000000..979bb1f83 Binary files /dev/null and b/instruments/OPL/OPL-ClickKik.fui differ diff --git a/instruments/OPL/OPL-RhythmTemplate.fui b/instruments/OPL/OPL-RhythmTemplate.fui new file mode 100644 index 000000000..5586d4e9c Binary files /dev/null and b/instruments/OPL/OPL-RhythmTemplate.fui differ diff --git a/instruments/OPL/OPL-RollingDrum.fui b/instruments/OPL/OPL-RollingDrum.fui new file mode 100644 index 000000000..541b53df7 Binary files /dev/null and b/instruments/OPL/OPL-RollingDrum.fui differ diff --git a/instruments/OPL/OPL2-TwinkleBlare.fui b/instruments/OPL/OPL2-TwinkleBlare.fui new file mode 100644 index 000000000..c6c22b2bf Binary files /dev/null and b/instruments/OPL/OPL2-TwinkleBlare.fui differ diff --git a/instruments/OPL/OPL3-4opbrass11.fui b/instruments/OPL/OPL3-4opbrass11.fui new file mode 100644 index 000000000..b9e8f2aa5 Binary files /dev/null and b/instruments/OPL/OPL3-4opbrass11.fui differ diff --git a/instruments/OPL/OPL3-4opharmonica.fui b/instruments/OPL/OPL3-4opharmonica.fui new file mode 100644 index 000000000..2112f45a5 Binary files /dev/null and b/instruments/OPL/OPL3-4opharmonica.fui differ diff --git a/instruments/OPL/OPL3-4opsitar.fui b/instruments/OPL/OPL3-4opsitar.fui new file mode 100644 index 000000000..aec5fc60b Binary files /dev/null and b/instruments/OPL/OPL3-4opsitar.fui differ diff --git a/instruments/OPL/OPL3-FakeFalcomString.fui b/instruments/OPL/OPL3-FakeFalcomString.fui new file mode 100644 index 000000000..4ab838036 Binary files /dev/null and b/instruments/OPL/OPL3-FakeFalcomString.fui differ diff --git a/instruments/OPL/OPL3-GabberKick.fui b/instruments/OPL/OPL3-GabberKick.fui new file mode 100644 index 000000000..ab55ac474 Binary files /dev/null and b/instruments/OPL/OPL3-GabberKick.fui differ diff --git a/instruments/OPL/OPL3-GabberKick3-60hz-.fui b/instruments/OPL/OPL3-GabberKick3-60hz-.fui new file mode 100644 index 000000000..961039f56 Binary files /dev/null and b/instruments/OPL/OPL3-GabberKick3-60hz-.fui differ diff --git a/instruments/OPL/OPL3-PWM.fui b/instruments/OPL/OPL3-PWM.fui new file mode 100644 index 000000000..fd8f925a8 Binary files /dev/null and b/instruments/OPL/OPL3-PWM.fui differ diff --git a/instruments/OPL/OPL3-PeriodicNoise.fui b/instruments/OPL/OPL3-PeriodicNoise.fui new file mode 100644 index 000000000..9db8d4779 Binary files /dev/null and b/instruments/OPL/OPL3-PeriodicNoise.fui differ diff --git a/instruments/OPL/OPL3-SegaBass.fui b/instruments/OPL/OPL3-SegaBass.fui new file mode 100644 index 000000000..3694ec426 Binary files /dev/null and b/instruments/OPL/OPL3-SegaBass.fui differ diff --git a/instruments/OPL/OPL3-SyncDuck.fui b/instruments/OPL/OPL3-SyncDuck.fui new file mode 100644 index 000000000..0f3b0a7e1 Binary files /dev/null and b/instruments/OPL/OPL3-SyncDuck.fui differ diff --git a/instruments/OPL/OPL3-TwinkleKey.fui b/instruments/OPL/OPL3-TwinkleKey.fui new file mode 100644 index 000000000..71add4315 Binary files /dev/null and b/instruments/OPL/OPL3-TwinkleKey.fui differ diff --git a/instruments/OPL/OPL3-clap.fui b/instruments/OPL/OPL3-clap.fui new file mode 100644 index 000000000..882c9fb06 Binary files /dev/null and b/instruments/OPL/OPL3-clap.fui differ diff --git a/instruments/OPL/OPL3-easyhoova.fui b/instruments/OPL/OPL3-easyhoova.fui new file mode 100644 index 000000000..2f0aa153f Binary files /dev/null and b/instruments/OPL/OPL3-easyhoova.fui differ diff --git a/instruments/OPL/OPL3_BigBass.fui b/instruments/OPL/OPL3_BigBass.fui new file mode 100644 index 000000000..dc477e4eb Binary files /dev/null and b/instruments/OPL/OPL3_BigBass.fui differ diff --git a/instruments/OPL/OPL3_Springybass.fui b/instruments/OPL/OPL3_Springybass.fui new file mode 100644 index 000000000..8f3ce2720 Binary files /dev/null and b/instruments/OPL/OPL3_Springybass.fui differ diff --git a/instruments/OPL/OPLL_Clickik.fui b/instruments/OPL/OPLL_Clickik.fui new file mode 100644 index 000000000..5cc7b3bb7 Binary files /dev/null and b/instruments/OPL/OPLL_Clickik.fui differ diff --git a/instruments/OPL/OPL_GoodPanFlute.fui b/instruments/OPL/OPL_GoodPanFlute.fui new file mode 100644 index 000000000..20b917b68 Binary files /dev/null and b/instruments/OPL/OPL_GoodPanFlute.fui differ diff --git a/instruments/OPL/OPL_KoreanSquare.fui b/instruments/OPL/OPL_KoreanSquare.fui new file mode 100644 index 000000000..99aa0be13 Binary files /dev/null and b/instruments/OPL/OPL_KoreanSquare.fui differ diff --git a/instruments/OPL/OPL_SupersawUnit.fui b/instruments/OPL/OPL_SupersawUnit.fui new file mode 100644 index 000000000..114ed5073 Binary files /dev/null and b/instruments/OPL/OPL_SupersawUnit.fui differ diff --git a/instruments/OPL/OPM-lowpitch-fmclap.fui b/instruments/OPL/OPM-lowpitch-fmclap.fui new file mode 100644 index 000000000..427c337b0 Binary files /dev/null and b/instruments/OPL/OPM-lowpitch-fmclap.fui differ diff --git a/instruments/OPLL/(SMSFM) Near Perfect Square Wave.dmp b/instruments/OPLL/(SMSFM) Near Perfect Square Wave.dmp new file mode 100644 index 000000000..392b8b59b Binary files /dev/null and b/instruments/OPLL/(SMSFM) Near Perfect Square Wave.dmp differ diff --git a/instruments/README.md b/instruments/README.md index fdfae2f3a..40cad4220 100644 --- a/instruments/README.md +++ b/instruments/README.md @@ -8,6 +8,37 @@ these are organized in the following categories: - **OPLL**: FM instruments for OPLL. - **other**: instruments for any other system. +# contributors + +- Abstract 64 +- A M 4 N +- Blast\_Brothers +- brickblock369 +- Deepfreeze +- dj.tuBIG/MaliceX +- dotHayabusa +- EpicTyphlosion +- freq-mod +- GENATARi +- jvsTSX +- Laggy +- LovelyA72 +- nicco1690 +- PacorexTheTrex +- paynspch +- pedipanol +- Sik +- Sonic 🦔 +- System64 +- Teuthida +- theloredev +- TheRealHedgehogSonic +- tildearrow +- Weeppiko +- Ygor G. +- YohananDiamond +- Yumetaro + # submit instruments you may submit your own instruments by creating a pull request or contacting me! the only guidelines are: diff --git a/instruments/other/(AY) Closed Hat.fui b/instruments/other/(AY) Closed Hat.fui new file mode 100644 index 000000000..237c8610e Binary files /dev/null and b/instruments/other/(AY) Closed Hat.fui differ diff --git a/instruments/other/(AY) Hat-EnvBass.fui b/instruments/other/(AY) Hat-EnvBass.fui new file mode 100644 index 000000000..00b661abe Binary files /dev/null and b/instruments/other/(AY) Hat-EnvBass.fui differ diff --git a/instruments/other/(AY) Kick E-1.fui b/instruments/other/(AY) Kick E-1.fui new file mode 100644 index 000000000..212289c95 Binary files /dev/null and b/instruments/other/(AY) Kick E-1.fui differ diff --git a/instruments/other/(AY) Open Hat.fui b/instruments/other/(AY) Open Hat.fui new file mode 100644 index 000000000..0466625b1 Binary files /dev/null and b/instruments/other/(AY) Open Hat.fui differ diff --git a/instruments/other/(AY) Snare A#3.fui b/instruments/other/(AY) Snare A#3.fui new file mode 100644 index 000000000..238199de8 Binary files /dev/null and b/instruments/other/(AY) Snare A#3.fui differ diff --git a/instruments/other/(S16) Computer Shutdown [C-6 0213].dmp b/instruments/other/(S16) Computer Shutdown [C-6 0213].dmp new file mode 100644 index 000000000..9ab5189b7 Binary files /dev/null and b/instruments/other/(S16) Computer Shutdown [C-6 0213].dmp differ diff --git a/instruments/other/(S16) Dog Whistle.dmp b/instruments/other/(S16) Dog Whistle.dmp new file mode 100644 index 000000000..c1627b341 Binary files /dev/null and b/instruments/other/(S16) Dog Whistle.dmp differ diff --git a/instruments/other/(S16) Donkey Kong Lead.dmp b/instruments/other/(S16) Donkey Kong Lead.dmp new file mode 100644 index 000000000..7532452cd Binary files /dev/null and b/instruments/other/(S16) Donkey Kong Lead.dmp differ diff --git a/instruments/other/(S16) Hi-Hat Closed.dmp b/instruments/other/(S16) Hi-Hat Closed.dmp new file mode 100644 index 000000000..1091df537 Binary files /dev/null and b/instruments/other/(S16) Hi-Hat Closed.dmp differ diff --git a/instruments/other/(S16) Hi-Hat Open.dmp b/instruments/other/(S16) Hi-Hat Open.dmp new file mode 100644 index 000000000..04b916689 Binary files /dev/null and b/instruments/other/(S16) Hi-Hat Open.dmp differ diff --git a/instruments/other/(S16) Perfect Square Wave + Hi-Hat Closed.dmp b/instruments/other/(S16) Perfect Square Wave + Hi-Hat Closed.dmp new file mode 100644 index 000000000..1389c2368 Binary files /dev/null and b/instruments/other/(S16) Perfect Square Wave + Hi-Hat Closed.dmp differ diff --git a/instruments/other/(S16) Perfect Square Wave + Hi-Hat Open.dmp b/instruments/other/(S16) Perfect Square Wave + Hi-Hat Open.dmp new file mode 100644 index 000000000..67b482bd1 Binary files /dev/null and b/instruments/other/(S16) Perfect Square Wave + Hi-Hat Open.dmp differ diff --git a/instruments/other/(S16) Portal Cast.dmp b/instruments/other/(S16) Portal Cast.dmp new file mode 100644 index 000000000..665c56226 Binary files /dev/null and b/instruments/other/(S16) Portal Cast.dmp differ diff --git a/instruments/other/(SMS) 2-Arp Chord High.dmp b/instruments/other/(SMS) 2-Arp Chord High.dmp new file mode 100644 index 000000000..934017362 Binary files /dev/null and b/instruments/other/(SMS) 2-Arp Chord High.dmp differ diff --git a/instruments/other/(SMS) 2-Arp High.dmp b/instruments/other/(SMS) 2-Arp High.dmp new file mode 100644 index 000000000..cefb09cb9 Binary files /dev/null and b/instruments/other/(SMS) 2-Arp High.dmp differ diff --git a/instruments/other/(SMS) 2-Arp Major Low.dmp b/instruments/other/(SMS) 2-Arp Major Low.dmp new file mode 100644 index 000000000..532c24565 Binary files /dev/null and b/instruments/other/(SMS) 2-Arp Major Low.dmp differ diff --git a/instruments/other/(SMS) 2-Arp Minor Low.dmp b/instruments/other/(SMS) 2-Arp Minor Low.dmp new file mode 100644 index 000000000..608e54832 Binary files /dev/null and b/instruments/other/(SMS) 2-Arp Minor Low.dmp differ diff --git a/instruments/other/(SMS) 3-Arp High.dmp b/instruments/other/(SMS) 3-Arp High.dmp new file mode 100644 index 000000000..a5ebf9759 Binary files /dev/null and b/instruments/other/(SMS) 3-Arp High.dmp differ diff --git a/instruments/other/(SMS) 3-Arp Major.dmp b/instruments/other/(SMS) 3-Arp Major.dmp new file mode 100644 index 000000000..3d284983e Binary files /dev/null and b/instruments/other/(SMS) 3-Arp Major.dmp differ diff --git a/instruments/other/(SMS) 3-Arp Minor.dmp b/instruments/other/(SMS) 3-Arp Minor.dmp new file mode 100644 index 000000000..a28275fb7 Binary files /dev/null and b/instruments/other/(SMS) 3-Arp Minor.dmp differ diff --git a/instruments/other/(SMS) 5-Arp Major.dmp b/instruments/other/(SMS) 5-Arp Major.dmp new file mode 100644 index 000000000..7a9291359 Binary files /dev/null and b/instruments/other/(SMS) 5-Arp Major.dmp differ diff --git a/instruments/other/(SMS) 5-Arp Minor.dmp b/instruments/other/(SMS) 5-Arp Minor.dmp new file mode 100644 index 000000000..d0bd56d17 Binary files /dev/null and b/instruments/other/(SMS) 5-Arp Minor.dmp differ diff --git a/instruments/other/(SMS) Arp Snare.dmp b/instruments/other/(SMS) Arp Snare.dmp new file mode 100644 index 000000000..fa5734d4a Binary files /dev/null and b/instruments/other/(SMS) Arp Snare.dmp differ diff --git a/instruments/other/(SMS) Attack.dmp b/instruments/other/(SMS) Attack.dmp new file mode 100644 index 000000000..0be930625 Binary files /dev/null and b/instruments/other/(SMS) Attack.dmp differ diff --git a/instruments/other/(SMS) Buzz Noise.dmp b/instruments/other/(SMS) Buzz Noise.dmp new file mode 100644 index 000000000..8b7dfd97d Binary files /dev/null and b/instruments/other/(SMS) Buzz Noise.dmp differ diff --git a/instruments/other/(SMS) Crash.dmp b/instruments/other/(SMS) Crash.dmp new file mode 100644 index 000000000..f9855bde3 Binary files /dev/null and b/instruments/other/(SMS) Crash.dmp differ diff --git a/instruments/other/(SMS) Cyclic Noise.dmp b/instruments/other/(SMS) Cyclic Noise.dmp new file mode 100644 index 000000000..cb84b3098 Binary files /dev/null and b/instruments/other/(SMS) Cyclic Noise.dmp differ diff --git a/instruments/other/(SMS) Decay Noise.dmp b/instruments/other/(SMS) Decay Noise.dmp new file mode 100644 index 000000000..9a829f443 Binary files /dev/null and b/instruments/other/(SMS) Decay Noise.dmp differ diff --git a/instruments/other/(SMS) Decay.dmp b/instruments/other/(SMS) Decay.dmp new file mode 100644 index 000000000..7f42d6ec0 Binary files /dev/null and b/instruments/other/(SMS) Decay.dmp differ diff --git a/instruments/other/(SMS) Down Slider.dmp b/instruments/other/(SMS) Down Slider.dmp new file mode 100644 index 000000000..5d0b6b27b Binary files /dev/null and b/instruments/other/(SMS) Down Slider.dmp differ diff --git a/instruments/other/(SMS) Hi-Hat & Note.dmp b/instruments/other/(SMS) Hi-Hat & Note.dmp new file mode 100644 index 000000000..3f92dc68e Binary files /dev/null and b/instruments/other/(SMS) Hi-Hat & Note.dmp differ diff --git a/instruments/other/(SMS) Hi-Hat Closed.dmp b/instruments/other/(SMS) Hi-Hat Closed.dmp new file mode 100644 index 000000000..24f92bf29 Binary files /dev/null and b/instruments/other/(SMS) Hi-Hat Closed.dmp differ diff --git a/instruments/other/(SMS) Hi-Hat Open.dmp b/instruments/other/(SMS) Hi-Hat Open.dmp new file mode 100644 index 000000000..6726e12d3 Binary files /dev/null and b/instruments/other/(SMS) Hi-Hat Open.dmp differ diff --git a/instruments/other/(SMS) Kick Noise.dmp b/instruments/other/(SMS) Kick Noise.dmp new file mode 100644 index 000000000..8f2d3cbf9 Binary files /dev/null and b/instruments/other/(SMS) Kick Noise.dmp differ diff --git a/instruments/other/(SMS) Multi Slider.dmp b/instruments/other/(SMS) Multi Slider.dmp new file mode 100644 index 000000000..abd3094a1 Binary files /dev/null and b/instruments/other/(SMS) Multi Slider.dmp differ diff --git a/instruments/other/(SMS) Obvious Crash.dmp b/instruments/other/(SMS) Obvious Crash.dmp new file mode 100644 index 000000000..54c7387e0 Binary files /dev/null and b/instruments/other/(SMS) Obvious Crash.dmp differ diff --git a/instruments/other/(SMS) Record Scratch Down.dmp b/instruments/other/(SMS) Record Scratch Down.dmp new file mode 100644 index 000000000..8e28c4180 Binary files /dev/null and b/instruments/other/(SMS) Record Scratch Down.dmp differ diff --git a/instruments/other/(SMS) Record Scratch Up.dmp b/instruments/other/(SMS) Record Scratch Up.dmp new file mode 100644 index 000000000..b17b654e2 Binary files /dev/null and b/instruments/other/(SMS) Record Scratch Up.dmp differ diff --git a/instruments/other/(SMS) Retrig.dmp b/instruments/other/(SMS) Retrig.dmp new file mode 100644 index 000000000..65c776102 Binary files /dev/null and b/instruments/other/(SMS) Retrig.dmp differ diff --git a/instruments/other/(SMS) Ride.dmp b/instruments/other/(SMS) Ride.dmp new file mode 100644 index 000000000..01070ff71 Binary files /dev/null and b/instruments/other/(SMS) Ride.dmp differ diff --git a/instruments/other/(SMS) Snare.dmp b/instruments/other/(SMS) Snare.dmp new file mode 100644 index 000000000..c0e32b212 Binary files /dev/null and b/instruments/other/(SMS) Snare.dmp differ diff --git a/instruments/other/(SMS) Splash.dmp b/instruments/other/(SMS) Splash.dmp new file mode 100644 index 000000000..e758a67b9 Binary files /dev/null and b/instruments/other/(SMS) Splash.dmp differ diff --git a/instruments/other/(SMS) Thump & Note.dmp b/instruments/other/(SMS) Thump & Note.dmp new file mode 100644 index 000000000..41fb6d51d Binary files /dev/null and b/instruments/other/(SMS) Thump & Note.dmp differ diff --git a/instruments/other/(SMS) Tim Follin 6-Arp Fast Major.dmp b/instruments/other/(SMS) Tim Follin 6-Arp Fast Major.dmp new file mode 100644 index 000000000..e306203cb Binary files /dev/null and b/instruments/other/(SMS) Tim Follin 6-Arp Fast Major.dmp differ diff --git a/instruments/other/(SMS) Tim Follin 6-Arp Fast Minor.dmp b/instruments/other/(SMS) Tim Follin 6-Arp Fast Minor.dmp new file mode 100644 index 000000000..a845fc1cb Binary files /dev/null and b/instruments/other/(SMS) Tim Follin 6-Arp Fast Minor.dmp differ diff --git a/instruments/other/(SMS) Tim Follin 6-Arp Slow Major.dmp b/instruments/other/(SMS) Tim Follin 6-Arp Slow Major.dmp new file mode 100644 index 000000000..9536150c6 Binary files /dev/null and b/instruments/other/(SMS) Tim Follin 6-Arp Slow Major.dmp differ diff --git a/instruments/other/(SMS) Tim Follin 6-Arp Slow Minor.dmp b/instruments/other/(SMS) Tim Follin 6-Arp Slow Minor.dmp new file mode 100644 index 000000000..166a1cb3a Binary files /dev/null and b/instruments/other/(SMS) Tim Follin 6-Arp Slow Minor.dmp differ diff --git a/instruments/other/(SMS) Tim Follin Lead.dmp b/instruments/other/(SMS) Tim Follin Lead.dmp new file mode 100644 index 000000000..08a3a0815 Binary files /dev/null and b/instruments/other/(SMS) Tim Follin Lead.dmp differ diff --git a/instruments/other/(SMS) Tom A.dmp b/instruments/other/(SMS) Tom A.dmp new file mode 100644 index 000000000..8976d0cf5 Binary files /dev/null and b/instruments/other/(SMS) Tom A.dmp differ diff --git a/instruments/other/(SMS) Tom B.dmp b/instruments/other/(SMS) Tom B.dmp new file mode 100644 index 000000000..664021f6d Binary files /dev/null and b/instruments/other/(SMS) Tom B.dmp differ diff --git a/instruments/other/(SMS) Up Slider.dmp b/instruments/other/(SMS) Up Slider.dmp new file mode 100644 index 000000000..765f156e8 Binary files /dev/null and b/instruments/other/(SMS) Up Slider.dmp differ diff --git a/instruments/other/(SMS) Variable.dmp b/instruments/other/(SMS) Variable.dmp new file mode 100644 index 000000000..7ed3209f5 Binary files /dev/null and b/instruments/other/(SMS) Variable.dmp differ diff --git a/instruments/other/(SMS) Whistle.dmp b/instruments/other/(SMS) Whistle.dmp new file mode 100644 index 000000000..0fd9127c0 Binary files /dev/null and b/instruments/other/(SMS) Whistle.dmp differ diff --git a/instruments/other/Echo.fui b/instruments/other/Echo.fui new file mode 100644 index 000000000..65fe97f80 Binary files /dev/null and b/instruments/other/Echo.fui differ diff --git a/instruments/other/Flute.fui b/instruments/other/Flute.fui new file mode 100644 index 000000000..06119564c Binary files /dev/null and b/instruments/other/Flute.fui differ diff --git a/instruments/other/Follin Guitar 2.fui b/instruments/other/Follin Guitar 2.fui new file mode 100644 index 000000000..504c58703 Binary files /dev/null and b/instruments/other/Follin Guitar 2.fui differ diff --git a/instruments/other/Follin Guitar.fui b/instruments/other/Follin Guitar.fui new file mode 100644 index 000000000..3a3d292e6 Binary files /dev/null and b/instruments/other/Follin Guitar.fui differ diff --git a/instruments/other/Guitar.fui b/instruments/other/Guitar.fui new file mode 100644 index 000000000..20f6f7810 Binary files /dev/null and b/instruments/other/Guitar.fui differ diff --git a/instruments/other/Octave Arp.fui b/instruments/other/Octave Arp.fui new file mode 100644 index 000000000..a891ed9f3 Binary files /dev/null and b/instruments/other/Octave Arp.fui differ diff --git a/instruments/other/SMSPerc/SMSPerc About.txt b/instruments/other/SMSPerc/SMSPerc About.txt new file mode 100644 index 000000000..5964270c3 --- /dev/null +++ b/instruments/other/SMSPerc/SMSPerc About.txt @@ -0,0 +1,26 @@ +The SN7 noise channel can "steal" the pitch of the third square +channel for increased range, and this percussion set takes +advantage of that. The kick and snare drums use CH3 pitch for +two frames- CH3 is muted for the first frame and outputs a +square wave on the second. The hi-hats use CH3 pitch for only +one frame, during which CH3 is silent. + +In order for this to work, an instrument must be placed on both +CH3 and CH4, whenever a kick or snare is triggered. (Because +the hi-hats only need one frame of CH3 silence to sound +correct, and CH4 pitch macros take precedence over CH3 macros +in Furnace, you don't need to place an instrument in CH3 when +a hi-hat is playing by itself.) This is the "KickSnare CH3" +instrument in the folder. The "CH4" instruments are for CH4, +obviously. + +The "ExampleInst" instruments show a setup where a regular +melodic instrument is combined with the CH3 percussion +instruments, so that CH3 can play something useful with minimal +interruption from CH4. Of course, now you have to keep track of +three instruments for one timbre, and you can't have a note +sustain through a percussion sound, but I think it's worth it. + + +Note also that the CH4 instruments need to be played on either +C or D to sound correct. \ No newline at end of file diff --git a/instruments/other/SMSPerc/SMSPerc ExampleInst [Hat] CH3.fui b/instruments/other/SMSPerc/SMSPerc ExampleInst [Hat] CH3.fui new file mode 100644 index 000000000..950f74616 Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc ExampleInst [Hat] CH3.fui differ diff --git a/instruments/other/SMSPerc/SMSPerc ExampleInst [KickSnare] CH3.fui b/instruments/other/SMSPerc/SMSPerc ExampleInst [KickSnare] CH3.fui new file mode 100644 index 000000000..2c658579f Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc ExampleInst [KickSnare] CH3.fui differ diff --git a/instruments/other/SMSPerc/SMSPerc ExampleInst [Nothing] CH3.fui b/instruments/other/SMSPerc/SMSPerc ExampleInst [Nothing] CH3.fui new file mode 100644 index 000000000..d51578af7 Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc ExampleInst [Nothing] CH3.fui differ diff --git a/instruments/other/SMSPerc/SMSPerc Hat_Closed CH4 [D].fui b/instruments/other/SMSPerc/SMSPerc Hat_Closed CH4 [D].fui new file mode 100644 index 000000000..b3ec0f28c Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc Hat_Closed CH4 [D].fui differ diff --git a/instruments/other/SMSPerc/SMSPerc Hat_Open CH4 [D].fui b/instruments/other/SMSPerc/SMSPerc Hat_Open CH4 [D].fui new file mode 100644 index 000000000..81e93c179 Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc Hat_Open CH4 [D].fui differ diff --git a/instruments/other/SMSPerc/SMSPerc Kick CH4 [C].fui b/instruments/other/SMSPerc/SMSPerc Kick CH4 [C].fui new file mode 100644 index 000000000..3a8f1e858 Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc Kick CH4 [C].fui differ diff --git a/instruments/other/SMSPerc/SMSPerc KickSnare CH3.fui b/instruments/other/SMSPerc/SMSPerc KickSnare CH3.fui new file mode 100644 index 000000000..f35b0ef0d Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc KickSnare CH3.fui differ diff --git a/instruments/other/SMSPerc/SMSPerc Snare CH4 [D].fui b/instruments/other/SMSPerc/SMSPerc Snare CH4 [D].fui new file mode 100644 index 000000000..5569b2fc5 Binary files /dev/null and b/instruments/other/SMSPerc/SMSPerc Snare CH4 [D].fui differ diff --git a/papers/doc/1-intro/README.md b/papers/doc/1-intro/README.md index c57297425..41cb32dc0 100644 --- a/papers/doc/1-intro/README.md +++ b/papers/doc/1-intro/README.md @@ -13,10 +13,10 @@ Furnace generates sound from 3 different main types of sound sources. - Instruments are the most standard and most used type of sound source in Furnace. The instrument format is how you can specify parameters and macros for certain channels on certain soundchips, as well as binding samples and wavetables to a format that you can sequence on the note grid. See [4-instrument](https://github.com/tildearrow/furnace/tree/master/papers/doc/4-instrument) for more details. - - Wavetables are the way that you create custom waveform shapes for the HuC6280 sound chip. + - Wavetables are the way that you create custom waveform shapes for the HuC6280, Seta X1-010, WonderSwan, any PCM chip with wavetable synthesizer support, etc. Wavetables only work in the sequencer if you bind them to an instrument. See [4-instrument](https://github.com/tildearrow/furnace/tree/master/papers/doc/4-instrument) and [5-wave](https://github.com/tildearrow/furnace/tree/master/papers/doc/5-wave) for more details. - Samples are how you play back raw audio streams (samples) on certain channels, on certain soundchips, and in some cases, in certain modes. -To sequence a sample, you do not need to assign it to an instrument, however, to resample samples (change the speed of a sample), you need to bind it to an Amiga/Sample instrument. +To sequence a sample, you do not need to assign it to an instrument, however, to resample samples (change the speed of a sample), you need to bind it to a Sample instrument. See [6-sample](https://github.com/tildearrow/furnace/tree/master/papers/doc/6-sample) and [4-instrument](https://github.com/tildearrow/furnace/tree/master/papers/doc/4-instrument) for more details. ## Interface/other diff --git a/papers/doc/4-instrument/pce.md b/papers/doc/4-instrument/pce.md index 50ac335bf..ac0a6824b 100644 --- a/papers/doc/4-instrument/pce.md +++ b/papers/doc/4-instrument/pce.md @@ -5,3 +5,5 @@ PCE instrument editor consists of only three macros, almost like TIA: - [Volume] - volume sequence - [Arpeggio] - pitch sequence - [Waveform] - spicifies wavetables sequence + +It also has wavetable synthesizer support, but unfortunately, it clicks a lot when in use on the HuC6280. diff --git a/papers/doc/4-instrument/vrc6.md b/papers/doc/4-instrument/vrc6.md index a4ea64a18..bd87e050a 100644 --- a/papers/doc/4-instrument/vrc6.md +++ b/papers/doc/4-instrument/vrc6.md @@ -1,7 +1,15 @@ # VRC6 instrument editor -VRC6 instrument editor consists of only three macros: +The VRC6 (regular) instrument editor consists of only three macros: - [Volume] - volume sequence - [Arpeggio] - pitch sequence - [Duty cycle] - specifies duty cycle for pulse wave channels + +## VRC6 (saw) instrument editor + +This channel has its own instrument, a (currently, as of 0.6) one-of-a-kind thing in Furnace. + +The only differences from this instrument type from compared to the regular instrument are that it: + - has a volume range of 0-63 instead of 0-15. + - has no duty cycle range diff --git a/papers/doc/4-instrument/x1_010.md b/papers/doc/4-instrument/x1_010.md index 8f3691ee6..c76cbcb54 100644 --- a/papers/doc/4-instrument/x1_010.md +++ b/papers/doc/4-instrument/x1_010.md @@ -8,4 +8,4 @@ X1-010 instrument editor consists of 7 macros. - [Envelope Mode] - allows shaping an envelope - [Envelope] - spicifies envelope shape sequence, it's also wavetable. - [Auto envelope numerator] - sets the envelope to the channel's frequency multiplied by numerator -- [Auto envelope denominator] - ets the envelope to the channel's frequency multiplied by denominator +- [Auto envelope denominator] - sets the envelope to the channel's frequency divided by denominator diff --git a/papers/doc/5-wave/README.md b/papers/doc/5-wave/README.md index dacc88eaf..b22e86992 100644 --- a/papers/doc/5-wave/README.md +++ b/papers/doc/5-wave/README.md @@ -1,5 +1,13 @@ # wavetable editor -Wavetable synthizers, in context of Furnace, are sound sources that operate on extremely short n-bit PCM streams. By extremely short, no more than 256 bytes. This amount of space is nowhere near enough to store an actual sampled sound, it allows certain amount of freedom to define a waveform shape. As of Furnace 0.5.8, wavetable editor affects PC Engine, WonderSwan and channel 3 of Game Boy. +Wavetable synthesizers, in context of Furnace, are sound sources that operate on extremely short n-bit PCM streams. By extremely short, no more than 256 bytes. This amount of space is nowhere near enough to store an actual sampled sound, it allows certain amount of freedom to define a waveform shape. As of Furnace 0.5.8, wavetable editor affects PC Engine, WonderSwan and channel 3 of Game Boy. -Furnace's wavetable editor is rather simple, you can draw the waveform using mouse or by pasting an MML bit stream in the input field. Maximum wave width (length) is 256 bytes, and maximum wave height (depth) is 256. NOTE: Game Boy, PCE, WonderSwan and Bubble System can handle max 32 byte waveforms, X1-010 can handle max 128 byte waveforms as of now, with 16-level height for GB, X1-010 Envelope, WS, Bubble System and N163, and 32-level height for PCE. If a larger wave is defined for these systems, it will be squashed to fit within the constraints of the system. +Furnace's wavetable editor is rather simple, you can draw the waveform using mouse or by pasting an MML bit stream in the input field. Maximum wave width (length) is 256 bytes, and maximum wave height (depth) is 256. NOTE: Game Boy, PCE, WonderSwan and Bubble System can handle max 32 byte waveforms, X1-010 can handle max 128 byte waveforms as of now, with 16-level height for GB, X1-010 Envelope, WS, Bubble System and N163, and 32-level height for PCE. If a larger wave is defined for these systems, it will be squashed to fit within the constraints of the system. + +## wavetable synthesizer + +Furnace contains a mode for wavetable instruments that allows you to modulate or combine 1 or 2 waves to create unique "animated" sounds. Think of it like a VST or a plugin, as it's basically an extension of regular wavetable soundchips that still allow it to run on real hardware. + +This is accomplished by selecting a wave or two, a mode, and adjusting the settings as needed until you come up with a sound that you like, without taking up a load of space. This allows you to create unique sound effects or instruments, that, when used well, almost sound like they're Amiga samples. + +Unfortunately, on chips like the HuC6280, you cannot use the wavetable synth to animate waveforms and have them sound smooth, as the chip resets the channel's phase when a waveform is changed while the channel is playing. On certain frequencies, this can be avoided, but not on most, unfortunately. diff --git a/papers/doc/6-sample/README.md b/papers/doc/6-sample/README.md index 87ddf0f8f..0c038fdb9 100644 --- a/papers/doc/6-sample/README.md +++ b/papers/doc/6-sample/README.md @@ -6,14 +6,25 @@ In Furnace, these samples can be generated by importing a .wav (think of it as a ## supported systems -As of Furnace 0.5.5, the following sound chips have sample support: - - NES/Ricoh 2A03 (PCM only, no DPCM, and only on channel 5) - - Sega Genesis/YM2612 (channel 6 only; but only if there exists a `1701` effect that gets played on or before a trigger for a sample) +As of Furnace 0.6, the following sound chips have sample support: + - NES/Ricoh 2A03 (with DPCM support and only on channel 5) + - Sega Genesis/YM2612 (channel 6 only; but only if there exists a `1701` effect that gets played on or before a trigger for a sample, or if you are using an instrument with Sample type) - PC Engine/TurboGrafx 16/Huc6280 (same conditions as above) - - Amiga/Paula (on all channels AND resamplable, but you need to make an instrument with the Amiga format and tie it to a sample first) - - Arcade/SEGA PCM (same as above but you don't need to make an instrument for it and you have to use the `20xx` effect command to resample your samples) - - Neo Geo/Neo Geo EXT-Ch2 (on the last 7 channels only and can be resampled the same way as above) - - Seta/Allumer X1-010 (same as above, and both `1701` and `20xx` effect commands are affected on all 16 channels) + - Amiga/Paula (on all channels) + - Arcade/SEGA PCM (same as above) + - Neo Geo/Neo Geo CD (on the last 7 channels (6 if you are using Neo Geo CD) only and can be resampled the same way as above) + - Seta/Allumer X1-010 (same as YM2612) + - Atari Lynx + - MSM6258 and MSM6295 + - YMU759/MA-2 (last channel only) + - QSound + - ZX Spectrum 48k + - RF5C68 + - WonderSwan + - Tildearrow Sound Unit + - VERA (last channel only) + - Y8590 (last channel only) + - And a few more that I've forgotten to mention. Furnace also has a feature where you can make an Amiga formarted instrument on the YM2612 and Huc6280 to resample a sample you have in the module. @@ -22,11 +33,12 @@ Furnace also has a feature where you can make an Amiga formarted instrument on t You can actually tweak your samples in Furnace's sample editor, which can be accessed by clicking on `window` (at the top of the screen) then clicking on `sample editor`. In there, you can modify certain data pertaining to your sample, such as the: - - volume of the sample (from 0% of the original to 200% of the original) - - pitch of the sample (from 1/6 of the original sample pitch to 6x the original sample pitch) - - and the sample rate of the sample (from 1KHz (1,000Hz) to 32KHz (32,000Hz)). + - volume of the sample in percentage, where 100% is the current level of the sample (note that you can distort it if you put it too high) + - the sample rate, from 0Hz (no sample movement) to 65535Hz (65.5kHz). + - what frequencies to filter, along with filter level/sweep and resonance options (much like the C64) + - and many more. -To apply the changes you made to a sample, just click the `apply` button at the bottom, near the preview button. +The changes you make will be applied as soon as you've committed them to your sample, but they can be undoed and redoed, just like text. # tips -If you have a sample you wanna use that is about 44100 or anything over 32000Hz downsample the sample to 32000Hz so that the pitch of the sample in Furnace stays like the original wav. You can do this in Audacity by going to the Bottom Left of audacity (If you see "Project Rate (Hz)" you are there) and changing the project rate to 32000Hz and save the file to wav in Audacity using "File -> Export -> Export as WAV". +If you have a sample you wanna use that is about 44100 or anything over 32000Hz, downsample the sample to 32000Hz so that the pitch of the sample in Furnace stays like the original audio file. You can do this in Audacity by going to the bottom left of the screen (If you see "Project Rate (Hz)" you are there), change the project rate to 32000Hz and save the file to wav in Audacity using "File -> Export -> Export as WAV". diff --git a/papers/doc/7-systems/README.md b/papers/doc/7-systems/README.md index fcf2e8860..6d428f3eb 100644 --- a/papers/doc/7-systems/README.md +++ b/papers/doc/7-systems/README.md @@ -22,6 +22,7 @@ this is a list of systems that Furnace supports, including each system's effects - [Philips SAA1099](saa1099.md) - [Microchip AY8930](ay8930.md) - [VERA](vera.md) +- [tildearrow Sound Unit](soundunit.md) - [Seta/Allumer X1-010](x1-010.md) - [WonderSwan](wonderswan.md) - [Bubble System WSG](bubblesystem.md) diff --git a/papers/doc/7-systems/soundunit.md b/papers/doc/7-systems/soundunit.md new file mode 100644 index 000000000..d9d0abd70 --- /dev/null +++ b/papers/doc/7-systems/soundunit.md @@ -0,0 +1,45 @@ +# tildearrow Sound Unit +This is a fantasy sound chip, used in the specs2 fantasy computer designed by tildearrow. It includes native support for sample playback, but with only 8KB of sample data. Since 0.6pre1, this sound chip is no longer hidden by default and can be accessed through the module creation screen and can be added or removed. + +# effects + +- `10xx`: set waveform + - 0: pulse wave + - 1: sawtooth + - 2: sine wave + - 3: triangle wave + - 4: noise + - 5: periodic noise + - 6: XOR sine + - 7: XOR triangle +- `12xx`: set waveform (0 to 7F) +- `13xx`: set resonance of filter (0 to FF) + - despite what the internal effects list says (0 to F), you can use a resonance value from 0 to FF (255) +- `14xx`: set filter mode and ringmod + - bit 0: ring mod + - bit 1: low pass + - bit 2: high pass + - bit 3: band pass +- `15xx`: set frequency sweep period low byte +- `16xx`: set frequency sweep period high byte +- `17xx`: set volume sweep period low byte +- `18xx`: set volume sweep period high byte +- `19xx`: set cutoff sweep period low byte +- `1Axx`: set cutoff sweep period low byte +- `1Bxx`: set frequency sweep boundary +- `1Cxx`: set volume sweep boundary +- `1Dxx`: set cutoff sweep boundary +- `1Exx`: set phase reset period low byte +- `1Fxx`: set phase reset period high byte +- `20xx`: toggle frequency sweep + - bit 0-6: speed + - bit 7: up direction +- `21xx`: toggle volume sweep + - bit 0-4: speed + - bit 5: up direction + - bit 6: loop + - bit 7: alternate +- `22xx`: toggle cutoff sweep + - bit 0-6: speed + - bit 7: up direction +- `4xxx`: set cutoff (0 to FFF) diff --git a/papers/doc/README.md b/papers/doc/README.md index 86e522a1b..771ea5f17 100644 --- a/papers/doc/README.md +++ b/papers/doc/README.md @@ -19,6 +19,7 @@ writers: - nicco1690 - DeMOSic - cam900 +- host12prog other: diff --git a/papers/format.md b/papers/format.md index 84239b3b9..bef8b1f81 100644 --- a/papers/format.md +++ b/papers/format.md @@ -25,10 +25,14 @@ the format has changed several times across versions. a `(>=VER)` indicates this furthermore, an `or reserved` indicates this field is always present, but is reserved when the version condition is not met. +the `size of this block` fields represent the size of a block excluding the ID and the aforementioned field. +these fields are 0 in format versions prior to 100 (0.6pre1). + # format versions the format versions are: +- 100: Furnace 0.6pre1 - 99: Furnace dev99 - 98: Furnace dev98 - 97: Furnace dev97 @@ -130,7 +134,7 @@ size | description size | description -----|------------------------------------ 4 | "INFO" block ID - 4 | reserved + 4 | size of this block 1 | time base (of first song) 1 | speed 1 (of first song) 1 | speed 2 (of first song) @@ -231,6 +235,8 @@ size | description | - 0xbc: reserved - 8 channels | - 0xbd: YM2612 extra features extended - 11 channels | - 0xbe: YM2612 extra features - 7 channels + | - 0xbf: T6W28 - 4 channels + | - 0xc0: PCM DAC - 1 channel | - 0xde: YM2610B extended - 19 channels | - 0xe0: QSound - 19 channels | - 0xfd: Dummy System - 8 channels @@ -300,7 +306,7 @@ size | description 1 | new ins affects envelope (Game Boy) (>=72) or reserved 1 | ExtCh channel state is shared (>=78) or reserved 1 | ignore DAC mode change outside of intended channel (>=83) or reserved - 1 | E1xx and E2xx also take priority over Slide00 (>=83) or reserved + 1 | E1xy and E2xy also take priority over Slide00 (>=83) or reserved 1 | new Sega PCM (with macros and proper vol/pan) (>=84) or reserved 1 | weird f-num/block-based chip pitch slides (>=85) or reserved 1 | SN duty macro always resets phase (>=86) or reserved @@ -311,7 +317,8 @@ size | description 1 | new volume scaling strategy (>=99) or reserved 1 | volume macro still applies after end (>=99) or reserved 1 | broken outVol (>=99) or reserved - 9 | reserved + 1 | E1xy and E2xy stop on same note (>=100) or reserved + 8 | reserved --- | **virtual tempo data** 2 | virtual tempo numerator of first song (>=96) or reserved 2 | virtual tempo denominator of first song (>=96) or reserved @@ -332,7 +339,7 @@ the way it's currently done is really weird, but it provides for some backwards size | description -----|------------------------------------ 4 | "SONG" block ID - 4 | reserved + 4 | size of this block 1 | time base 1 | speed 1 1 | speed 2 @@ -386,7 +393,7 @@ notes: size | description -----|------------------------------------ 4 | "INST" block ID - 4 | reserved + 4 | size of this block 2 | format version (see header) 1 | instrument type | - 0: standard @@ -795,7 +802,7 @@ size | description size | description -----|------------------------------------ 4 | "WAVE" block ID - 4 | reserved + 4 | size of this block STR | wavetable name 4 | wavetable size 4 | wavetable min @@ -809,7 +816,7 @@ size | description size | description -----|------------------------------------ 4 | "SMPL" block ID - 4 | reserved + 4 | size of this block STR | sample name 4 | length 4 | rate @@ -841,7 +848,7 @@ size | description size | description -----|------------------------------------ 4 | "PATR" block ID - 4 | reserved + 4 | size of this block 2 | channel 2 | pattern index 2 | subsong (>=95) or reserved diff --git a/papers/screenshot2.png b/papers/screenshot2.png new file mode 100644 index 000000000..afda65b29 Binary files /dev/null and b/papers/screenshot2.png differ diff --git a/res/Info.plist b/res/Info.plist index d9528b157..7b8d0120c 100644 --- a/res/Info.plist +++ b/res/Info.plist @@ -15,17 +15,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 0.6pre0 + 0.6pre1 CFBundleName Furnace CFBundlePackageType APPL CFBundleShortVersionString - 0.6pre0 + 0.6pre1 CFBundleSignature ???? CFBundleVersion - 0.6pre0 + 0.6pre1 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/res/furnace.appdata.xml b/res/furnace.appdata.xml index f53930487..2214cb10d 100644 --- a/res/furnace.appdata.xml +++ b/res/furnace.appdata.xml @@ -10,10 +10,13 @@

- this is a work-in-progress chiptune tracker which interacts with DefleMask module files (.dmf). + the biggest chiptune tracker ever made!

- it supports creating songs for Sega Genesis, Master System, Game Boy, PC Engine, NES, C64, YM2151/PCM and Neo Geo. featuring a clean-room design (zero reverse-engineered code and zero decompilation; using official DMF specs, guesswork and ABX tests only), bug/quirk implementation for increased playback accuracy, and accurate emulation cores whether possible (Nuked, MAME, SameBoy, Mednafen PCE, puNES, reSID and ymfm). + it allows you to create songs using a music tracker interface for several computer/game console/arcade sound chips. +

+

+ it also offers DefleMask compatibility, allowing you to import your songs and even export them back for interoperability.

diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 60e44e14a..8cefbd676 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -37,7 +37,7 @@ #endif #include #ifdef HAVE_SNDFILE -#include +#include "sfWrapper.h" #endif #include @@ -200,11 +200,12 @@ void DivEngine::runExportThread() { case DIV_EXPORT_MODE_ONE: { SNDFILE* sf; SF_INFO si; + SFWrapper sfWrap; si.samplerate=got.rate; si.channels=2; si.format=SF_FORMAT_WAV|SF_FORMAT_PCM_16; - sf=sf_open(exportPath.c_str(),SFM_WRITE,&si); + sf=sfWrap.doOpen(exportPath.c_str(),SFM_WRITE,&si); if (sf==NULL) { logE("could not open file for writing! (%s)",sf_strerror(NULL)); exporting=false; @@ -259,7 +260,7 @@ void DivEngine::runExportThread() { delete[] outBuf[1]; delete[] outBuf[2]; - if (sf_close(sf)!=0) { + if (sfWrap.doClose()!=0) { logE("could not close audio file!"); } exporting=false; @@ -280,6 +281,7 @@ void DivEngine::runExportThread() { SNDFILE* sf[32]; SF_INFO si[32]; String fname[32]; + SFWrapper sfWrap[32]; for (int i=0; i=chans) break; if (getChannelType(i)!=5) break; + i++; } i--; } @@ -1751,6 +1755,10 @@ bool DivEngine::isPlaying() { return (playing && !freelance); } +bool DivEngine::isRunning() { + return playing; +} + bool DivEngine::isStepping() { return !(stepPlay==0); } @@ -2200,8 +2208,9 @@ int DivEngine::addSampleFromFile(const char* path) { return -1; #else SF_INFO si; + SFWrapper sfWrap; memset(&si,0,sizeof(SF_INFO)); - SNDFILE* f=sf_open(path,SFM_READ,&si); + SNDFILE* f=sfWrap.doOpen(path,SFM_READ,&si); if (f==NULL) { BUSY_END; int err=sf_error(NULL); @@ -2214,7 +2223,7 @@ int DivEngine::addSampleFromFile(const char* path) { } if (si.frames>16777215) { lastError="this sample is too big! max sample size is 16777215."; - sf_close(f); + sfWrap.doClose(); BUSY_END; return -1; } @@ -2314,7 +2323,7 @@ int DivEngine::addSampleFromFile(const char* path) { if (sample->centerRate<4000) sample->centerRate=4000; if (sample->centerRate>64000) sample->centerRate=64000; - sf_close(f); + sfWrap.doClose(); saveLock.lock(); song.sample.push_back(sample); song.sampleLen=sampleCount+1; diff --git a/src/engine/engine.h b/src/engine/engine.h index 30e080421..5352746f3 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -45,8 +45,8 @@ #define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock(); #define BUSY_END isBusy.unlock(); softLocked=false; -#define DIV_VERSION "dev99" -#define DIV_ENGINE_VERSION 99 +#define DIV_VERSION "0.6pre1" +#define DIV_ENGINE_VERSION 100 // for imports #define DIV_VERSION_MOD 0xff01 @@ -88,7 +88,7 @@ struct DivChannelState { int tremoloDepth, tremoloRate, tremoloPos; unsigned char arp, arpStage, arpTicks, panL, panR; bool doNote, legato, portaStop, keyOn, keyOff, nowYouCanStop, stopOnOff; - bool arpYield, delayLocked, inPorta, scheduledSlideReset, shorthandPorta, noteOnInhibit, resetArp; + bool arpYield, delayLocked, inPorta, scheduledSlideReset, shorthandPorta, wasShorthandPorta, noteOnInhibit, resetArp; int midiNote, curMidiNote, midiPitch; size_t midiAge; @@ -136,6 +136,7 @@ struct DivChannelState { inPorta(false), scheduledSlideReset(false), shorthandPorta(false), + wasShorthandPorta(false), noteOnInhibit(false), resetArp(false), midiNote(-1), @@ -656,6 +657,9 @@ class DivEngine { // is playing bool isPlaying(); + + // is running + bool isRunning(); // is stepping bool isStepping(); diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index 3bc0b4912..e34cd33b5 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -171,6 +171,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ds.newVolumeScaling=false; ds.volMacroLinger=false; ds.brokenOutVol=true; // ??? + ds.e1e2StopOnSameNote=true; // 1.1 compat flags if (ds.version>24) { @@ -1043,6 +1044,9 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { ds.volMacroLinger=false; ds.brokenOutVol=true; } + if (ds.version<100) { + ds.e1e2StopOnSameNote=false; + } ds.isDMF=false; reader.readS(); // reserved @@ -1439,7 +1443,12 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { reader.readC(); reader.readC(); } - for (int i=0; i<9; i++) { + if (ds.version>=100) { + ds.e1e2StopOnSameNote=reader.readC(); + } else { + reader.readC(); + } + for (int i=0; i<8; i++) { reader.readC(); } } @@ -2709,7 +2718,7 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { std::vector wavePtr; std::vector samplePtr; std::vector patPtr; - size_t ptrSeek, subSongPtrSeek; + size_t ptrSeek, subSongPtrSeek, blockStartSeek, blockEndSeek; size_t subSongIndex=0; DivSubSong* subSong=song.subsong[subSongIndex]; warnings=""; @@ -2788,6 +2797,7 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { /// SONG INFO w->write("INFO",4); + blockStartSeek=w->tell(); w->writeI(0); w->writeC(subSong->timeBase); @@ -2924,7 +2934,8 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { w->writeC(song.newVolumeScaling); w->writeC(song.volMacroLinger); w->writeC(song.brokenOutVol); - for (int i=0; i<9; i++) { + w->writeC(song.e1e2StopOnSameNote); + for (int i=0; i<8; i++) { w->writeC(0); } @@ -2945,11 +2956,17 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { w->writeI(0); } + blockEndSeek=w->tell(); + w->seek(blockStartSeek,SEEK_SET); + w->writeI(blockEndSeek-blockStartSeek-4); + w->seek(0,SEEK_END); + /// SUBSONGS for (subSongIndex=1; subSongIndextell()); w->write("SONG",4); + blockStartSeek=w->tell(); w->writeI(0); w->writeC(subSong->timeBase); @@ -2992,6 +3009,11 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { for (int i=0; iwriteString(subSong->chanShortName[i],false); } + + blockEndSeek=w->tell(); + w->seek(blockStartSeek,SEEK_SET); + w->writeI(blockEndSeek-blockStartSeek-4); + w->seek(0,SEEK_END); } /// INSTRUMENT @@ -3013,6 +3035,7 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { DivSample* sample=song.sample[i]; samplePtr.push_back(w->tell()); w->write("SMPL",4); + blockStartSeek=w->tell(); w->writeI(0); w->writeString(sample->name,false); @@ -3025,6 +3048,11 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { w->writeI((sample->loopMode==DIV_SAMPLE_LOOPMODE_ONESHOT)?-1:sample->loopStart); w->write(sample->getCurBuf(),sample->getCurBufLen()); + + blockEndSeek=w->tell(); + w->seek(blockStartSeek,SEEK_SET); + w->writeI(blockEndSeek-blockStartSeek-4); + w->seek(0,SEEK_END); } /// PATTERN @@ -3032,6 +3060,7 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { DivPattern* pat=song.subsong[i.subsong]->pat[i.chan].getPattern(i.pat,false); patPtr.push_back(w->tell()); w->write("PATR",4); + blockStartSeek=w->tell(); w->writeI(0); w->writeS(i.chan); @@ -3049,6 +3078,11 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { } w->writeString(pat->name,false); + + blockEndSeek=w->tell(); + w->seek(blockStartSeek,SEEK_SET); + w->writeI(blockEndSeek-blockStartSeek-4); + w->seek(0,SEEK_END); } /// POINTERS diff --git a/src/engine/fileOpsIns.cpp b/src/engine/fileOpsIns.cpp index bf83a2dcf..b7ca22c1e 100644 --- a/src/engine/fileOpsIns.cpp +++ b/src/engine/fileOpsIns.cpp @@ -192,7 +192,13 @@ void DivEngine::loadDMP(SafeReader& reader, std::vector& ret, St ins->fm.ops=reader.readC()?4:2; } } else { - ins->fm.ops=reader.readC()?2:4; + // HELP + if (reader.size()==49) { + ins->fm.ops=4; + reader.readC(); + } else { + ins->fm.ops=reader.readC()?2:4; + } } } else { ins->fm.ops=4; @@ -835,8 +841,9 @@ void DivEngine::loadY12(SafeReader& reader, std::vector& ret, St DivInstrumentFM::Operator& insOp = ins->fm.op[i]; uint8_t tmp = reader.readC(); insOp.mult = tmp & 0xF; - insOp.dt = ((tmp >> 4) & 0x7); - insOp.tl = (reader.readC() & 0x3F); + // ??? + insOp.dt = ((3 + (tmp >> 4)) & 0x7); + insOp.tl = (reader.readC() & 0x7F); tmp = reader.readC(); insOp.rs = ((tmp >> 6) & 0x3); insOp.ar = tmp & 0x1F; diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 7e1492228..514c5673d 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -24,7 +24,10 @@ #include "../fileutils.h" void DivInstrument::putInsData(SafeWriter* w) { + size_t blockStartSeek, blockEndSeek; + w->write("INST",4); + blockStartSeek=w->tell(); w->writeI(0); w->writeS(DIV_ENGINE_VERSION); @@ -524,6 +527,11 @@ void DivInstrument::putInsData(SafeWriter* w) { for (int j=0; j<23; j++) { // reserved w->writeC(0); } + + blockEndSeek=w->tell(); + w->seek(blockStartSeek,SEEK_SET); + w->writeI(blockEndSeek-blockStartSeek-4); + w->seek(0,SEEK_END); } DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index 0aaad16d4..406d7281b 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -104,12 +104,14 @@ class DivPlatformOPN: public DivPlatformFMBase { double fmFreqBase; unsigned int fmDivBase; unsigned int ayDiv; + bool extSys; - DivPlatformOPN(double f=9440540.0, unsigned int d=72, unsigned int a=32): + DivPlatformOPN(double f=9440540.0, unsigned int d=72, unsigned int a=32, bool isExtSys=false): DivPlatformFMBase(), fmFreqBase(f), fmDivBase(d), - ayDiv(a) {} + ayDiv(a), + extSys(isExtSys) {} }; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 32052499b..cf7fb1013 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -344,13 +344,17 @@ void DivPlatformGenesis::acquire(short* bufL, short* bufR, size_t start, size_t } void DivPlatformGenesis::tick(bool sysTick) { - for (int i=0; i<6; i++) { + for (int i=0; i<(softPCM?7:6); i++) { if (i==2 && extMode) continue; chan[i].std.next(); if (chan[i].std.vol.had) { - chan[i].outVol=VOL_SCALE_LOG(chan[i].vol,MIN(127,chan[i].std.vol.val),127); - for (int j=0; j<4; j++) { + int inVol=chan[i].std.vol.val; + if (chan[i].furnaceDac && inVol>0) { + inVol+=63; + } + chan[i].outVol=VOL_SCALE_LOG(chan[i].vol,MIN(127,inVol),127); + if (i<6) for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; if (isMuted[i]) { @@ -383,7 +387,9 @@ void DivPlatformGenesis::tick(bool sysTick) { if (chan[i].std.panL.had) { chan[i].pan=chan[i].std.panL.val&3; - rWrite(chanOffs[i]+ADDR_LRAF,(IS_REALLY_MUTED(i)?0:(chan[i].pan<<6))|(chan[i].state.fms&7)|((chan[i].state.ams&3)<<4)); + if (i<6) { + rWrite(chanOffs[i]+ADDR_LRAF,(IS_REALLY_MUTED(i)?0:(chan[i].pan<<6))|(chan[i].state.fms&7)|((chan[i].state.ams&3)<<4)); + } } if (chan[i].std.pitch.had) { @@ -396,6 +402,8 @@ void DivPlatformGenesis::tick(bool sysTick) { chan[i].freqChanged=true; } + if (i>=6) continue; + if (chan[i].std.phaseReset.had) { if (chan[i].std.phaseReset.val==1 && chan[i].active) { chan[i].keyOn=true; @@ -640,9 +648,20 @@ int DivPlatformGenesis::dispatch(DivCommand c) { chan[c.chan].dacPeriod=0; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value,false); + chan[c.chan].portaPause=false; + chan[c.chan].note=c.value; chan[c.chan].freqChanged=true; } chan[c.chan].furnaceDac=true; + + chan[c.chan].macroInit(ins); + if (!chan[c.chan].std.vol.will) { + chan[c.chan].outVol=chan[c.chan].vol; + } + + // ??? + //chan[c.chan].keyOn=true; + chan[c.chan].active=true; } else { // compatible mode if (c.value!=DIV_NOTE_NULL) { chan[c.chan].note=c.value; @@ -893,6 +912,13 @@ int DivPlatformGenesis::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + if (extSys) { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + } + break; + } case DIV_CMD_FM_LFO: { if (c.chan>=6) break; lfoValue=(c.value&7)|((c.value>>4)<<3); diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index cd4d603c1..1c44bcfb9 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -34,6 +34,10 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { } int ch=c.chan-2; int ordch=orderedOps[ch]; + if (!extMode) { + c.chan=2; + return DivPlatformGenesis::dispatch(c); + } switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); @@ -173,6 +177,11 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { opChan[ch].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + break; + } case DIV_CMD_FM_LFO: { lfoValue=(c.value&7)|((c.value>>4)<<3); rWrite(0x22,lfoValue); @@ -489,7 +498,7 @@ void DivPlatformGenesisExt::forceIns() { for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; - if (i==2) { // extended channel + if (i==2 && extMode) { // extended channel if (isOpMuted[j]) { rWrite(baseAddr+0x40,127); } else if (isOutput[chan[i].state.alg][j]) { @@ -592,6 +601,7 @@ int DivPlatformGenesisExt::init(DivEngine* parent, int channels, int sugRate, un for (int i=0; i<4; i++) { isOpMuted[i]=false; } + extSys=true; reset(); return 13; diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index da760af7e..9373d0cd8 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -299,18 +299,39 @@ void DivPlatformOPL::acquire_nuked(short* bufL, short* bufR, size_t start, size_ } } - for (int i=0; idata[oscBuf[i]->needle]=0; - if (fm.channel[i].out[0]!=NULL) { - oscBuf[i]->data[oscBuf[i]->needle]+=*fm.channel[ch].out[0]; + if (fm.rhy&0x20) { + for (int i=0; idata[oscBuf[i]->needle]=0; + if (fm.channel[i].out[0]!=NULL) { + oscBuf[i]->data[oscBuf[i]->needle]+=*fm.channel[ch].out[0]; + } + if (fm.channel[i].out[1]!=NULL) { + oscBuf[i]->data[oscBuf[i]->needle]+=*fm.channel[ch].out[1]; + } + oscBuf[i]->data[oscBuf[i]->needle]<<=1; + oscBuf[i]->needle++; } - if (fm.channel[i].out[1]!=NULL) { - oscBuf[i]->data[oscBuf[i]->needle]+=*fm.channel[ch].out[1]; + // special + oscBuf[melodicChans+1]->data[oscBuf[melodicChans+1]->needle++]=fm.slot[16].out*6; + oscBuf[melodicChans+2]->data[oscBuf[melodicChans+2]->needle++]=fm.slot[14].out*6; + oscBuf[melodicChans+3]->data[oscBuf[melodicChans+3]->needle++]=fm.slot[17].out*6; + oscBuf[melodicChans+4]->data[oscBuf[melodicChans+4]->needle++]=fm.slot[13].out*6; + } else { + for (int i=0; idata[oscBuf[i]->needle]=0; + if (fm.channel[i].out[0]!=NULL) { + oscBuf[i]->data[oscBuf[i]->needle]+=*fm.channel[ch].out[0]; + } + if (fm.channel[i].out[1]!=NULL) { + oscBuf[i]->data[oscBuf[i]->needle]+=*fm.channel[ch].out[1]; + } + oscBuf[i]->data[oscBuf[i]->needle]<<=1; + oscBuf[i]->needle++; } - oscBuf[i]->data[oscBuf[i]->needle]<<=1; - oscBuf[i]->needle++; } if (os[0]<-32768) os[0]=-32768; @@ -601,8 +622,9 @@ void DivPlatformOPL::tick(bool sysTick) { if (chan[i].freqChanged) { chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,false,octave(chan[i].baseFreq)*2,chan[i].pitch2,chipClock,CHIP_FREQBASE); if (chan[i].fixedFreq>0) chan[i].freq=chan[i].fixedFreq; + if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>131071) chan[i].freq=131071; - int freqt=toFreq(chan[i].freq)+chan[i].pitch2; + int freqt=toFreq(chan[i].freq); chan[i].freqH=freqt>>8; chan[i].freqL=freqt&0xff; immWrite(chanMap[i]+ADDR_FREQ,chan[i].freqL); @@ -1517,7 +1539,7 @@ void DivPlatformOPL::reset() { } */ if (downsample) { - const unsigned int downsampledRate=(unsigned int)(49716.0*(double(rate)/chipRateBase)); + const unsigned int downsampledRate=(unsigned int)((double)rate*rate/chipRateBase); OPL3_Reset(&fm,downsampledRate); } else { OPL3_Reset(&fm,rate); @@ -1647,7 +1669,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { slots=drums?slotsDrums:slotsNonDrums; chanMap=drums?chanMapOPL2Drums:chanMapOPL2; outChanMap=outChanMapOPL2; - chipFreqBase=9440540*0.25; + chipFreqBase=32768*72; chans=9; melodicChans=drums?6:9; totalChans=drums?11:9; @@ -1661,7 +1683,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) { slots=drums?slotsDrums:slotsNonDrums; chanMap=drums?chanMapOPL3Drums:chanMapOPL3; outChanMap=outChanMapOPL3; - chipFreqBase=9440540; + chipFreqBase=32768*288; chans=18; melodicChans=drums?15:18; totalChans=drums?20:18; @@ -1713,9 +1735,6 @@ void DivPlatformOPL::setFlags(unsigned int flags) { default: case 1: case 2: case 8950: switch (flags&0xff) { - case 0x00: - chipClock=COLOR_NTSC; - break; case 0x01: chipClock=COLOR_PAL*4.0/5.0; break; @@ -1731,15 +1750,15 @@ void DivPlatformOPL::setFlags(unsigned int flags) { case 0x05: chipClock=3500000.0; break; + default: + chipClock=COLOR_NTSC; + break; } rate=chipClock/72; - chipRateBase=double(rate); + chipRateBase=rate; break; case 3: switch (flags&0xff) { - case 0x00: - chipClock=COLOR_NTSC*4.0; - break; case 0x01: chipClock=COLOR_PAL*16.0/5.0; break; @@ -1752,33 +1771,36 @@ void DivPlatformOPL::setFlags(unsigned int flags) { case 0x04: chipClock=15000000.0; break; + default: + chipClock=COLOR_NTSC*4.0; + break; } rate=chipClock/288; - chipRateBase=double(rate); + chipRateBase=rate; break; case 4: switch (flags&0xff) { - case 0x02: - chipClock=33868800.0; - break; - case 0x00: - chipClock=COLOR_NTSC*8.0; - break; case 0x01: chipClock=COLOR_PAL*32.0/5.0; break; + case 0x02: + chipClock=33868800.0; + break; + default: + chipClock=COLOR_NTSC*8.0; + break; } - chipRateBase=double(chipClock)/684.0; rate=chipClock/768; + chipRateBase=chipClock/684; break; case 759: rate=48000; - chipRateBase=double(rate); + chipRateBase=rate; chipClock=rate*288; break; } - for (int i=0; i<18; i++) { + for (int i=0; i<20; i++) { oscBuf[i]->rate=rate; } } @@ -1829,7 +1851,7 @@ int DivPlatformOPL::init(DivEngine* p, int channels, int sugRate, unsigned int f for (int i=0; i<20; i++) { isMuted[i]=false; } - for (int i=0; i<18; i++) { + for (int i=0; i<20; i++) { oscBuf[i]=new DivDispatchOscBuffer; } setFlags(flags); @@ -1847,7 +1869,7 @@ int DivPlatformOPL::init(DivEngine* p, int channels, int sugRate, unsigned int f } void DivPlatformOPL::quit() { - for (int i=0; i<18; i++) { + for (int i=0; i<20; i++) { delete oscBuf[i]; } if (adpcmChan>=0) { diff --git a/src/engine/platform/opl.h b/src/engine/platform/opl.h index 5e8294c37..3d6497367 100644 --- a/src/engine/platform/opl.h +++ b/src/engine/platform/opl.h @@ -75,7 +75,7 @@ class DivPlatformOPL: public DivDispatch { } }; Channel chan[20]; - DivDispatchOscBuffer* oscBuf[18]; + DivDispatchOscBuffer* oscBuf[20]; bool isMuted[20]; struct QueuedWrite { unsigned short addr; @@ -95,7 +95,7 @@ class DivPlatformOPL: public DivDispatch { const unsigned char** slots; const unsigned short* chanMap; const unsigned char* outChanMap; - double chipFreqBase, chipRateBase; + int chipFreqBase, chipRateBase; int delay, chipType, oplType, chans, melodicChans, totalChans, adpcmChan, sampleBank; unsigned char lastBusy; unsigned char drumState; diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 6d77ca1f7..08292be68 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -97,6 +97,10 @@ const unsigned char drumSlot[11]={ 0, 0, 0, 0, 0, 0, 6, 7, 8, 8, 7 }; +const unsigned char visMapOPLL[9]={ + 6, 7, 8, 3, 4, 5, 0, 1, 2 +}; + void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) { static int o[2]; static int os; @@ -124,10 +128,18 @@ void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size OPLL_Clock(&fm,o); unsigned char nextOut=cycleMapOPLL[fm.cycles]; if ((nextOut>=6 && properDrums) || !isMuted[nextOut]) { - oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=(o[0]+o[1])<<6; os+=(o[0]+o[1]); + if (vrc7 || (fm.rm_enable&0x20)) oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=(o[0]+o[1])<<6; } else { - oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=0; + if (vrc7 || (fm.rm_enable&0x20)) oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=0; + } + } + if (!(vrc7 || (fm.rm_enable&0x20))) for (int i=0; i<9; i++) { + unsigned char ch=visMapOPLL[i]; + if ((i>=6 && properDrums) || !isMuted[ch]) { + oscBuf[ch]->data[oscBuf[ch]->needle++]=(fm.output_ch[i])<<6; + } else { + oscBuf[ch]->data[oscBuf[ch]->needle++]=0; } } os*=50; diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 0556d2e45..f16d53351 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -48,12 +48,15 @@ const char* DivPlatformSMS::getEffectName(unsigned char effect) { } void DivPlatformSMS::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) { - int o=0; + int oL=0; + int oR=0; for (size_t h=start; h32767) o=32767; - bufL[h]=bufR[h]=o; + YMPSG_GetOutput(&sn_nuked,&oL,&oR); + if (oL<-32768) oL=-32768; + if (oL>32767) oL=32767; + if (oR<-32768) oR=-32768; + if (oR>32767) oR=32767; + bufL[h]=oL; + bufR[h]=oR; for (int i=0; i<4; i++) { if (isMuted[i]) { oscBuf[i]->data[oscBuf[i]->needle++]=0; diff --git a/src/engine/platform/sound/vera_psg.c b/src/engine/platform/sound/vera_psg.c index 19f15d4eb..fe1cf6b39 100644 --- a/src/engine/platform/sound/vera_psg.c +++ b/src/engine/platform/sound/vera_psg.c @@ -20,8 +20,8 @@ void psg_reset(struct VERA_PSG* psg) { memset(psg->channels, 0, sizeof(psg->channels)); - psg->noiseState=1; - psg->noiseOut=0; + psg->noiseOut = 0; + psg->noiseState = 1; } void @@ -54,10 +54,14 @@ render(struct VERA_PSG* psg, int16_t *left, int16_t *right) { int l = 0; int r = 0; - psg->noiseOut=((psg->noiseOut<<1)|(psg->noiseState&1))&63; - psg->noiseState=(psg->noiseState<<1)|(((psg->noiseState>>1)^(psg->noiseState>>2)^(psg->noiseState>>4)^(psg->noiseState>>15))&1); for (int i = 0; i < 16; i++) { + // In FPGA implementation, noise values are generated every system clock and + // the channel update is run sequentially. So, even if both two channels are + // fetching a noise value in the same sample, they should have different values + psg->noiseOut = ((psg->noiseOut << 1) | (psg->noiseState & 1)) & 63; + psg->noiseState = (psg->noiseState << 1) | (((psg->noiseState >> 1) ^ (psg->noiseState >> 2) ^ (psg->noiseState >> 4) ^ (psg->noiseState >> 15)) & 1); + struct VERAChannel *ch = &psg->channels[i]; unsigned new_phase = (ch->phase + ch->freq) & 0x1FFFF; @@ -87,11 +91,11 @@ render(struct VERA_PSG* psg, int16_t *left, int16_t *right) r += val; } - if (ch->left || ch->right) { - ch->lastOut=val; - } else { - ch->lastOut=0; - } + if (ch->left || ch->right) { + ch->lastOut = val; + } else { + ch->lastOut = 0; + } } *left = l; @@ -104,6 +108,6 @@ psg_render(struct VERA_PSG* psg, int16_t *bufL, int16_t *bufR, unsigned num_samp while (num_samples--) { render(psg, bufL, bufR); bufL++; - bufR++; + bufR++; } } diff --git a/src/engine/platform/su.cpp b/src/engine/platform/su.cpp index 33a98a7e3..e62c4ed84 100644 --- a/src/engine/platform/su.cpp +++ b/src/engine/platform/su.cpp @@ -74,10 +74,10 @@ const char* DivPlatformSoundUnit::getEffectName(unsigned char effect) { return "1Dxx: Set cutoff sweep boundary"; break; case 0x1e: - return "17xx: Set phase reset period low byte"; + return "1Exx: Set phase reset period low byte"; break; case 0x1f: - return "18xx: Set phase reset period high byte"; + return "1Fxx: Set phase reset period high byte"; break; case 0x20: return "20xx: Toggle frequency sweep (bit 0-6: speed; bit 7: direction is up)"; diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index e0bbe1a32..83c93c58e 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -659,6 +659,13 @@ int DivPlatformYM2203::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + if (extSys) { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + } + break; + } case DIV_CMD_FM_FB: { if (c.chan>2) break; chan[c.chan].state.fb=c.value&7; diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index d3fd3487b..3ff24eb74 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -34,6 +34,10 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { } int ch=c.chan-2; int ordch=orderedOps[ch]; + if (!extMode) { + c.chan=2; + return DivPlatformYM2203::dispatch(c); + } switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); @@ -151,6 +155,11 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { opChan[ch].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; @@ -514,6 +523,7 @@ int DivPlatformYM2203Ext::init(DivEngine* parent, int channels, int sugRate, uns for (int i=0; i<4; i++) { isOpMuted[i]=false; } + extSys=true; reset(); return 9; diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index e8f2aa659..c3cf52a06 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -988,6 +988,13 @@ int DivPlatformYM2608::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + if (extSys) { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + } + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 91c3a897f..63503ccc3 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -34,6 +34,10 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { } int ch=c.chan-2; int ordch=orderedOps[ch]; + if (!extMode) { + c.chan=2; + return DivPlatformYM2608::dispatch(c); + } switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); @@ -151,6 +155,11 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { opChan[ch].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; @@ -528,6 +537,7 @@ int DivPlatformYM2608Ext::init(DivEngine* parent, int channels, int sugRate, uns for (int i=0; i<4; i++) { isOpMuted[i]=false; } + extSys=true; reset(); return 19; diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index cfb26d55a..5a90280c4 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -1032,6 +1032,13 @@ int DivPlatformYM2610::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + if (extSys) { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + } + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index af2ff2211..15c7fcc5f 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -1014,6 +1014,13 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + if (extSys) { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + } + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index b5e1ac9fb..7c8247ff8 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -34,6 +34,10 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { } int ch=c.chan-2; int ordch=orderedOps[ch]; + if (!extMode) { + c.chan=2; + return DivPlatformYM2610B::dispatch(c); + } switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); @@ -151,6 +155,11 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { opChan[ch].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; @@ -427,7 +436,7 @@ void DivPlatformYM2610BExt::forceIns() { for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; - if (i==2) { // extended channel + if (i==2 && extMode) { // extended channel if (isOpMuted[j]) { rWrite(baseAddr+0x40,127); } else if (isOutput[chan[i].state.alg][j]) { @@ -528,6 +537,7 @@ int DivPlatformYM2610BExt::init(DivEngine* parent, int channels, int sugRate, un for (int i=0; i<4; i++) { isOpMuted[i]=false; } + extSys=true; reset(); return 19; diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index 6f9c8700d..b2bd06a8c 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -34,6 +34,10 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { } int ch=c.chan-1; int ordch=orderedOps[ch]; + if (!extMode) { + c.chan=2; + return DivPlatformYM2610::dispatch(c); + } switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); @@ -151,6 +155,11 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { opChan[ch].freqChanged=true; break; } + case DIV_CMD_FM_EXTCH: { + extMode=c.value; + immWrite(0x27,extMode?0x40:0); + break; + } case DIV_CMD_FM_LFO: { rWrite(0x22,(c.value&7)|((c.value>>4)<<3)); break; @@ -427,7 +436,7 @@ void DivPlatformYM2610Ext::forceIns() { for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; - if (i==1) { // extended channel + if (i==1 && extMode) { // extended channel if (isOpMuted[j]) { rWrite(baseAddr+0x40,127); } else if (isOutput[chan[i].state.alg][j]) { @@ -528,6 +537,7 @@ int DivPlatformYM2610Ext::init(DivEngine* parent, int channels, int sugRate, uns for (int i=0; i<4; i++) { isOpMuted[i]=false; } + extSys=true; reset(); return 17; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index e5d9fde2d..853955e8b 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -24,9 +24,6 @@ #include "engine.h" #include "../ta-log.h" #include -#ifdef HAVE_SNDFILE -#include -#endif constexpr int MASTER_CLOCK_PREC=(sizeof(void*)==8)?8:0; @@ -473,6 +470,7 @@ void DivEngine::processRow(int i, bool afterDelay) { chan[i].nowYouCanStop=false; chan[i].stopOnOff=false; chan[i].scheduledSlideReset=false; + chan[i].wasShorthandPorta=false; chan[i].inPorta=false; if (!song.arpNonPorta) dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,true,0)); } @@ -492,6 +490,7 @@ void DivEngine::processRow(int i, bool afterDelay) { chan[i].nowYouCanStop=false; chan[i].stopOnOff=false; chan[i].scheduledSlideReset=false; + chan[i].wasShorthandPorta=false; chan[i].inPorta=false; if (!song.arpNonPorta) dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,true,0)); } @@ -511,6 +510,7 @@ void DivEngine::processRow(int i, bool afterDelay) { chan[i].portaNote=chan[i].note; chan[i].portaSpeed=effectVal; chan[i].inPorta=true; + chan[i].wasShorthandPorta=false; } chan[i].portaStop=true; if (chan[i].keyOn) chan[i].doNote=false; @@ -590,6 +590,7 @@ void DivEngine::processRow(int i, bool afterDelay) { if ((effectVal&15)!=0) { chan[i].inPorta=true; chan[i].shorthandPorta=true; + chan[i].wasShorthandPorta=true; if (!song.brokenShortcutSlides) dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,true,0)); if (song.e1e2AlsoTakePriority) lastSlide=0x1337; // ... } else { @@ -607,6 +608,7 @@ void DivEngine::processRow(int i, bool afterDelay) { if ((effectVal&15)!=0) { chan[i].inPorta=true; chan[i].shorthandPorta=true; + chan[i].wasShorthandPorta=true; if (!song.brokenShortcutSlides) dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,true,0)); if (song.e1e2AlsoTakePriority) lastSlide=0x1337; // ... } else { @@ -733,7 +735,14 @@ void DivEngine::processRow(int i, bool afterDelay) { dispatchCmd(DivCommand(DIV_CMD_LEGATO,i,chan[i].note)); } else { if (chan[i].inPorta && chan[i].keyOn && !chan[i].shorthandPorta) { - chan[i].portaNote=chan[i].note; + if (song.e1e2StopOnSameNote && chan[i].wasShorthandPorta) { + chan[i].portaSpeed=-1; + if (!song.brokenShortcutSlides) dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,false,0)); + chan[i].wasShorthandPorta=false; + chan[i].inPorta=false; + } else { + chan[i].portaNote=chan[i].note; + } } else if (!chan[i].noteOnInhibit) { dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,i,chan[i].note,chan[i].volume>>8)); keyHit[i]=true; diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index b5028c9eb..a4bb5cd36 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -22,7 +22,7 @@ #include #include #ifdef HAVE_SNDFILE -#include +#include "sfWrapper.h" #endif #include "filter.h" @@ -49,6 +49,7 @@ bool DivSample::save(const char* path) { #else SNDFILE* f; SF_INFO si; + SFWrapper sfWrap; memset(&si,0,sizeof(SF_INFO)); if (length16<1) return false; @@ -64,7 +65,7 @@ bool DivSample::save(const char* path) { break; } - f=sf_open(path,SFM_WRITE,&si); + f=sfWrap.doOpen(path,SFM_WRITE,&si); if (f==NULL) { logE("could not open wave file for saving! %s",sf_error_number(sf_error(f))); @@ -104,7 +105,7 @@ bool DivSample::save(const char* path) { break; } - sf_close(f); + sfWrap.doClose(); return true; #endif diff --git a/src/engine/sfWrapper.cpp b/src/engine/sfWrapper.cpp new file mode 100644 index 000000000..f12dc95be --- /dev/null +++ b/src/engine/sfWrapper.cpp @@ -0,0 +1,121 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2022 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "sfWrapper.h" +#include "../fileutils.h" +#include "sndfile.h" + +sf_count_t _vioGetSize(void* user) { + return ((SFWrapper*)user)->ioGetSize(); +} + +sf_count_t _vioSeek(sf_count_t offset, int whence, void* user) { + return ((SFWrapper*)user)->ioSeek(offset,whence); +} + +sf_count_t _vioRead(void* ptr, sf_count_t count, void* user) { + return ((SFWrapper*)user)->ioRead(ptr,count); +} + +sf_count_t _vioWrite(const void* ptr, sf_count_t count, void* user) { + return ((SFWrapper*)user)->ioWrite(ptr,count); +} + +sf_count_t _vioTell(void* user) { + return ((SFWrapper*)user)->ioTell(); +} + +sf_count_t SFWrapper::ioGetSize() { + sf_count_t ret=(sf_count_t)len; + if (fileMode==SFM_WRITE || fileMode==SFM_RDWR) { + ssize_t lastTell=ftell(f); + fseek(f,0,SEEK_END); + ret=(sf_count_t)ftell(f); + fseek(f,lastTell,SEEK_SET); + } + return ret; +} + +sf_count_t SFWrapper::ioSeek(sf_count_t offset, int whence) { + return fseek(f,offset,whence); +} + +sf_count_t SFWrapper::ioRead(void* ptr, sf_count_t count) { + return fread(ptr,1,count,f); +} + +sf_count_t SFWrapper::ioWrite(const void* ptr, sf_count_t count) { + return fwrite(ptr,1,count,f); +} + +sf_count_t SFWrapper::ioTell() { + return ftell(f); +} + +int SFWrapper::doClose() { + int ret=sf_close(sf); + fclose(f); + return ret; +} + +SNDFILE* SFWrapper::doOpen(const char* path, int mode, SF_INFO* sfinfo) { + vio.get_filelen=_vioGetSize; + vio.read=_vioRead; + vio.seek=_vioSeek; + vio.tell=_vioTell; + vio.write=_vioWrite; + + const char* modeC="rb"; + if (mode==SFM_WRITE) { + modeC="wb"; + } + if (mode==SFM_RDWR) { + modeC="rb+"; + } + + f=ps_fopen(path,modeC); + if (f==NULL) { + return NULL; + } + + if (fseek(f,0,SEEK_END)==-1) { + fclose(f); + f=NULL; + return NULL; + } + + len=ftell(f); + if (len==(SIZE_MAX>>1)) { + len=0; + fclose(f); + f=NULL; + return NULL; + } + + if (fseek(f,0,SEEK_SET)==-1) { + len=0; + fclose(f); + f=NULL; + return NULL; + } + + sf=sf_open_virtual(&vio,mode,sfinfo,this); + if (sf!=NULL) fileMode=mode; + return sf; +} \ No newline at end of file diff --git a/src/engine/sfWrapper.h b/src/engine/sfWrapper.h new file mode 100644 index 000000000..6e984a454 --- /dev/null +++ b/src/engine/sfWrapper.h @@ -0,0 +1,56 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2022 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +// sfWrapper.h: libsndfile FILE* wrapper to work around Windows issue with +// non-ASCII chars in file path +// I wanted to do this in sndfile directly, but it's a +// submodule... + +#ifndef _SFWRAPPER_H +#define _SFWRAPPER_H +#include +#include +#include +#include +#include "../ta-utils.h" + +class SFWrapper { + FILE* f; + size_t len; + SF_VIRTUAL_IO vio; + SNDFILE* sf; + int fileMode; + + public: + sf_count_t ioGetSize(); + sf_count_t ioSeek(sf_count_t offset, int whence); + sf_count_t ioRead(void* ptr, sf_count_t count); + sf_count_t ioWrite(const void* ptr, sf_count_t count); + sf_count_t ioTell(); + + int doClose(); + SNDFILE* doOpen(const char* path, int mode, SF_INFO* sfinfo); + SFWrapper(): + f(NULL), + len(0), + sf(NULL), + fileMode(0) {} +}; + +#endif diff --git a/src/engine/song.h b/src/engine/song.h index b8af10304..b7cc8b60d 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -114,6 +114,8 @@ enum DivSystem { DIV_SYSTEM_YM2612_FRAC, DIV_SYSTEM_YM2612_FRAC_EXT, DIV_SYSTEM_RESERVED_8, + DIV_SYSTEM_T6W28, + DIV_SYSTEM_PCM_DAC, DIV_SYSTEM_DUMMY, DIV_SYSTEM_MAX // boundary for max system number }; @@ -495,6 +497,7 @@ struct DivSong { bool newVolumeScaling; bool volMacroLinger; bool brokenOutVol; + bool e1e2StopOnSameNote; std::vector ins; std::vector wave; @@ -592,7 +595,8 @@ struct DivSong { noOPN2Vol(false), newVolumeScaling(true), volMacroLinger(true), - brokenOutVol(false) { + brokenOutVol(false), + e1e2StopOnSameNote(false) { for (int i=0; i<32; i++) { system[i]=DIV_SYSTEM_NULL; systemVol[i]=64; diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 6409f7789..34f887ba0 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2160,6 +2160,35 @@ void DivEngine::registerSystems() { fmPostEffectHandler ); + sysDefs[DIV_SYSTEM_T6W28]=new DivSysDef( + "T6W28", NULL, 0xbf, 0, 4, false, true, 0, false, + "an SN76489 derivative used in Neo Geo Pocket, has independent stereo volume and noise channel frequency.", + {"Square 1", "Square 2", "Square 3", "Noise"}, + {"S1", "S2", "S3", "NO"}, + {DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_NOISE}, + {DIV_INS_STD, DIV_INS_STD, DIV_INS_STD, DIV_INS_STD}, + {}, + [this](int ch, unsigned char effect, unsigned char effectVal) -> bool { + switch (effect) { + case 0x20: // SN noise mode + dispatchCmd(DivCommand(DIV_CMD_STD_NOISE_MODE,ch,effectVal)); + break; + default: + return false; + } + return true; + } + ); + + sysDefs[DIV_SYSTEM_PCM_DAC]=new DivSysDef( + "Generic PCM DAC", NULL, 0xc0, 0, 1, false, true, 0, false, + "as generic sample playback as it gets.", + {"Sample"}, + {"PCM"}, + {DIV_CH_PCM}, + {DIV_INS_AMIGA} + ); + sysDefs[DIV_SYSTEM_DUMMY]=new DivSysDef( "Dummy System", NULL, 0xfd, 0, 8, false, true, 0, false, "this is a system designed for testing purposes.", diff --git a/src/engine/wavetable.cpp b/src/engine/wavetable.cpp index db6c33b2d..953400ee1 100644 --- a/src/engine/wavetable.cpp +++ b/src/engine/wavetable.cpp @@ -24,7 +24,10 @@ #include "../fileutils.h" void DivWavetable::putWaveData(SafeWriter* w) { + size_t blockStartSeek, blockEndSeek; + w->write("WAVE",4); + blockStartSeek=w->tell(); w->writeI(0); w->writeC(0); // name @@ -34,6 +37,11 @@ void DivWavetable::putWaveData(SafeWriter* w) { for (int j=0; jwriteI(data[j]); } + + blockEndSeek=w->tell(); + w->seek(blockStartSeek,SEEK_SET); + w->writeI(blockEndSeek-blockStartSeek-4); + w->seek(0,SEEK_END); } DivDataErrors DivWavetable::readWaveData(SafeReader& reader, short version) { diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 27e5f6116..70e09e727 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -108,9 +108,10 @@ const char* aboutLine[]={ "Portable File Dialogs by Sam Hocevar", "Native File Dialog by Frogtoss Games", "RtMidi by Gary P. Scavone", + "FFTW by Matteo Frigo and Steven G. Johnson", "backward-cpp by Google", "adpcm by superctr", - "Nuked-OPL3/OPLL/OPM/OPN2 by Nuke.YKT", + "Nuked-OPL3/OPLL/OPM/OPN2/PSG by Nuke.YKT", "ymfm by Aaron Giles", "MAME SN76496 by Nicola Salmoria", "MAME AY-3-8910 by Couriersud", @@ -131,7 +132,7 @@ const char* aboutLine[]={ "VICE VIC-20 sound core by Rami Rasanen and viznut", "VERA sound core by Frank van den Hoef", "K005289 emulator by cam900", - "Namco 163 emulator by cam900", + "Namco C163 emulator by cam900", "Seta X1-010 emulator by cam900", "Konami VRC6 emulator by cam900", "Konami SCC emulator by cam900", diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index da82de277..547e59a17 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -312,7 +312,7 @@ void FurnaceGUI::drawChanOsc() { inRect.Max.y-=dpiScale; ImGui::ItemSize(size,style.FramePadding.y); if (ImGui::ItemAdd(rect,ImGui::GetID("chOscDisplay"))) { - if (!e->isPlaying()) { + if (!e->isRunning()) { for (unsigned short i=0; i<512; i++) { float x=(float)i/512.0f; waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f)); diff --git a/src/gui/compatFlags.cpp b/src/gui/compatFlags.cpp index d15f1722e..8e5d75172 100644 --- a/src/gui/compatFlags.cpp +++ b/src/gui/compatFlags.cpp @@ -115,6 +115,10 @@ void FurnaceGUI::drawCompatFlags() { if (ImGui::IsItemHovered()) { ImGui::SetTooltip("does this make any sense by now?"); } + ImGui::Checkbox("E1xy/E2xy stop when repeating the same note",&e->song.e1e2StopOnSameNote); + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("ugh, if only this wasn't a thing..."); + } ImGui::Checkbox("SN76489 duty macro always resets phase",&e->song.snDutyReset); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("when enabled, duty macro will always reset phase, even if its value hasn't changed."); diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index f9d4ac4dd..f64f72cbb 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -148,6 +148,8 @@ bool FurnaceGUIFileDialog::render(const ImVec2& min, const ImVec2& max) { #ifdef USE_NFD if (dialogOK) { fileName=nfdResult; + size_t dsPos=fileName.rfind(DIR_SEPARATOR); + if (dsPos!=String::npos) curPath=fileName.substr(0,dsPos); logD("returning %s",fileName.c_str()); dialogOK=false; return true; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index bc309bc4a..642572d38 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -2888,7 +2888,7 @@ bool FurnaceGUI::loop() { ImGui::Separator(); if (ImGui::BeginMenu("add system...")) { for (int j=0; availableSystems[j]; j++) { - if (!settings.hiddenSystems && (availableSystems[j]==DIV_SYSTEM_YMU759 || availableSystems[j]==DIV_SYSTEM_DUMMY || availableSystems[j]==DIV_SYSTEM_SOUND_UNIT)) continue; + if (!settings.hiddenSystems && (availableSystems[j]==DIV_SYSTEM_YMU759 || availableSystems[j]==DIV_SYSTEM_DUMMY)) continue; sysAddOption((DivSystem)availableSystems[j]); } ImGui::EndMenu(); @@ -2907,7 +2907,7 @@ bool FurnaceGUI::loop() { for (int i=0; isong.systemLen; i++) { if (ImGui::BeginMenu(fmt::sprintf("%d. %s##_SYSC%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { for (int j=0; availableSystems[j]; j++) { - if (!settings.hiddenSystems && (availableSystems[j]==DIV_SYSTEM_YMU759 || availableSystems[j]==DIV_SYSTEM_DUMMY || availableSystems[j]==DIV_SYSTEM_SOUND_UNIT)) continue; + if (!settings.hiddenSystems && (availableSystems[j]==DIV_SYSTEM_YMU759 || availableSystems[j]==DIV_SYSTEM_DUMMY)) continue; sysChangeOption(i,(DivSystem)availableSystems[j]); } ImGui::EndMenu(); diff --git a/src/gui/gui.h b/src/gui/gui.h index e91a5bf6c..a90e89e0c 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1087,6 +1087,7 @@ class FurnaceGUI { int doubleClickColumn; int blankIns; int dragMovesSelection; + int unsignedDetune; unsigned int maxUndoSteps; String mainFontPath; String patFontPath; @@ -1188,6 +1189,7 @@ class FurnaceGUI { doubleClickColumn(1), blankIns(0), dragMovesSelection(1), + unsignedDetune(0), maxUndoSteps(100), mainFontPath(""), patFontPath(""), diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index b3d9de5a9..86ca8d2a0 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -1957,11 +1957,11 @@ void FurnaceGUI::drawInsEdit() { } if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { - int detune=(op.dt&7)-3; + int detune=(op.dt&7)-(settings.unsignedDetune?0:3); ImGui::TableNextColumn(); CENTER_VSLIDER; if (CWVSliderInt("##DT",ImVec2(20.0f*dpiScale,sliderHeight),&detune,-3,4)) { PARAMETER - op.dt=detune+3; + op.dt=detune+(settings.unsignedDetune?0:3); } ImGui::TableNextColumn(); @@ -2287,11 +2287,11 @@ void FurnaceGUI::drawInsEdit() { snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable - int detune=(op.dt&7)-3; + int detune=(op.dt&7)-(settings.unsignedDetune?0:3); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT)); if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER - op.dt=detune+3; + op.dt=detune+(settings.unsignedDetune?0:3); } rightClickable ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -2348,6 +2348,7 @@ void FurnaceGUI::drawInsEdit() { break; case DIV_INS_OPL: + case DIV_INS_OPL_DRUMS: // waveform drawWaveform(op.ws&7,ins->type==DIV_INS_OPZ,ImVec2(waveWidth,waveHeight)); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); @@ -2431,11 +2432,11 @@ void FurnaceGUI::drawInsEdit() { snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_MULT)); P(CWSliderScalar("##MULT",ImGuiDataType_U8,&op.mult,&_ZERO,&_FIFTEEN,tempID)); rightClickable - int detune=(op.dt&7)-3; + int detune=(op.dt&7)-(settings.unsignedDetune?0:3); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); snprintf(tempID,1024,"%s: %%d",FM_NAME(FM_DT)); if (CWSliderInt("##DT",&detune,-3,4,tempID)) { PARAMETER - op.dt=detune+3; + op.dt=detune+(settings.unsignedDetune?0:3); } rightClickable } @@ -2728,12 +2729,12 @@ void FurnaceGUI::drawInsEdit() { ImGui::Text("%s",FM_NAME(FM_MULT)); if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ) { - int detune=(op.dt&7)-3; + int detune=(op.dt&7)-(settings.unsignedDetune?0:3); ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (CWSliderInt("##DT",&detune,-3,4)) { PARAMETER - op.dt=detune+3; + op.dt=detune+(settings.unsignedDetune?0:3); } rightClickable ImGui::TableNextColumn(); ImGui::Text("%s",FM_NAME(FM_DT)); @@ -3705,7 +3706,7 @@ void FurnaceGUI::drawInsEdit() { if ((ins->type==DIV_INS_PCE || ins->type==DIV_INS_AY8930)) { volMax=31; } - if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_VERA || ins->type==DIV_INS_VRC6_SAW) { + if (ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_VERA || ins->type==DIV_INS_VRC6_SAW) { volMax=63; } if (ins->type==DIV_INS_AMIGA) { @@ -3770,7 +3771,7 @@ void FurnaceGUI::drawInsEdit() { dutyLabel="Noise"; dutyMax=8; } - if (ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPL || ins->type==DIV_INS_VRC6_SAW || ins->type==DIV_INS_FDS || ins->type==DIV_INS_MULTIPCM) { + if (ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_VRC6_SAW || ins->type==DIV_INS_FDS || ins->type==DIV_INS_MULTIPCM) { dutyMax=0; } if (ins->type==DIV_INS_VERA) { @@ -3803,7 +3804,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_TIA || ins->type==DIV_INS_VIC || ins->type==DIV_INS_OPLL) waveMax=15; if (ins->type==DIV_INS_C64) waveMax=4; if (ins->type==DIV_INS_SAA1099) waveMax=2; - if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPZ) waveMax=0; + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPZ) waveMax=0; if (ins->type==DIV_INS_MIKEY) waveMax=0; if ((ins->type==DIV_INS_AMIGA && !ins->amiga.useWave) || ins->type==DIV_INS_ES5506) { if (ins->amiga.transWave.enable) { @@ -3879,6 +3880,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_STD ||//Game Gear ins->type==DIV_INS_FM || ins->type==DIV_INS_OPL || + ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_GB || ins->type==DIV_INS_OPZ || ins->type==DIV_INS_VERA) { @@ -3947,6 +3949,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_FM || ins->type==DIV_INS_STD || ins->type==DIV_INS_OPL || + ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPZ || ins->type==DIV_INS_PCE || ins->type==DIV_INS_GB || diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index a29e9a625..ae24d9cba 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -496,13 +496,13 @@ void FurnaceGUI::initSystemPresets() { 0 } )); - cat.systems.push_back(FurnaceGUISysDef( - "tildearrow Sound Unit", { - DIV_SYSTEM_SOUND_UNIT, 64, 0, 0, - 0 - } - )); } + cat.systems.push_back(FurnaceGUISysDef( + "tildearrow Sound Unit", { + DIV_SYSTEM_SOUND_UNIT, 64, 0, 0, + 0 + } + )); sysCategories.push_back(cat); cat=FurnaceGUISysCategory("Game consoles","let's play some chiptune making games!"); @@ -1288,6 +1288,29 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System E", { + DIV_SYSTEM_SMS, 64, 0, 0, + DIV_SYSTEM_SMS, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System E (with FM expansion)", { + DIV_SYSTEM_SMS, 64, 0, 0, + DIV_SYSTEM_SMS, 64, 0, 0, + DIV_SYSTEM_OPLL, 64, 0, 0, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "Sega System E (with FM expansion in drums mode)", { + DIV_SYSTEM_SMS, 64, 0, 0, + DIV_SYSTEM_SMS, 64, 0, 0, + DIV_SYSTEM_OPLL_DRUMS, 64, 0, 0, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Sega Hang-On", { DIV_SYSTEM_OPN, 64, 0, 2, // 4MHz @@ -1814,6 +1837,34 @@ void FurnaceGUI::initSystemPresets() { 0 } )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Touchdown Fever", { + DIV_SYSTEM_OPL, 64, 0, 2, + DIV_SYSTEM_Y8950, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Touchdown Fever (drums mode on OPL)", { + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + DIV_SYSTEM_Y8950, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Touchdown Fever (drums mode on Y8950)", { + DIV_SYSTEM_OPL, 64, 0, 2, + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 2, + 0 + } + )); + cat.systems.push_back(FurnaceGUISysDef( + "SNK Touchdown Fever (drums mode on OPL and Y8950)", { + DIV_SYSTEM_OPL_DRUMS, 64, 0, 2, + DIV_SYSTEM_Y8950_DRUMS, 64, 0, 2, + 0 + } + )); cat.systems.push_back(FurnaceGUISysDef( "Alpha denshi Alpha-68K", { DIV_SYSTEM_OPN, 64, 0, 3, // 3MHz diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index bdcc2de80..cb2064e62 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1197,6 +1197,11 @@ void FurnaceGUI::drawSettings() { if (ImGui::Checkbox("Use German notation",&germanNotationB)) { settings.germanNotation=germanNotationB; } + + bool unsignedDetuneB=settings.unsignedDetune; + if (ImGui::Checkbox("Unsigned FM detune values",&unsignedDetuneB)) { + settings.unsignedDetune=unsignedDetuneB; + } // sorry. temporarily disabled until ImGui has a way to add separators in tables arbitrarily. /*bool sysSeparatorsB=settings.sysSeparators; @@ -2049,6 +2054,7 @@ void FurnaceGUI::syncSettings() { settings.doubleClickColumn=e->getConfInt("doubleClickColumn",1); settings.blankIns=e->getConfInt("blankIns",0); settings.dragMovesSelection=e->getConfInt("dragMovesSelection",2); + settings.unsignedDetune=e->getConfInt("unsignedDetune",0); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); @@ -2134,6 +2140,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.doubleClickColumn,0,1); clampSetting(settings.blankIns,0,1); clampSetting(settings.dragMovesSelection,0,2); + clampSetting(settings.unsignedDetune,0,1); settings.initialSys=e->decodeSysDesc(e->getConfString("initialSys","")); if (settings.initialSys.size()<4) { @@ -2268,6 +2275,7 @@ void FurnaceGUI::commitSettings() { e->setConf("doubleClickColumn",settings.doubleClickColumn); e->setConf("blankIns",settings.blankIns); e->setConf("dragMovesSelection",settings.dragMovesSelection); + e->setConf("unsignedDetune",settings.unsignedDetune); // colors for (int i=0; i>16)&15)+1; + bool stereo=(flags>>20)&1; + ImGui::Text("Output rate:"); + if (CWSliderInt("##SampRate",&sampRate,1,65536)) { + if (sampRate<1) sampRate=1; + if (sampRate>65536) sampRate=65536; + copyOfFlags=(flags&(~65535))|(sampRate-1); + } rightClickable + ImGui::Text("Output depth:"); + if (CWSliderInt("##BitDepth",&bitDepth,1,16)) { + if (bitDepth<1) bitDepth=1; + if (bitDepth>16) bitDepth=16; + copyOfFlags=(flags&(~(15<<16)))|((bitDepth-1)<<16); + } rightClickable + if (ImGui::Checkbox("Stereo",&stereo)) { + copyOfFlags=(flags&(~(1<<20)))|(stereo<<20); + } + break; + } case DIV_SYSTEM_GB: case DIV_SYSTEM_SWAN: case DIV_SYSTEM_VERA: case DIV_SYSTEM_BUBSYS_WSG: case DIV_SYSTEM_YMU759: case DIV_SYSTEM_PET: + case DIV_SYSTEM_T6W28: ImGui::Text("nothing to configure"); break; default: diff --git a/src/main.cpp b/src/main.cpp index 23309d9a3..1f5f9560a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -140,20 +140,37 @@ TAParamResult pVersion(String) { printf("- libsndfile by Erik de Castro Lopo and rest of libsndfile team (LGPLv2.1)\n"); printf("- SDL2 by Sam Lantinga (zlib license)\n"); printf("- zlib by Jean-loup Gailly and Mark Adler (zlib license)\n"); + printf("- RtMidi by Gary P. Scavone (RtMidi license)\n"); + printf("- backward-cpp by Google (MIT)\n"); printf("- Dear ImGui by Omar Cornut (MIT)\n"); + printf("- Portable File Dialogs by Sam Hocevar (WTFPL)\n"); + printf("- Native File Dialog (modified version) by Frogtoss Games (zlib license)\n"); + printf("- FFTW by Matteo Frigo and Steven G. Johnson (GPLv2)\n"); printf("- Nuked-OPM by Nuke.YKT (LGPLv2.1)\n"); printf("- Nuked-OPN2 by Nuke.YKT (LGPLv2.1)\n"); + printf("- Nuked-OPL3 by Nuke.YKT (LGPLv2.1)\n"); + printf("- Nuked-OPLL by Nuke.YKT (GPLv2)\n"); + printf("- Nuked-PSG (modified version) by Nuke.YKT (GPLv2)\n"); printf("- ymfm by Aaron Giles (BSD 3-clause)\n"); + printf("- adpcm by superctr (public domain)\n"); printf("- MAME SN76496 emulation core by Nicola Salmoria (BSD 3-clause)\n"); printf("- MAME AY-3-8910 emulation core by Couriersud (BSD 3-clause)\n"); printf("- MAME SAA1099 emulation core by Juergen Buchmueller and Manuel Abadia (BSD 3-clause)\n"); - printf("- SAASound (BSD 3-clause)\n"); + printf("- MAME Namco WSG by Nicola Salmoria and Aaron Giles (BSD 3-clause)\n"); + printf("- MAME RF5C68 core by Olivier Galibert and Aaron Giles (BSD 3-clause)\n"); + printf("- MAME MSM6258 core by Barry Rodewald (BSD 3-clause)\n"); + printf("- MAME YMZ280B core by Aaron Giles (BSD 3-clause)\n"); + printf("- QSound core by superctr (BSD 3-clause)\n"); + printf("- VICE VIC-20 by Rami Rasanen and viznut (GPLv2)\n"); + printf("- VERA core by Frank van den Hoef (BSD 2-clause)\n"); + printf("- SAASound by Dave Hooper and Simon Owen (BSD 3-clause)\n"); printf("- SameBoy by Lior Halphon (MIT)\n"); - printf("- Mednafen PCE by Mednafen Team (GPLv2)\n"); + printf("- Mednafen PCE and WonderSwan by Mednafen Team (GPLv2)\n"); printf("- puNES by FHorse (GPLv2)\n"); + printf("- NSFPlay by Brad Smith and Brezza (unknown open-source license)\n"); printf("- reSID by Dag Lem (GPLv2)\n"); printf("- Stella by Stella Team (GPLv2)\n"); - printf("- vgsound_emu by cam900 (BSD 3-clause)\n"); + printf("- vgsound_emu (first version) by cam900 (BSD 3-clause)\n"); return TA_PARAM_QUIT; } @@ -241,6 +258,17 @@ void initParams() { params.push_back(TAParam("W","warranty",false,pWarranty,"","view warranty disclaimer.")); } +#ifdef _WIN32 +void reportError(String what) { + logE("%s",what); + MessageBox(NULL,what.c_str(),"Furnace",MB_OK|MB_ICONERROR); +} +#else +void reportError(String what) { + logE("%s",what); +} +#endif + // TODO: CoInitializeEx on Windows? // TODO: add crash log int main(int argc, char** argv) { @@ -281,7 +309,7 @@ int main(int argc, char** argv) { val=argv[i+1]; i++; } else { - logE("incomplete param %s.",arg.c_str()); + reportError(fmt::sprintf("incomplete param %s.",arg.c_str())); return 1; } } @@ -335,53 +363,54 @@ int main(int argc, char** argv) { logI("loading module..."); FILE* f=ps_fopen(fileName.c_str(),"rb"); if (f==NULL) { - perror("error"); + reportError(fmt::sprintf("couldn't open file! (%s)",strerror(errno))); return 1; } if (fseek(f,0,SEEK_END)<0) { - perror("size error"); + reportError(fmt::sprintf("couldn't open file! (couldn't get file size: %s)",strerror(errno))); fclose(f); return 1; } ssize_t len=ftell(f); if (len==(SIZE_MAX>>1)) { - perror("could not get file length"); + reportError(fmt::sprintf("couldn't open file! (couldn't get file length: %s)",strerror(errno))); fclose(f); return 1; } if (len<1) { if (len==0) { - printf("that file is empty!\n"); + reportError("that file is empty!"); } else { - perror("tell error"); + reportError(fmt::sprintf("couldn't open file! (tell error: %s)",strerror(errno))); } fclose(f); return 1; } unsigned char* file=new unsigned char[len]; if (fseek(f,0,SEEK_SET)<0) { - perror("size error"); + reportError(fmt::sprintf("couldn't open file! (size error: %s)",strerror(errno))); fclose(f); delete[] file; return 1; } if (fread(file,1,(size_t)len,f)!=(size_t)len) { - perror("read error"); + reportError(fmt::sprintf("couldn't open file! (read error: %s)",strerror(errno))); fclose(f); delete[] file; return 1; } fclose(f); if (!e.load(file,(size_t)len)) { - logE("could not open file!"); + reportError(fmt::sprintf("could not open file! (%s)",e.getLastError())); return 1; } } if (!e.init()) { - logE("could not initialize engine!"); if (consoleMode) { + reportError("could not initialize engine!"); return 1; } else { + logE("could not initialize engine!"); displayEngineFailError=true; } } @@ -394,12 +423,12 @@ int main(int argc, char** argv) { fwrite(w->getFinalBuf(),1,w->size(),f); fclose(f); } else { - logE("could not open file! %s",strerror(errno)); + reportError(fmt::sprintf("could not open file! (%s)",e.getLastError())); } w->finish(); delete w; } else { - logE("could not write VGM!"); + reportError("could not write VGM!"); } } if (outName!="") { @@ -434,7 +463,10 @@ int main(int argc, char** argv) { #ifdef HAVE_GUI g.bindEngine(&e); - if (!g.init()) return 1; + if (!g.init()) { + reportError("error while starting GUI!"); + return 1; + } if (displayEngineFailError) { logE("displaying engine fail error.");