├── .circleci └── config.yml ├── .gitignore ├── .gitmodules ├── .vscode └── settings.json ├── LICENSE ├── Makefile ├── OSX_Xcode ├── English.lproj │ └── InfoPlist.strings ├── Info.plist ├── OSX_Xcode.xcodeproj │ └── project.pbxproj ├── SDLMain.h └── SDLMain.m ├── README.md ├── doc ├── Default.kt ├── KlystrackGCLogo.png ├── SDL.txt ├── SDL_image.txt ├── inst_editor.png └── klystrack.1 ├── examples ├── instruments │ ├── JDsnare.ki │ ├── MontyKick.ki │ ├── bass.ki │ ├── bass2.ki │ ├── bigsnare.ki │ ├── clap.ki │ ├── cowbell.ki │ ├── dang.ki │ ├── hardkick.ki │ ├── katana.ki │ ├── kick.ki │ ├── lead1.ki │ ├── lethal_kick.ki │ ├── lethal_snare.ki │ ├── major.ki │ ├── n00bstar-instruments │ │ ├── Arp_External_OscSweep.ki │ │ ├── Arp_External_PhasingSquare.ki │ │ ├── Arp_External_Short.ki │ │ ├── Arp_External_SustainedPWM.ki │ │ ├── Arp_Fixed_Aug.ki │ │ ├── Arp_Fixed_Dim.ki │ │ ├── Arp_Fixed_Dom7th.ki │ │ ├── Arp_Fixed_Major.ki │ │ ├── Arp_Fixed_Minor.ki │ │ ├── Arp_Fixed_Sus4.ki │ │ ├── Bass_Aggro.ki │ │ ├── Bass_Deep.ki │ │ ├── Bass_DoubleSquare.ki │ │ ├── Bass_FM.ki │ │ ├── Bass_Filtered.ki │ │ ├── Bass_Picked.ki │ │ ├── Bass_Pulse.ki │ │ ├── Bass_Shifting.ki │ │ ├── Bass_Sustained.ki │ │ ├── Bassdrum_01.ki │ │ ├── Bassdrum_02.ki │ │ ├── Bassdrum_03.ki │ │ ├── Bassdrum_04.ki │ │ ├── Bassdrum_05.ki │ │ ├── Bassdrum_06.ki │ │ ├── Clap_01.ki │ │ ├── Clap_02.ki │ │ ├── FX_BreakGlass.ki │ │ ├── FX_DriveBy.ki │ │ ├── FX_PowerUp.ki │ │ ├── FX_VinylRecord.ki │ │ ├── Hihat_1_Closed.ki │ │ ├── Hihat_1_Open.ki │ │ ├── Hihat_2_Closed.ki │ │ ├── Hihat_2_Open.ki │ │ ├── Hihat_3_Closed.ki │ │ ├── Hihat_3_Open.ki │ │ ├── Instrument_Strings.ki │ │ ├── Instrument_Trombone.ki │ │ ├── Instrument_Trumpet.ki │ │ ├── Lead_Buzz.ki │ │ ├── Lead_DigitalBells.ki │ │ ├── Lead_FM_Rise.ki │ │ ├── Lead_FM_Sync.ki │ │ ├── Lead_FakeArp.ki │ │ ├── Lead_HPF_SawFifths.ki │ │ ├── Lead_OctaveArpBleep.ki │ │ ├── Lead_PulseToSquare.ki │ │ ├── Lead_ShortFMSquare.ki │ │ ├── Lead_SquareToPulse.ki │ │ ├── Lead_VibraSquare.ki │ │ ├── Pad_LongRise.ki │ │ ├── Pad_ResonnantSweep.ki │ │ ├── Pad_ThinDigital.ki │ │ ├── Snare_01.ki │ │ ├── Snare_02.ki │ │ ├── Snare_03.ki │ │ ├── Snare_04.ki │ │ ├── Snare_05.ki │ │ ├── Snare_06.ki │ │ ├── Tom_01.ki │ │ ├── Tom_02.ki │ │ └── Tom_03.ki │ ├── snappy.ki │ ├── ssnare.ki │ ├── stabmaj.ki │ ├── stabmin.ki │ ├── the_horror.ki │ ├── tom.ki │ ├── vibbas_flt.ki │ └── wetkick.ki └── songs │ ├── AmsterdamBoppe.kt │ ├── Diverted_Experience.kt │ ├── Ocean Loader III.kt │ ├── Paranoimia (Suntronic).kt │ ├── Sprock'n'Sprawl.kt │ ├── StarChips.kt │ ├── Starport2.kt │ ├── castlevania.kt │ ├── dr.happy.kt │ ├── hskv03-rygar_trance.kt │ ├── hwv 437.kt │ ├── n00bstar-examples │ ├── Arps.kt │ ├── Buzz.kt │ ├── FXBus.kt │ ├── Multiplex.kt │ ├── Oscillators_And_Wavetable.kt │ ├── Ringmod.kt │ └── Sync.kt │ ├── obspatial.kt │ ├── phonkeh.kt │ ├── ringmod.kt │ ├── smp_dingleberries_fix.kt │ └── smp_dpintro.kt ├── icon ├── 256x256.icns ├── 256x256.ico └── 256x256.png ├── installer ├── FileAssociation.nsh ├── UnFiles.cmd └── klystrack.nsi ├── key ├── AZERTY ├── DVORAK ├── FT2 ├── QWERTZ └── n00bstar ├── linux └── klystrack.desktop ├── player ├── Makefile └── player.c ├── scancode-tool ├── Makefile └── scancode.c ├── src ├── action.c ├── action.h ├── clipboard.c ├── clipboard.h ├── command.c ├── command.h ├── config.c ├── config.h ├── console.c ├── console.h ├── copypaste.c ├── copypaste.h ├── diskop.c ├── diskop.h ├── edit.c ├── edit.h ├── event.c ├── event.h ├── export.c ├── export.h ├── help.c ├── help.h ├── import │ ├── ahx.c │ ├── ahx.h │ ├── hubbard.c │ ├── hubbard.h │ ├── hubdialog.c │ ├── hubdialog.h │ ├── import.c │ ├── import.h │ ├── mod.c │ ├── mod.h │ ├── org.c │ ├── org.h │ ├── xm.c │ └── xm.h ├── key.c ├── key.h ├── keytab.c ├── keytab.h ├── main.c ├── memwriter.c ├── memwriter.h ├── menudefs.c ├── midi.c ├── midi.h ├── mused.c ├── mused.h ├── mybevdefs.h ├── mymsg.h ├── nostalgy.c ├── nostalgy.h ├── optimize.c ├── optimize.h ├── shortcutdefs.c ├── shortcutdefs.h ├── songstats.h ├── stats.c ├── stats.h ├── theme.c ├── theme.h ├── undo.c ├── undo.h ├── version ├── version.in ├── view.c ├── view.h ├── view │ ├── pattern.c │ ├── pattern.h │ ├── sequence.c │ ├── sequence.h │ ├── timer.c │ ├── timer.h │ ├── visu.c │ ├── visu.h │ ├── wavetableview.c │ └── wavetableview.h ├── wave.c ├── wave.h ├── wave_action.c ├── wave_action.h ├── wavegen.c ├── wavegen.h ├── wavewriter.c ├── wavewriter.h ├── zap.c └── zap.h ├── themes ├── AHX │ ├── bevel.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── Blacklyst │ ├── analyzor.png │ ├── bevel.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── C64 │ ├── bevel.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── logo.png │ └── vu.png ├── Classic │ ├── bevel.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── Default │ ├── analyzor.png │ ├── bevel.png │ ├── catometer.png │ ├── colors.txt │ ├── cursor.png │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── icon.png │ ├── logo.png │ ├── tiny │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── Gameboy │ ├── bevel.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── Golden_Brown │ ├── analyzor.png │ ├── bevel.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── Rust_Camo │ ├── analyzor.png │ ├── bevel.png │ ├── catometer.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── tiny │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png ├── Rust_Red │ ├── analyzor.png │ ├── bevel.png │ ├── catometer.png │ ├── colors.txt │ ├── font │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── font7x6 │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ ├── tiny │ │ ├── charmap.txt │ │ ├── font.png │ │ └── res.txt │ └── vu.png └── Ultimate_Proctamed │ ├── analyzor.png │ ├── bevel.png │ ├── colors.txt │ ├── font │ ├── charmap.txt │ ├── font.png │ └── res.txt │ ├── font7x6 │ ├── charmap.txt │ ├── font.png │ └── res.txt │ ├── tiny │ ├── charmap.txt │ ├── font.png │ └── res.txt │ └── vu.png └── windres ├── resource.h └── resource.rc /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | - image: gcc:8 6 | steps: 7 | - run: apt-get update && apt-get install -y zip libsdl2-dev libsdl2-image-dev 8 | - checkout 9 | - run: git submodule init && git submodule update --remote 10 | - run: make CC=gcc CFG=release RES_PATH=. 11 | - run: zip -j /tmp/klystrack-linux64.zip bin.release/klystrack doc/Default.kt && zip -r /tmp/klystrack-linux64.zip res key examples LICENSE doc/SDL.txt doc/SDL_image.txt 12 | #- run: cd klystrack && make clean 13 | #- run: SDL_ROOT_DIR=/usr/x86_64-win32-mingw32 COMSPEC=1 && cd klystrack && make CC=x86_64-win32-mingw32-gcc CFG=release RES_PATH=. 14 | #- run: cd klystrack && zip -j /tmp/klystrack-win32.zip bin.release/klystrack doc/Default.kt && zip -r /tmp/klystrack-win32.zip res key examples LICENSE doc/SDL.txt doc/SDL_image.txt 15 | #- run: cd klystrack && make clean 16 | #- run: SDL_ROOT_DIR=/usr/x86_64-w64-mingw32 COMSPEC=1 && cd klystrack && make CC=x86_64-w64-mingw32-gcc CFG=release RES_PATH=. 17 | #- run: cd klystrack && zip -j /tmp/klystrack.zip bin.release/klystrack doc/Default.kt && zip -r /tmp/klystrack.zip res key examples LICENSE doc/SDL.txt doc/SDL_image.txt 18 | #- store_artifacts: 19 | # path: /tmp/klystrack.zip 20 | #- store_artifacts: 21 | # path: /tmp/klystrack-win32.zip 22 | #- store_artifacts: 23 | # path: /tmp/klystrack-win64.zip 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /deps 2 | /objs.* 3 | /bin.* 4 | /res 5 | /src/version_number.h 6 | /src/version.h 7 | *.dll 8 | *.exe 9 | zip/data/Default.kt 10 | zip 11 | .vscode/ipch/* 12 | themetemp 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "klystron"] 2 | path = klystron 3 | url = https://github.com/kometbomb/klystron.git 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.encoding": "windows1252", 3 | "files.autoGuessEncoding": false 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2018 Tero Lindeman (kometbomb) 2 | Additional graphics copyright (c) 2010-2018 Ilija Melentijevic 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | 25 | 26 | == Graphics == 27 | 28 | 29 | 30 | Permission is hereby granted, free of charge, to any person 31 | obtaining a copy of this software and associated documentation 32 | files (the "Software"), to deal in the Software without 33 | restriction, including without limitation the rights to use, 34 | copy, modify, merge, publish, distribute, sublicense, and/or sell 35 | copies of the Software, and to permit persons to whom the 36 | Software is furnished to do so, subject to the following 37 | conditions: 38 | 39 | The above copyright notice and this permission notice shall be 40 | included in all copies or substantial portions of the Software. 41 | 42 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 43 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 44 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 45 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 46 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 47 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 48 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 49 | OTHER DEALINGS IN THE SOFTWARE. 50 | 51 | 52 | == 3rd party software == 53 | 54 | This software uses the Mersenne Twister random number generator. 55 | 56 | Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, 57 | All rights reserved. 58 | -------------------------------------------------------------------------------- /OSX_Xcode/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/OSX_Xcode/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /OSX_Xcode/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 256x256 11 | CFBundleIdentifier 12 | com.yourcompany.Klystrack 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSMainNibFile 24 | SDLMain 25 | NSPrincipalClass 26 | NSApplication 27 | LSMinimumSystemVersionByArchitecture 28 | 29 | x86_64 30 | 10.6.0 31 | i386 32 | 10.4.0 33 | ppc 34 | 10.4.0 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /OSX_Xcode/SDLMain.h: -------------------------------------------------------------------------------- 1 | /* SDLMain.m - main entry point for our Cocoa-ized SDL app 2 | Initial Version: Darrell Walisser 3 | Non-NIB-Code & other changes: Max Horn 4 | 5 | Feel free to customize this file to suit your needs 6 | */ 7 | 8 | #ifndef _SDLMain_h_ 9 | #define _SDLMain_h_ 10 | 11 | #import 12 | 13 | @interface SDLMain : NSObject 14 | @end 15 | 16 | #endif /* _SDLMain_h_ */ 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # klystrack 2 | 3 | Klystrack is a chiptune tracker for making chiptune-like music on a modern computer. 4 | 5 | 1. Download the latest [release](https://github.com/kometbomb/klystrack/releases) or: 6 | - [Build your own](https://github.com/kometbomb/klystrack/wiki/HowToCompile). 7 | - [Get a prebuilt](https://repology.org/metapackage/klystrack/versions). 8 | - [klystrack for OSX](https://plugins.ro/klystrack/) (thanks, TBD!) 9 | - [Install on Linux using the snap](https://snapcraft.io/klystrack) ([repo](https://github.com/kometbomb/klystrack-snap)) [![klystrack](https://snapcraft.io/klystrack/badge.svg)](https://snapcraft.io/klystrack) 10 | - [Run on Linux using the AppImage](http://sid.ethz.ch/appimage/Klystrack-x86_64.AppImage) 11 | 2. Google for a klystrack tutorial or start exploring, it's mostly just like any tracker. 12 | 13 | ## Discord 14 | 15 | Join the [klystrack Discord](https://discord.gg/udba7HG) for help, listen to tunes or just to hang out. 16 | -------------------------------------------------------------------------------- /doc/Default.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/doc/Default.kt -------------------------------------------------------------------------------- /doc/KlystrackGCLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/doc/KlystrackGCLogo.png -------------------------------------------------------------------------------- /doc/SDL.txt: -------------------------------------------------------------------------------- 1 | The Simple DirectMedia Layer (SDL for short) is a cross-platform 2 | library designed to make it easy to write multi-media software, such 3 | as games and emulators. 4 | 5 | The Simple DirectMedia Layer library source code is available from: 6 | http://www.libsdl.org/ 7 | 8 | This library is distributed under the terms of the GNU LGPL license: 9 | http://www.gnu.org/copyleft/lesser.html 10 | -------------------------------------------------------------------------------- /doc/SDL_image.txt: -------------------------------------------------------------------------------- 1 | Please include this notice with the runtime environment: 2 | 3 | This library is distributed under the terms of the GNU LGPL license: 4 | http://www.gnu.org/copyleft/lesser.html 5 | 6 | The source is available from the libraries page at the SDL website: 7 | http://www.libsdl.org/ 8 | -------------------------------------------------------------------------------- /doc/inst_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/doc/inst_editor.png -------------------------------------------------------------------------------- /doc/klystrack.1: -------------------------------------------------------------------------------- 1 | .TH klystrack 1 "December 12 2017" 2 | .SH NAME 3 | klystrack \- make C64/NES/Amiga-style chiptunes 4 | .SH SYNOPSIS 5 | .B klystrack 6 | .RI [ options ] " files" ... 7 | .SH DESCRIPTION 8 | This manual page documents briefly the 9 | .B klystrack 10 | command. 11 | .PP 12 | \fBklystrack\fP is a tracker for making C64/NES/Amiga-style chiptunes on a modern 13 | platform. It can be used to create audio for games. 14 | .SH FEATURES 15 | .B Sound 16 | .br 17 | Additive synthesis with filters (think SID, Atari, NES etc.) 18 | .br 19 | Hard sync and ring modulation (like SID) 20 | .br 21 | FM synthesis (think Adlib, MSX, OPL2 etc.) 22 | .br 23 | Wavetable for samples or custom waveforms to be used in synthesis (think Amiga, SNES) 24 | .br 25 | Built-in wave generator and editor 26 | .br 27 | Programmable instruments not limited to simple arpeggios 28 | .br 29 | .B Sequencer 30 | .br 31 | Tracker with free positioning of patterns 32 | .br 33 | Pattern transpose 34 | .br 35 | Pattern length is not fixed 36 | .br 37 | Hard limit of 32 channels but this can be raised (just ask if you need more... sounds crazy, though) 38 | .br 39 | Fully themeable, includes half dozen themes 40 | .br 41 | .B Effects 42 | .br 43 | Stereo chorus 44 | .br 45 | SNES-style multitap echo 46 | .br 47 | Bit crusher/decimator 48 | .br 49 | .B Export 50 | .br 51 | Own custom format with a tiny playback library to be used in games, demos etc. 52 | .br 53 | Export as .WAV 54 | .br 55 | Export each track as separate .WAV's 56 | .br 57 | Export wavetable items as .WAV's (use klystrack to create one-cycle waveforms for other synths!) 58 | .br 59 | .B Import 60 | .br 61 | Import .AHX modules 62 | .br 63 | Import .WAV's to use as samples 64 | .br 65 | Import Protracker and FT2 modules 66 | .br 67 | Import C64 SID files (Rob Hubbard player) 68 | .SH INTERNET TUTORIAL 69 | http://n00bstar.blogspot.ch/p/klystrack-tutorials.html 70 | .SH SEE ALSO 71 | .BR adtrack2 (1), 72 | .BR protracker (1), 73 | .BR goattracker (1), 74 | .BR milkytracker (1), 75 | .BR hivelytracker (1), 76 | .BR schismtracker (1). 77 | .br 78 | -------------------------------------------------------------------------------- /examples/instruments/JDsnare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/JDsnare.ki -------------------------------------------------------------------------------- /examples/instruments/MontyKick.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/MontyKick.ki -------------------------------------------------------------------------------- /examples/instruments/bass.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/bass.ki -------------------------------------------------------------------------------- /examples/instruments/bass2.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/bass2.ki -------------------------------------------------------------------------------- /examples/instruments/bigsnare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/bigsnare.ki -------------------------------------------------------------------------------- /examples/instruments/clap.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/clap.ki -------------------------------------------------------------------------------- /examples/instruments/cowbell.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/cowbell.ki -------------------------------------------------------------------------------- /examples/instruments/dang.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/dang.ki -------------------------------------------------------------------------------- /examples/instruments/hardkick.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/hardkick.ki -------------------------------------------------------------------------------- /examples/instruments/katana.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/katana.ki -------------------------------------------------------------------------------- /examples/instruments/kick.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/kick.ki -------------------------------------------------------------------------------- /examples/instruments/lead1.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/lead1.ki -------------------------------------------------------------------------------- /examples/instruments/lethal_kick.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/lethal_kick.ki -------------------------------------------------------------------------------- /examples/instruments/lethal_snare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/lethal_snare.ki -------------------------------------------------------------------------------- /examples/instruments/major.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/major.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_External_OscSweep.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_External_OscSweep.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_External_PhasingSquare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_External_PhasingSquare.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_External_Short.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_External_Short.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_External_SustainedPWM.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_External_SustainedPWM.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_Fixed_Aug.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_Fixed_Aug.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_Fixed_Dim.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_Fixed_Dim.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_Fixed_Dom7th.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_Fixed_Dom7th.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_Fixed_Major.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_Fixed_Major.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_Fixed_Minor.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_Fixed_Minor.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Arp_Fixed_Sus4.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Arp_Fixed_Sus4.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Aggro.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Aggro.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Deep.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Deep.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_DoubleSquare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_DoubleSquare.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_FM.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_FM.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Filtered.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Filtered.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Picked.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Picked.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Pulse.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Pulse.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Shifting.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Shifting.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bass_Sustained.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bass_Sustained.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bassdrum_01.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bassdrum_01.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bassdrum_02.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bassdrum_02.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bassdrum_03.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bassdrum_03.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bassdrum_04.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bassdrum_04.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bassdrum_05.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bassdrum_05.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Bassdrum_06.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Bassdrum_06.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Clap_01.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Clap_01.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Clap_02.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Clap_02.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/FX_BreakGlass.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/FX_BreakGlass.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/FX_DriveBy.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/FX_DriveBy.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/FX_PowerUp.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/FX_PowerUp.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/FX_VinylRecord.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/FX_VinylRecord.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Hihat_1_Closed.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Hihat_1_Closed.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Hihat_1_Open.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Hihat_1_Open.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Hihat_2_Closed.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Hihat_2_Closed.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Hihat_2_Open.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Hihat_2_Open.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Hihat_3_Closed.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Hihat_3_Closed.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Hihat_3_Open.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Hihat_3_Open.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Instrument_Strings.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Instrument_Strings.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Instrument_Trombone.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Instrument_Trombone.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Instrument_Trumpet.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Instrument_Trumpet.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_Buzz.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_Buzz.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_DigitalBells.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_DigitalBells.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_FM_Rise.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_FM_Rise.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_FM_Sync.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_FM_Sync.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_FakeArp.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_FakeArp.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_HPF_SawFifths.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_HPF_SawFifths.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_OctaveArpBleep.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_OctaveArpBleep.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_PulseToSquare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_PulseToSquare.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_ShortFMSquare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_ShortFMSquare.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_SquareToPulse.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_SquareToPulse.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Lead_VibraSquare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Lead_VibraSquare.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Pad_LongRise.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Pad_LongRise.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Pad_ResonnantSweep.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Pad_ResonnantSweep.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Pad_ThinDigital.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Pad_ThinDigital.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Snare_01.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Snare_01.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Snare_02.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Snare_02.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Snare_03.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Snare_03.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Snare_04.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Snare_04.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Snare_05.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Snare_05.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Snare_06.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Snare_06.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Tom_01.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Tom_01.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Tom_02.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Tom_02.ki -------------------------------------------------------------------------------- /examples/instruments/n00bstar-instruments/Tom_03.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/n00bstar-instruments/Tom_03.ki -------------------------------------------------------------------------------- /examples/instruments/snappy.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/snappy.ki -------------------------------------------------------------------------------- /examples/instruments/ssnare.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/ssnare.ki -------------------------------------------------------------------------------- /examples/instruments/stabmaj.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/stabmaj.ki -------------------------------------------------------------------------------- /examples/instruments/stabmin.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/stabmin.ki -------------------------------------------------------------------------------- /examples/instruments/the_horror.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/the_horror.ki -------------------------------------------------------------------------------- /examples/instruments/tom.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/tom.ki -------------------------------------------------------------------------------- /examples/instruments/vibbas_flt.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/vibbas_flt.ki -------------------------------------------------------------------------------- /examples/instruments/wetkick.ki: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/instruments/wetkick.ki -------------------------------------------------------------------------------- /examples/songs/AmsterdamBoppe.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/AmsterdamBoppe.kt -------------------------------------------------------------------------------- /examples/songs/Diverted_Experience.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/Diverted_Experience.kt -------------------------------------------------------------------------------- /examples/songs/Ocean Loader III.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/Ocean Loader III.kt -------------------------------------------------------------------------------- /examples/songs/Paranoimia (Suntronic).kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/Paranoimia (Suntronic).kt -------------------------------------------------------------------------------- /examples/songs/Sprock'n'Sprawl.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/Sprock'n'Sprawl.kt -------------------------------------------------------------------------------- /examples/songs/StarChips.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/StarChips.kt -------------------------------------------------------------------------------- /examples/songs/Starport2.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/Starport2.kt -------------------------------------------------------------------------------- /examples/songs/castlevania.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/castlevania.kt -------------------------------------------------------------------------------- /examples/songs/dr.happy.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/dr.happy.kt -------------------------------------------------------------------------------- /examples/songs/hskv03-rygar_trance.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/hskv03-rygar_trance.kt -------------------------------------------------------------------------------- /examples/songs/hwv 437.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/hwv 437.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/Arps.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/Arps.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/Buzz.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/Buzz.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/FXBus.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/FXBus.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/Multiplex.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/Multiplex.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/Oscillators_And_Wavetable.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/Oscillators_And_Wavetable.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/Ringmod.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/Ringmod.kt -------------------------------------------------------------------------------- /examples/songs/n00bstar-examples/Sync.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/n00bstar-examples/Sync.kt -------------------------------------------------------------------------------- /examples/songs/obspatial.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/obspatial.kt -------------------------------------------------------------------------------- /examples/songs/phonkeh.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/phonkeh.kt -------------------------------------------------------------------------------- /examples/songs/ringmod.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/ringmod.kt -------------------------------------------------------------------------------- /examples/songs/smp_dingleberries_fix.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/smp_dingleberries_fix.kt -------------------------------------------------------------------------------- /examples/songs/smp_dpintro.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/examples/songs/smp_dpintro.kt -------------------------------------------------------------------------------- /icon/256x256.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/icon/256x256.icns -------------------------------------------------------------------------------- /icon/256x256.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/icon/256x256.ico -------------------------------------------------------------------------------- /icon/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/icon/256x256.png -------------------------------------------------------------------------------- /installer/FileAssociation.nsh: -------------------------------------------------------------------------------- 1 | /* 2 | _____________________________________________________________________________ 3 | 4 | File Association 5 | _____________________________________________________________________________ 6 | 7 | Based on code taken from http://nsis.sourceforge.net/File_Association 8 | 9 | Usage in script: 10 | 1. !include "FileAssociation.nsh" 11 | 2. [Section|Function] 12 | ${FileAssociationFunction} "Param1" "Param2" "..." $var 13 | [SectionEnd|FunctionEnd] 14 | 15 | FileAssociationFunction=[RegisterExtension|UnRegisterExtension] 16 | 17 | _____________________________________________________________________________ 18 | 19 | ${RegisterExtension} "[executable]" "[extension]" "[description]" 20 | 21 | "[executable]" ; executable which opens the file format 22 | ; 23 | "[extension]" ; extension, which represents the file format to open 24 | ; 25 | "[description]" ; description for the extension. This will be display in Windows Explorer. 26 | ; 27 | 28 | 29 | ${UnRegisterExtension} "[extension]" "[description]" 30 | 31 | "[extension]" ; extension, which represents the file format to open 32 | ; 33 | "[description]" ; description for the extension. This will be display in Windows Explorer. 34 | ; 35 | 36 | _____________________________________________________________________________ 37 | 38 | Macros 39 | _____________________________________________________________________________ 40 | 41 | Change log window verbosity (default: 3=no script) 42 | 43 | Example: 44 | !include "FileAssociation.nsh" 45 | !insertmacro RegisterExtension 46 | ${FileAssociation_VERBOSE} 4 # all verbosity 47 | !insertmacro UnRegisterExtension 48 | ${FileAssociation_VERBOSE} 3 # no script 49 | */ 50 | 51 | 52 | !ifndef FileAssociation_INCLUDED 53 | !define FileAssociation_INCLUDED 54 | 55 | !include Util.nsh 56 | 57 | !verbose push 58 | !verbose 3 59 | !ifndef _FileAssociation_VERBOSE 60 | !define _FileAssociation_VERBOSE 3 61 | !endif 62 | !verbose ${_FileAssociation_VERBOSE} 63 | !define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE` 64 | !verbose pop 65 | 66 | !macro FileAssociation_VERBOSE _VERBOSE 67 | !verbose push 68 | !verbose 3 69 | !undef _FileAssociation_VERBOSE 70 | !define _FileAssociation_VERBOSE ${_VERBOSE} 71 | !verbose pop 72 | !macroend 73 | 74 | 75 | 76 | !macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION 77 | !verbose push 78 | !verbose ${_FileAssociation_VERBOSE} 79 | Push `${_DESCRIPTION}` 80 | Push `${_EXTENSION}` 81 | Push `${_EXECUTABLE}` 82 | ${CallArtificialFunction} RegisterExtension_ 83 | !verbose pop 84 | !macroend 85 | 86 | !macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION 87 | !verbose push 88 | !verbose ${_FileAssociation_VERBOSE} 89 | Push `${_EXTENSION}` 90 | Push `${_DESCRIPTION}` 91 | ${CallArtificialFunction} UnRegisterExtension_ 92 | !verbose pop 93 | !macroend 94 | 95 | 96 | 97 | !define RegisterExtension `!insertmacro RegisterExtensionCall` 98 | !define un.RegisterExtension `!insertmacro RegisterExtensionCall` 99 | 100 | !macro RegisterExtension 101 | !macroend 102 | 103 | !macro un.RegisterExtension 104 | !macroend 105 | 106 | !macro RegisterExtension_ 107 | !verbose push 108 | !verbose ${_FileAssociation_VERBOSE} 109 | 110 | Exch $R2 ;exe 111 | Exch 112 | Exch $R1 ;ext 113 | Exch 114 | Exch 2 115 | Exch $R0 ;desc 116 | Exch 2 117 | Push $0 118 | Push $1 119 | 120 | ReadRegStr $1 HKCR $R1 "" ; read current file association 121 | StrCmp "$1" "" NoBackup ; is it empty 122 | StrCmp "$1" "$R0" NoBackup ; is it our own 123 | WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value 124 | NoBackup: 125 | WriteRegStr HKCR $R1 "" "$R0" ; set our file association 126 | 127 | ReadRegStr $0 HKCR $R0 "" 128 | StrCmp $0 "" 0 Skip 129 | WriteRegStr HKCR "$R0" "" "$R0" 130 | WriteRegStr HKCR "$R0\shell" "" "open" 131 | WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" 132 | Skip: 133 | WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' 134 | WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" 135 | WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' 136 | 137 | Pop $1 138 | Pop $0 139 | Pop $R2 140 | Pop $R1 141 | Pop $R0 142 | 143 | !verbose pop 144 | !macroend 145 | 146 | 147 | 148 | !define UnRegisterExtension `!insertmacro UnRegisterExtensionCall` 149 | !define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall` 150 | 151 | !macro UnRegisterExtension 152 | !macroend 153 | 154 | !macro un.UnRegisterExtension 155 | !macroend 156 | 157 | !macro UnRegisterExtension_ 158 | !verbose push 159 | !verbose ${_FileAssociation_VERBOSE} 160 | 161 | Exch $R1 ;desc 162 | Exch 163 | Exch $R0 ;ext 164 | Exch 165 | Push $0 166 | Push $1 167 | 168 | ReadRegStr $1 HKCR $R0 "" 169 | StrCmp $1 $R1 0 NoOwn ; only do this if we own it 170 | ReadRegStr $1 HKCR $R0 "backup_val" 171 | StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key 172 | DeleteRegKey HKCR $R0 173 | Goto NoOwn 174 | 175 | Restore: 176 | WriteRegStr HKCR $R0 "" $1 177 | DeleteRegValue HKCR $R0 "backup_val" 178 | DeleteRegKey HKCR $R1 ;Delete key with association name settings 179 | 180 | NoOwn: 181 | 182 | Pop $1 183 | Pop $0 184 | Pop $R1 185 | Pop $R0 186 | 187 | !verbose pop 188 | !macroend 189 | 190 | !endif # !FileAssociation_INCLUDED -------------------------------------------------------------------------------- /installer/UnFiles.cmd: -------------------------------------------------------------------------------- 1 | @rem NSIS Uninstall Header Recursive File List Maker 2 | @rem Copyright 2014 Aleksandr Ivankiv 3 | 4 | @rem Modified for the klystrack installer by Tero Lindeman 5 | 6 | @SET DIR=%~1 7 | @SET HEADER=%~2 8 | @IF "%~1" == "/?" goto Help 9 | @IF NOT DEFINED DIR goto Help 10 | @IF NOT DEFINED HEADER SET HEADER=UnFiles.nsh 11 | @IF NOT EXIST "%DIR%" ECHO Cannot find the folder %DIR%. & SET "DIR=" & goto :EOF 12 | 13 | @SetLocal EnableDelayedExpansion 14 | 15 | @FOR /F "tokens=*" %%f IN ('DIR %DIR%\*.* /A:-D /B /S') DO @( 16 | set string=%%f 17 | set string=!string:%CD%\%DIR%=! 18 | echo Delete "$OUTDIR\!string:~1!" >> %HEADER% 19 | ) 20 | 21 | @FOR /F "tokens=*" %%d IN ('DIR %DIR%\*.* /A:D /B /S') DO @( 22 | set string=%%d 23 | set string=!string:%CD%\%DIR%=! 24 | echo RMDir "$OUTDIR\!string:~1!" >> %HEADER% 25 | ) 26 | 27 | @EndLocal 28 | @goto :EOF 29 | 30 | :Help 31 | @echo. 32 | @echo Usage: UNFILES FolderName [OutFile] 33 | @echo. 34 | @goto :EOF -------------------------------------------------------------------------------- /installer/klystrack.nsi: -------------------------------------------------------------------------------- 1 | !include "MUI.nsh" 2 | !include "installer\FileAssociation.nsh" 3 | 4 | Name "klystrack ${VERSION}" 5 | OutFile "zip\klystrack-${VERSION}.exe" 6 | InstallDirRegKey HKCU "Software\klystrack" "" 7 | InstallDir $PROGRAMFILES32\klystrack 8 | RequestExecutionLevel admin 9 | 10 | ;-------------------------------- 11 | 12 | ; Pages 13 | 14 | !insertmacro MUI_PAGE_LICENSE "LICENSE" 15 | !insertmacro MUI_PAGE_DIRECTORY 16 | !insertmacro MUI_PAGE_COMPONENTS 17 | !insertmacro MUI_PAGE_INSTFILES 18 | 19 | ; Uninst 20 | 21 | !insertmacro MUI_UNPAGE_CONFIRM 22 | !insertmacro MUI_UNPAGE_INSTFILES 23 | 24 | ;-------------------------------- 25 | 26 | !insertmacro MUI_LANGUAGE "English" 27 | 28 | ; The stuff to install 29 | Section "klystrack files" 30 | SectionIn RO 31 | 32 | ; Set output path to the installation directory. 33 | SetOutPath $INSTDIR 34 | 35 | ; Put file there 36 | File zip\data\LICENSE 37 | File zip\data\SDL2.dll 38 | File zip\data\SDL.txt 39 | File zip\data\SDL_image.txt 40 | File zip\data\SDL2_image.dll 41 | File zip\data\zlib1.dll 42 | File zip\data\libpng16-16.dll 43 | File zip\data\Default.kt 44 | 45 | SetOutPath $INSTDIR\res 46 | 47 | File zip\data\res\* 48 | 49 | SetOutPath $INSTDIR\key 50 | 51 | File zip\data\key\FT2 52 | File zip\data\key\AZERTY 53 | File zip\data\key\QWERTZ 54 | File zip\data\key\DVORAK 55 | File zip\data\key\n00bstar 56 | 57 | CreateDirectory $INSTDIR\examples 58 | CreateDirectory $INSTDIR\examples\songs 59 | CreateDirectory $INSTDIR\examples\instruments 60 | 61 | SetOutPath $INSTDIR\examples 62 | 63 | File /r examples\* 64 | 65 | ; For CreateShortCut 66 | 67 | SetOutPath $INSTDIR 68 | 69 | File zip\data\klystrack.exe 70 | 71 | CreateDirectory "$SMPROGRAMS\klystrack" 72 | CreateShortCut "$SMPROGRAMS\klystrack\klystrack.lnk" $INSTDIR\klystrack.exe 73 | CreateShortCut "$SMPROGRAMS\klystrack\Uninstall klystrack.lnk" $INSTDIR\uninstall.exe 74 | 75 | WriteRegStr HKCU "Software\klystrack" "" $INSTDIR 76 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\klystrack" "DisplayName" "klystrack (remove only)" 77 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\klystrack" "DisplayVersion" "${VERSION}" 78 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\klystrack" "UninstallString" "$INSTDIR\uninstall.exe" 79 | 80 | WriteUninstaller "$INSTDIR\uninstall.exe" 81 | 82 | SectionEnd ; end the section 83 | 84 | Section "Register file types" 85 | ${registerExtension} "$INSTDIR\klystrack.exe" ".kt" "klystrack song" 86 | SectionEnd 87 | 88 | ;;;;;;;; 89 | 90 | Section Uninstall 91 | ${unregisterExtension} ".kt" "klystrack song" 92 | 93 | Delete /REBOOTOK "$PROFILE\.klystrack" 94 | DeleteRegKey /ifempty HKCU "Software\klystrack" 95 | 96 | SetOutPath $INSTDIR 97 | 98 | Delete LICENSE 99 | Delete SDL2.dll 100 | Delete SDL2_image.dll 101 | Delete SDL.txt 102 | Delete SDL_image.txt 103 | Delete zlib1.dll 104 | Delete libpng16-16.dll 105 | Delete klystrack.exe 106 | Delete Default.kt 107 | 108 | SetOutPath $INSTDIR\key 109 | 110 | Delete FT2 111 | Delete AZERTY 112 | Delete QWERTZ 113 | Delete DVORAK 114 | Delete n00bstar 115 | 116 | ; remove all themes 117 | 118 | SetOutPath $INSTDIR\res 119 | 120 | !tempfile deletetemp 121 | !system '"installer\UnFiles.cmd" "res" "${deletetemp}"' 122 | !include ${deletetemp} 123 | !delfile ${deletetemp} 124 | 125 | ; remove all examples 126 | 127 | SetOutPath $INSTDIR\examples 128 | 129 | !tempfile deletetemp2 130 | !system '"installer\UnFiles.cmd" "examples" "${deletetemp2}"' 131 | !include ${deletetemp2} 132 | !delfile ${deletetemp2} 133 | 134 | SetOutPath $TEMP 135 | 136 | Delete "$SMPROGRAMS\klystrack\klystrack.lnk" 137 | Delete "$SMPROGRAMS\klystrack\Uninstall klystrack.lnk" 138 | 139 | RMDir $SMPROGRAMS\klystrack 140 | 141 | RMDir $INSTDIR\examples\songs 142 | RMDir $INSTDIR\examples\songs\n00bstar-examples 143 | RMDir $INSTDIR\examples\instruments 144 | RMDir $INSTDIR\examples\instruments\n00bstar-instruments 145 | RMDir $INSTDIR\examples 146 | RMDir $INSTDIR\res 147 | RMDir $INSTDIR\key 148 | 149 | Delete $INSTDIR\uninstall.exe 150 | 151 | RMDir $INSTDIR 152 | SectionEnd 153 | -------------------------------------------------------------------------------- /key/AZERTY: -------------------------------------------------------------------------------- 1 | # Fix problems with AZERTY keyboards 2 | [pattern] 3 | K_A = K_Q 4 | K_Q = K_A 5 | K_W = K_Z 6 | K_Z = K_W 7 | K_WORLD_34 = K_2 8 | -------------------------------------------------------------------------------- /key/DVORAK: -------------------------------------------------------------------------------- 1 | # Dvorak layout 2 | [global] 3 | K_QUOTE = K_Q 4 | K_LESS = K_W 5 | K_COMMA = K_W 6 | K_GREATER = K_E 7 | K_PERIOD = K_E 8 | K_P = K_R 9 | K_Y = K_T 10 | K_F = K_Y 11 | K_G = K_U 12 | K_C = K_I 13 | K_R = K_O 14 | K_L = K_L 15 | K_QUESTION = K_LEFTBRACKET 16 | K_PLUS = K_RIGHTBRACKET 17 | K_O = K_S 18 | K_E = K_D 19 | K_U = K_F 20 | K_I = K_G 21 | K_D = K_H 22 | K_H = K_J 23 | K_T = K_K 24 | K_N = K_L 25 | K_S = K_SEMICOLON 26 | K_MINUS = K_QUOTE 27 | K_SEMICOLON = K_Z 28 | K_Q = K_X 29 | K_J = K_C 30 | K_K = K_V 31 | K_X = K_B 32 | K_B = K_N 33 | K_W = K_COMMA 34 | K_V = K_PERIOD 35 | K_Z = K_SLASH 36 | K_LEFTBRACKET = K_MINUS 37 | K_RIGHTBRACKET = K_EQUALS 38 | -------------------------------------------------------------------------------- /key/FT2: -------------------------------------------------------------------------------- 1 | # Fasttracker 2 key shortcuts 2 | [pattern] 3 | M_LSHIFT K_TAB = M_CTRL K_LEFT 4 | K_TAB = M_CTRL K_RIGHT 5 | -------------------------------------------------------------------------------- /key/QWERTZ: -------------------------------------------------------------------------------- 1 | # Fix problems with QWERTZ keyboards 2 | [pattern] 3 | K_Z = K_Y 4 | K_Y = K_Z 5 | -------------------------------------------------------------------------------- /key/n00bstar: -------------------------------------------------------------------------------- 1 | # n00bstar's convoluted keymap 2 | # inspired by protracker and fasttracker 3 | [global] 4 | #play/stop 5 | K_RALT = M_SHIFT K_F6 6 | K_RCTRL = K_F6 7 | M_LALT K_RCTRL = K_F5 8 | #windows 9 | K_F2 = M_SHIFT K_F4 10 | K_F4 = M_SHIFT K_F3 11 | K_F5 = K_F2 12 | K_F6 = K_F4 13 | K_F7 = M_SHIFT K_F2 14 | K_COMMA = K_Q 15 | K_L = K_2 16 | K_PERIOD = K_W 17 | K_SEMICOLON = K_3 18 | K_SLASH = K_E 19 | [pattern] 20 | #tab move 21 | M_LSHIFT K_TAB = M_CTRL K_LEFT 22 | K_TAB = M_CTRL K_RIGHT 23 | [sequence] 24 | #tab move 25 | M_LSHIFT K_TAB = K_LEFT 26 | K_TAB = K_RIGHT 27 | -------------------------------------------------------------------------------- /linux/klystrack.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Klystrack 3 | Comment=Chiptune Tracker 4 | Comment[fr]=Tracker 8-bits 5 | Exec=klystrack %f 6 | Type=Application 7 | Icon=klystrack.png 8 | Terminal=false 9 | Categories=AudioVideo;AudioVideoEditing 10 | Keywords=tracker;music;chipsong; 11 | MimeType=audio/kt; 12 | -------------------------------------------------------------------------------- /player/Makefile: -------------------------------------------------------------------------------- 1 | ifdef COMSPEC 2 | SDL := -lSDL2main -lSDL2 -I /mingw/include/SDL2 3 | LIBS := -lmingw32 -lengine_snd 4 | else 5 | SDL := `sdl-config --libs` 6 | LIBS := -lengine_snd 7 | endif 8 | 9 | player.exe: player.c 10 | gcc -DUSESDLMUTEXES -DSTEREOOUTPUT -DENABLEAUDIODUMP -DNOSDL_MIXER -DDEBUG -o player.exe player.c -g -Wall $(LIBS) $(SDL) -I ../../klystron/src -L ../../klystron/bin.debug 11 | -------------------------------------------------------------------------------- /player/player.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Example klystrack command line replayer. Use as you like. 4 | Usage: player.exe 5 | 6 | */ 7 | 8 | /* SDL stuff */ 9 | 10 | #include "SDL.h" 11 | 12 | /* klystron stuff */ 13 | 14 | #include "snd/cyd.h" 15 | #include "snd/music.h" 16 | 17 | #include 18 | 19 | #undef main 20 | 21 | int main(int argc, char **argv) 22 | { 23 | if (argc != 2) 24 | { 25 | fprintf(stderr, "Usage: %s \n", argv[0]); 26 | return 1; 27 | } 28 | 29 | MusSong song; 30 | CydEngine cyd; 31 | MusEngine mus; 32 | 33 | memset(&song, 0, sizeof(song)); 34 | 35 | /* To be sure, let's init enough channels */ 36 | 37 | cyd_init(&cyd, 44100, MUS_MAX_CHANNELS); 38 | 39 | if (!mus_load_song(argv[1], &song, cyd.wavetable_entries)) 40 | { 41 | fprintf(stderr, "Could not open %s\n", argv[1]); 42 | cyd_deinit(&cyd); 43 | return 2; 44 | } 45 | 46 | SDL_Init(SDL_INIT_AUDIO); 47 | 48 | /* Notify the music engine about Cyd */ 49 | 50 | mus_init_engine(&mus, &cyd); 51 | 52 | /* Add Cyd in SDL_Mixer audio output queue */ 53 | 54 | cyd_register(&cyd, 2000); 55 | 56 | /* Start updating the music engine at the rate set in the song */ 57 | 58 | cyd_set_callback(&cyd, mus_advance_tick, &mus, song.song_rate); 59 | 60 | /* Start playing from position 0 */ 61 | 62 | mus_set_song(&mus, &song, 0); 63 | 64 | printf("Playing %s...\n\nPress Ctrl-C to exit.\n\n", song.title); 65 | 66 | int done = 0; 67 | 68 | while (!done) 69 | { 70 | SDL_Event e; 71 | 72 | while (SDL_PollEvent(&e)) 73 | { 74 | switch (e.type) 75 | { 76 | case SDL_QUIT: 77 | case SDL_KEYDOWN: 78 | done = 1; 79 | break; 80 | } 81 | } 82 | 83 | int song_position; 84 | 85 | mus_poll_status(&mus, &song_position, NULL, NULL, NULL, NULL, NULL, NULL); 86 | 87 | printf("Position: %4d/%d\r", song_position, song.song_length); 88 | 89 | SDL_Delay(5); 90 | } 91 | 92 | printf("\nQuit.\n"); 93 | 94 | cyd_unregister(&cyd); 95 | 96 | cyd_deinit(&cyd); 97 | 98 | cyd_unregister(&cyd); 99 | cyd_deinit(&cyd); 100 | 101 | mus_free_song(&song); 102 | 103 | SDL_Quit(); 104 | 105 | return 0; 106 | } 107 | -------------------------------------------------------------------------------- /scancode-tool/Makefile: -------------------------------------------------------------------------------- 1 | CC = gcc -s -Ic:/MinGW/include/SDL2 2 | EXE = scancode.exe 3 | 4 | $(EXE): scancode.c 5 | $(CC) -o $@ $^ -lmingw32 -lSDL2main -lSDL2 6 | -------------------------------------------------------------------------------- /scancode-tool/scancode.c: -------------------------------------------------------------------------------- 1 | #include "SDL.h" 2 | #include 3 | 4 | int main(int argc, char **argv) 5 | { 6 | SDL_Init(SDL_INIT_EVERYTHING); 7 | SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, 0); 8 | 9 | printf("Make sure the empty window is focused and hit any key to see info for that key!\n\n"); 10 | 11 | while (1) 12 | { 13 | SDL_Event e; 14 | 15 | if (SDL_PollEvent(&e)) 16 | { 17 | if (e.type == SDL_QUIT) 18 | break; 19 | 20 | if (e.type == SDL_KEYDOWN) 21 | { 22 | printf("scancode = %x\tsym = %x\tmod = %x\n", e.key.keysym.scancode, e.key.keysym.sym, e.key.keysym.mod); 23 | } 24 | } 25 | else 26 | SDL_Delay(10); 27 | } 28 | 29 | SDL_Quit(); 30 | 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /src/action.h: -------------------------------------------------------------------------------- 1 | #ifndef ACTION_H 2 | #define ACTION_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | void select_sequence_position(void *channel, void *position, void *); 30 | void select_pattern_param(void *id, void *position, void *pattern); 31 | void select_instrument_param(void *idx, void *, void *); 32 | void select_instrument(void *idx, void *relative, void *pagey); 33 | void select_wavetable(void *idx, void *, void *); 34 | void select_instrument_page(void *page, void *relative, void *); 35 | void change_default_pattern_length(void *length, void *, void *); 36 | void select_program_step(void *idx, void *, void *); 37 | void change_octave(void *delta, void *, void *); 38 | void change_song_rate(void *delta, void *, void *); 39 | void change_time_signature(void *beat, void *, void *); 40 | void play(void *from_cursor, void*, void*); 41 | void play_position(void *, void*, void*); 42 | void stop(void*,void*,void*); 43 | void change_song_speed(void *speed, void *delta, void *); 44 | void new_song_action(void *, void *, void *); 45 | void kill_instrument(void *, void *, void *); 46 | void generic_action(void *func, void *, void *); 47 | void quit_action(void *, void *, void *); 48 | void change_mode_action(void *mode, void *, void *); 49 | void enable_channel(void *channel, void *, void *); 50 | void solo_channel(void *channel, void *, void *); 51 | void enable_reverb(void *unused1, void *unused2, void *unused3); 52 | void select_all(void *, void *, void*); 53 | void clear_selection(void *, void *, void*); 54 | void cycle_focus(void *views, void *focus, void *mode); 55 | void change_song_length(void *delta, void *, void *); 56 | void change_loop_point(void *delta, void *, void *); 57 | void change_seq_steps(void *delta, void *, void *); 58 | void change_timesig(void *delta, void *, void *); 59 | void show_about_box(void *unused1, void *unused2, void *unused3); 60 | void change_channels(void *delta, void *unused1, void *unused2); 61 | void change_master_volume(void *delta, void *unused1, void *unused2); 62 | void begin_selection_action(void *unused1, void *unused2, void *unused3); 63 | void end_selection_action(void *unused1, void *unused2, void *unused3); 64 | void toggle_pixel_scale(void *, void*, void*); 65 | void change_pixel_scale(void *scale, void*, void*); 66 | void toggle_fullscreen(void *a, void*b, void*c); 67 | void change_fullscreen(void *a, void*b, void*c); 68 | void toggle_render_to_texture(void *a, void*b, void*c); 69 | void change_render_to_texture(void *a, void*b, void*c); 70 | void load_theme_action(void *a, void*b, void*c); 71 | void load_keymap_action(void *a, void*b, void*c); 72 | void unmute_all_action(void*, void*, void*); 73 | void export_wav_action(void *a, void*b, void*c); 74 | void export_channels_action(void *a, void*b, void*c); 75 | void open_data(void *type, void*b, void*c); 76 | void do_undo(void *stack, void*b, void*c); 77 | void kill_wavetable_entry(void *a, void*b, void*c); 78 | void open_menu_action(void*,void*,void*); 79 | void flip_bit_action(void *bits, void *mask, void *); 80 | void set_note_jump(void *steps, void *, void *); 81 | void change_visualizer_action(void *vis, void *unused1, void *unused2); 82 | void open_help(void *unused0, void *unused1, void *unused2); 83 | void open_help_no_lock(void *unused0, void *unused1, void *unused2); 84 | void change_oversample(void *oversample, void *unused1, void *unused2); 85 | void toggle_follow_play_position(void *unused1, void *unused2, void *unused3); 86 | void toggle_visualizer(void *unused1, void *unused2, void *unused3); 87 | void toggle_mouse_cursor(void *a, void*b, void*c); 88 | void open_recent_file(void *path, void *b, void *c); 89 | 90 | #endif 91 | -------------------------------------------------------------------------------- /src/clipboard.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "clipboard.h" 27 | #include 28 | 29 | void cp_clear(Clipboard *cp) 30 | { 31 | if (cp->data != NULL) free(cp->data); 32 | cp->data = NULL; 33 | cp->size = 0; 34 | cp->type = 0; 35 | } 36 | 37 | 38 | void cp_copy(Clipboard *cp, int type, void *data, const size_t size, int position) 39 | { 40 | if (cp->data != NULL) free(cp->data); 41 | cp->data = malloc(size); 42 | memcpy(cp->data, data, size); 43 | cp->size = size; 44 | cp->type = type; 45 | cp->position = position; 46 | } 47 | 48 | void cp_paste(Clipboard *cp, int target_type, void *dest, const size_t buffer_size) 49 | { 50 | if (target_type != cp->type || buffer_size == 0) return; 51 | memcpy(dest, cp->data, (buffer_size == ALL_ITEMS || buffer_size > cp->size) ? cp->size : buffer_size); 52 | } 53 | 54 | 55 | void cp_paste_items(Clipboard *cp, int target_type, void *dest, const size_t dest_items, const size_t item_size) 56 | { 57 | cp_paste(cp, target_type, dest, dest_items * item_size); 58 | } 59 | 60 | 61 | size_t cp_get_item_count(Clipboard *cp, const size_t item_size) 62 | { 63 | return cp->size / item_size; 64 | } 65 | 66 | 67 | void cp_copy_items(Clipboard *cp, int type, void *data, const size_t dest_items, const size_t item_size, int position) 68 | { 69 | cp_copy(cp, type, data, dest_items * item_size, position); 70 | } 71 | -------------------------------------------------------------------------------- /src/clipboard.h: -------------------------------------------------------------------------------- 1 | #ifndef CLIPBOARD_H 2 | #define CLIPBOARD_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | 31 | 32 | typedef struct 33 | { 34 | int type; 35 | void *data; 36 | size_t size; 37 | int position; 38 | } Clipboard; 39 | 40 | #include "mused.h" 41 | 42 | 43 | enum 44 | { 45 | CP_PATTERN=EDITPATTERN, 46 | CP_SEQUENCE=EDITSEQUENCE, 47 | CP_INSTRUMENT=EDITINSTRUMENT, 48 | CP_PROGRAM=EDITPROG, 49 | CP_PATTERNSEGMENT 50 | }; 51 | 52 | #define ALL_ITEMS 0xffffffff 53 | 54 | void cp_clear(Clipboard *cp); 55 | void cp_copy(Clipboard *cp, int type, void *data, const size_t size, int position); 56 | void cp_copy_items(Clipboard *cp, int type, void *data, const size_t dest_items, const size_t item_size, int position); 57 | void cp_paste(Clipboard *cp, int dest_type, void *dest, const size_t buffer_size); 58 | void cp_paste_items(Clipboard *cp, int target_type, void *dest, const size_t dest_items, const size_t item_size); 59 | size_t cp_get_item_count(Clipboard *cp, const size_t item_size); 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /src/command.h: -------------------------------------------------------------------------------- 1 | #ifndef COMMAND_H 2 | #define COMMAND_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "SDL.h" 30 | #include 31 | 32 | typedef struct { Uint16 opcode; Uint16 mask; char *name, *shortname; int minv, maxv; } InstructionDesc; 33 | 34 | const InstructionDesc * get_instruction_desc(Uint16 command); 35 | bool is_valid_command(Uint16 command); 36 | void get_command_desc(char *text, size_t buffer_size, Uint16 inst); 37 | Uint16 validate_command(Uint16 command); 38 | const InstructionDesc* list_all_commands(); 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /src/config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H 2 | #define CONFIG_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | 31 | void load_config(const char *path, bool apply); 32 | void save_config(const char *path); 33 | void apply_config(); 34 | 35 | #endif -------------------------------------------------------------------------------- /src/console.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "console.h" 27 | #include "util/bundle.h" 28 | #include "mused.h" 29 | #include "theme.h" 30 | #include 31 | 32 | extern Mused mused; 33 | extern Uint32 colors[]; 34 | 35 | void console_set_background(Console * c, int enabled) 36 | { 37 | c->background = enabled; 38 | /*c->font.surface->surface = c->fontsurface[enabled]; 39 | 40 | int l = strlen(c->font.charmap); 41 | 42 | for (int i = 0 ; i < l ; ++i) 43 | c->font.tiledescriptor[i].surface = c->font.surface;*/ 44 | } 45 | 46 | 47 | void console_set_color(Console* console, Uint32 color) 48 | { 49 | if (console->current_color != color) 50 | { 51 | console->current_color = color; 52 | font_set_color(&console->font, console->current_color); 53 | } 54 | } 55 | 56 | 57 | const SDL_Rect * console_write(Console* console, const char *string) 58 | { 59 | static SDL_Rect bounds; 60 | bounds.w = bounds.h = 0; 61 | font_write_cursor(&console->font, domain, &console->clip, &console->cursor, &bounds, string); 62 | return &bounds; 63 | } 64 | 65 | 66 | const SDL_Rect * console_write_args(Console* console, const char *string, ...) 67 | { 68 | static SDL_Rect bounds; 69 | bounds.w = bounds.h = 0; 70 | va_list va; 71 | va_start(va, string); 72 | font_write_va(&console->font, domain, &console->clip, &console->cursor, &bounds, string, va); 73 | va_end(va); 74 | return &bounds; 75 | } 76 | 77 | 78 | void console_clear(Console *console) 79 | { 80 | gfx_rect(domain, &console->clip, colors[COLOR_BACKGROUND]); 81 | console->cursor = 0; 82 | } 83 | 84 | 85 | Console * console_create(Bundle *b) 86 | { 87 | Console * c = calloc(1, sizeof(*c)); 88 | 89 | c->cursor = 0; 90 | 91 | font_load(domain, &c->font, b, "8x8.fnt"); 92 | 93 | console_set_background(c, 0); 94 | 95 | c->clip.x = 0; 96 | c->clip.y = 0; 97 | c->clip.w = domain->screen_w; 98 | c->clip.h = domain->screen_h; 99 | 100 | return c; 101 | } 102 | 103 | 104 | void console_destroy(Console *c) 105 | { 106 | font_destroy(&c->font); 107 | 108 | free(c); 109 | } 110 | 111 | 112 | void console_set_clip(Console * c, const SDL_Rect *rect) 113 | { 114 | memcpy(&c->clip, rect, sizeof(*rect)); 115 | } 116 | 117 | 118 | void console_reset_cursor(Console * c) 119 | { 120 | c->cursor = 0; 121 | } 122 | 123 | -------------------------------------------------------------------------------- /src/console.h: -------------------------------------------------------------------------------- 1 | #ifndef CONSOLE_H 2 | #define CONSOLE_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "SDL.h" 30 | #include "gfx/font.h" 31 | 32 | typedef struct 33 | { 34 | Uint32 current_color; 35 | Uint16 cursor; 36 | Font font; 37 | SDL_Rect clip; 38 | int background; 39 | } Console; 40 | 41 | void console_set_background(Console * c, int enabled); 42 | void console_reset_cursor(Console * c); 43 | void console_set_clip(Console * c, const SDL_Rect *rect); 44 | void console_clear(Console *console); 45 | Console * console_create(Bundle *b); 46 | void console_set_color(Console* console, Uint32 color); 47 | const SDL_Rect * console_write(Console* console, const char *string); 48 | const SDL_Rect * console_write_args(Console* console, const char *string, ...) __attribute__ ((format (printf, 2, 3))); 49 | void console_destroy(Console *c); 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /src/copypaste.h: -------------------------------------------------------------------------------- 1 | #ifndef COPYPASTE_H 2 | #define COPYPASTE_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | 30 | typedef struct 31 | { 32 | int start, end, keydown; 33 | } Selection; 34 | 35 | 36 | void copy(); 37 | void paste(); 38 | void join_paste(); 39 | void cut(); 40 | void delete(); 41 | void begin_selection(int position); 42 | void select_range(int position); 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /src/diskop.h: -------------------------------------------------------------------------------- 1 | #ifndef DISKOP_H 2 | #define DISKOP_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | #include "SDL_rwops.h" 31 | #include "songstats.h" 32 | 33 | enum 34 | { 35 | OD_T_SONG, 36 | OD_T_INSTRUMENT, 37 | OD_T_WAVETABLE, 38 | OD_T_WAVETABLE_RAW_S, 39 | OD_T_WAVETABLE_RAW_U, 40 | OD_T_FX, 41 | /*------*/ 42 | OD_T_N_TYPES 43 | }; 44 | 45 | enum 46 | { 47 | OD_A_OPEN, 48 | OD_A_SAVE 49 | }; 50 | 51 | int open_song(FILE *f); 52 | int save_song(SDL_RWops *f); 53 | int save_song_inner(SDL_RWops *f, SongStats *stats); 54 | int open_wavetable(FILE *f); 55 | int open_instrument(FILE *f); 56 | int save_instrument(SDL_RWops *f); 57 | int open_fx(FILE *f); 58 | int save_fx(SDL_RWops *f); 59 | 60 | /* action */ 61 | void open_data(void *type, void *action, void*c); 62 | 63 | void init_recent_files_list(); 64 | void deinit_recent_files_list(); 65 | void update_recent_files_list(const char *path); 66 | 67 | #endif 68 | -------------------------------------------------------------------------------- /src/edit.h: -------------------------------------------------------------------------------- 1 | #ifndef EDIT_H 2 | #define EDIT_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "snd/music.h" 30 | 31 | typedef enum 32 | { 33 | S_T_PATTERN, 34 | S_T_SEQUENCE, 35 | S_T_MODE, 36 | S_T_SONGINFO, 37 | S_T_FX, 38 | S_T_WAVE_PARAM, 39 | S_T_WAVE_DATA, 40 | S_T_WAVE_NAME, 41 | S_T_INSTRUMENT 42 | } SHType; 43 | 44 | 45 | /* a, b = id for cascading snapshots */ 46 | void snapshot(SHType type); 47 | void snapshot_cascade(SHType type, int a, int b); 48 | 49 | void zero_step(MusStep *step); 50 | void clone_pattern(void *, void *, void *); 51 | void clone_each_pattern(void *, void *, void *); 52 | void get_unused_pattern(void*, void*, void*); 53 | void get_unused_pattern_all_tracks(void *, void *, void *); 54 | void expand_pattern(void *factor, void *, void *); 55 | void shrink_pattern(void *factor, void *, void *); 56 | void interpolate(void *, void *, void *); 57 | void transpose_note_data(void *semitones, void *unused1, void *unused2); 58 | void split_pattern(void *unused1, void *unused2, void *unused3); 59 | 60 | #endif 61 | -------------------------------------------------------------------------------- /src/event.h: -------------------------------------------------------------------------------- 1 | #ifndef EVENT_H 2 | #define EVENT_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "SDL.h" 30 | #include "gui/slider.h" 31 | 32 | void edit_instrument_event(SDL_Event *e); 33 | void sequence_event(SDL_Event *e); 34 | void pattern_event(SDL_Event *e); 35 | void edit_program_event(SDL_Event *e); 36 | void edit_text(SDL_Event *e); 37 | int generic_edit_text(SDL_Event *e, char *edit_buffer, size_t edit_buffer_size, int *editpos); 38 | void fx_event(SDL_Event *e); 39 | void fx_add_param(int d); 40 | void wave_event(SDL_Event *e); 41 | void wave_add_param(int d); 42 | void songinfo_event(SDL_Event *e); 43 | void songinfo_add_param(int d); 44 | void instrument_add_param(int a); 45 | void del_sequence(int first,int last,int track); 46 | void add_sequence(int channel, int position, int pattern, int offset); 47 | void set_room_size(int fx, int size, int vol, int dec); 48 | void update_position_sliders(); 49 | void update_horiz_sliders(); 50 | void note_event(SDL_Event *e); 51 | 52 | enum 53 | { 54 | PED_NOTE, 55 | PED_INSTRUMENT1, 56 | PED_INSTRUMENT2, 57 | PED_VOLUME1, 58 | PED_VOLUME2, 59 | PED_LEGATO, 60 | PED_SLIDE, 61 | PED_VIB, 62 | PED_COMMAND1, 63 | PED_COMMAND2, 64 | PED_COMMAND3, 65 | PED_COMMAND4, 66 | PED_PARAMS 67 | }; 68 | 69 | #define PED_CTRL PED_LEGATO 70 | 71 | enum 72 | { 73 | P_INSTRUMENT, 74 | P_NAME, 75 | P_BASENOTE, 76 | P_FINETUNE, 77 | P_LOCKNOTE, 78 | P_DRUM, 79 | P_KEYSYNC, 80 | P_INVVIB, 81 | P_SETPW, 82 | P_SETCUTOFF, 83 | P_SLIDESPEED, 84 | P_PULSE, 85 | P_PW, 86 | P_SAW, 87 | P_TRIANGLE, 88 | P_NOISE, 89 | P_METAL, 90 | P_LFSR, 91 | P_LFSRTYPE, 92 | P_1_4TH, 93 | P_WAVE, 94 | P_WAVE_ENTRY, 95 | P_WAVE_OVERRIDE_ENV, 96 | P_WAVE_LOCK_NOTE, 97 | P_VOLUME, 98 | P_RELVOL, 99 | P_ATTACK, 100 | P_DECAY, 101 | P_SUSTAIN, 102 | P_RELEASE, 103 | P_BUZZ, 104 | P_BUZZ_SEMI, 105 | P_BUZZ_FINE, 106 | P_BUZZ_SHAPE, 107 | P_SYNC, 108 | P_SYNCSRC, 109 | P_RINGMOD, 110 | P_RINGMODSRC, 111 | P_FILTER, 112 | P_FLTTYPE, 113 | P_CUTOFF, 114 | P_RESONANCE, 115 | P_FX, 116 | P_FXBUS, 117 | P_VIBSPEED, 118 | P_VIBDEPTH, 119 | P_VIBSHAPE, 120 | P_VIBDELAY, 121 | P_PWMSPEED, 122 | P_PWMDEPTH, 123 | P_PWMSHAPE, 124 | P_PROGPERIOD, 125 | P_NORESTART, 126 | P_MULTIOSC, 127 | P_FM_ENABLE, 128 | P_FM_MODULATION, 129 | P_FM_FEEDBACK, 130 | P_FM_HARMONIC_CARRIER, 131 | P_FM_HARMONIC_MODULATOR, 132 | P_FM_ATTACK, 133 | P_FM_DECAY, 134 | P_FM_SUSTAIN, 135 | P_FM_RELEASE, 136 | P_FM_ENV_START, 137 | P_FM_WAVE, 138 | P_FM_WAVE_ENTRY, 139 | /*----------*/ 140 | P_PARAMS 141 | }; 142 | 143 | enum 144 | { 145 | W_WAVE, 146 | W_NAME, 147 | W_RATE, 148 | W_BASE, 149 | W_BASEFINE, 150 | W_INTERPOLATE, 151 | W_LOOP, 152 | W_LOOPBEGIN, 153 | W_LOOPPINGPONG, 154 | W_LOOPEND, 155 | W_NUMOSCS, 156 | W_OSCTYPE, 157 | W_OSCMUL, 158 | W_OSCSHIFT, 159 | W_OSCEXP, 160 | W_OSCABS, 161 | W_OSCNEG, 162 | W_WAVELENGTH, 163 | W_RNDGEN, 164 | W_GENERATE, 165 | W_RND, 166 | W_TOOLBOX, 167 | /* ----- */ 168 | W_N_PARAMS 169 | }; 170 | 171 | enum 172 | { 173 | R_MULTIPLEX, 174 | R_MULTIPLEX_PERIOD, 175 | R_PITCH_INACCURACY, 176 | R_FX_BUS, 177 | R_FX_BUS_NAME, 178 | R_CRUSH, 179 | R_CRUSHBITS, 180 | R_CRUSHDOWNSAMPLE, 181 | R_CRUSHDITHER, 182 | R_CRUSHGAIN, 183 | R_CHORUS, 184 | R_MINDELAY, 185 | R_MAXDELAY, 186 | R_SEPARATION, 187 | R_RATE, 188 | R_ENABLE, 189 | R_ROOMSIZE, 190 | R_ROOMVOL, 191 | R_ROOMDECAY, 192 | R_SNAPTICKS, 193 | R_TAPENABLE, 194 | R_TAP, 195 | R_DELAY, 196 | R_GAIN, 197 | R_PANNING, 198 | /* ---- */ 199 | R_N_PARAMS 200 | }; 201 | 202 | enum 203 | { 204 | SI_LENGTH, 205 | SI_LOOP, 206 | SI_STEP, 207 | SI_SPEED1, 208 | SI_SPEED2, 209 | SI_RATE, 210 | SI_TIME, 211 | SI_OCTAVE, 212 | SI_CHANNELS, 213 | SI_MASTERVOL, 214 | /*--------*/ 215 | SI_N_PARAMS 216 | }; 217 | 218 | #endif 219 | -------------------------------------------------------------------------------- /src/export.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "export.h" 27 | #include "gui/bevel.h" 28 | #include "snd/cyd.h" 29 | #include "macros.h" 30 | #include "mused.h" 31 | #include "gfx/gfx.h" 32 | #include "gui/view.h" 33 | #include "mybevdefs.h" 34 | #include "gfx/font.h" 35 | #include "theme.h" 36 | #include 37 | #include "wavewriter.h" 38 | 39 | extern GfxDomain *domain; 40 | 41 | bool export_wav(MusSong *song, CydWavetableEntry * entry, FILE *f, int channel) 42 | { 43 | bool success = false; 44 | 45 | MusEngine mus; 46 | CydEngine cyd; 47 | 48 | cyd_init(&cyd, 44100, MUS_MAX_CHANNELS); 49 | cyd.flags |= CYD_SINGLE_THREAD; 50 | mus_init_engine(&mus, &cyd); 51 | mus.volume = song->master_volume; 52 | mus_set_fx(&mus, song); 53 | CydWavetableEntry * prev_entry = cyd.wavetable_entries; // save entries so they can be free'd 54 | cyd.wavetable_entries = entry; 55 | cyd_set_callback(&cyd, mus_advance_tick, &mus, song->song_rate); 56 | mus_set_song(&mus, song, 0); 57 | song->flags |= MUS_NO_REPEAT; 58 | 59 | if (channel >= 0) 60 | { 61 | // if channel is positive then only export that channel (mute other chans) 62 | 63 | for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) 64 | mus.channel[i].flags |= MUS_CHN_DISABLED; 65 | 66 | mus.channel[channel].flags &= ~MUS_CHN_DISABLED; 67 | } 68 | else 69 | { 70 | for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) 71 | mus.channel[i].flags &= ~MUS_CHN_DISABLED; 72 | } 73 | 74 | const int channels = 2; 75 | Sint16 buffer[2000 * channels]; 76 | 77 | int last_percentage = -1; 78 | 79 | WaveWriter *ww = ww_create(f, cyd.sample_rate, 2); 80 | 81 | for (;;) 82 | { 83 | memset(buffer, 0, sizeof(buffer)); // Zero the input to cyd 84 | cyd_output_buffer_stereo(&cyd, (Uint8*)buffer, sizeof(buffer)); 85 | 86 | if (cyd.samples_output > 0) 87 | ww_write(ww, buffer, cyd.samples_output); 88 | 89 | if (mus.song_position >= song->song_length) break; 90 | 91 | if (song->song_length != 0) 92 | { 93 | int percentage = (mus.song_position + (channel == -1 ? 0 : (channel * song->song_length))) * 100 / (song->song_length * (channel == -1 ? 1 : song->num_channels)); 94 | 95 | if (percentage > last_percentage) 96 | { 97 | last_percentage = percentage; 98 | 99 | SDL_Rect area = {domain->screen_w / 2 - 140, domain->screen_h / 2 - 24, 280, 48}; 100 | bevel(domain, &area, mused.slider_bevel, BEV_MENU); 101 | 102 | adjust_rect(&area, 8); 103 | area.h = 16; 104 | 105 | bevel(domain, &area, mused.slider_bevel, BEV_FIELD); 106 | 107 | adjust_rect(&area, 2); 108 | 109 | int t = area.w; 110 | area.w = area.w * percentage / 100; 111 | 112 | gfx_rect(domain, &area, colors[COLOR_PROGRESS_BAR]); 113 | 114 | area.y += 16 + 4 + 4; 115 | area.w = t; 116 | 117 | font_write_args(&mused.smallfont, domain, &area, "Exporting... Press ESC to abort."); 118 | 119 | SDL_Event e; 120 | 121 | while (SDL_PollEvent(&e)) 122 | { 123 | if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) 124 | { 125 | goto abort; 126 | } 127 | } 128 | 129 | gfx_domain_flip(domain); 130 | } 131 | } 132 | } 133 | 134 | success = true; 135 | 136 | abort:; 137 | 138 | ww_finish(ww); 139 | 140 | cyd.wavetable_entries = prev_entry; 141 | 142 | cyd_deinit(&cyd); 143 | 144 | song->flags &= ~MUS_NO_REPEAT; 145 | 146 | return success; 147 | } 148 | 149 | -------------------------------------------------------------------------------- /src/export.h: -------------------------------------------------------------------------------- 1 | #ifndef EXPORT_H 2 | #define EXPORT_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "snd/music.h" 30 | 31 | bool export_wav(MusSong *song, CydWavetableEntry * entry, FILE *f, int channel); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/help.h: -------------------------------------------------------------------------------- 1 | #ifndef HELP_H 2 | #define HELP_H 3 | 4 | #include "mused.h" 5 | #include "gfx/gfx.h" 6 | 7 | int helpbox(const char *title, GfxDomain *domain, GfxSurface *gfx, const Font *largefont, const Font *smallfont); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /src/import/ahx.h: -------------------------------------------------------------------------------- 1 | #ifndef AHX_H 2 | #define AHX_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (SDL_Surface *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | 31 | int import_ahx(FILE *f); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/import/hubbard.h: -------------------------------------------------------------------------------- 1 | #ifndef HUBBARD_H 2 | #define HUBBARD_H 3 | 4 | #include 5 | 6 | typedef struct 7 | { 8 | unsigned short int org; 9 | unsigned char data[65536]; 10 | struct 11 | { 12 | unsigned short int songtab; 13 | unsigned short int patternptrhi, patternptrlo; 14 | unsigned short int songs[16][3]; 15 | unsigned short int instruments; 16 | } addr; 17 | 18 | // decoded data 19 | 20 | struct { 21 | unsigned short int pulse_width; 22 | unsigned char waveform; 23 | unsigned char a, d, s, r; 24 | unsigned char vibrato_depth; 25 | unsigned char pwm; 26 | unsigned char fx; 27 | } instrument[256]; 28 | 29 | struct { 30 | struct { 31 | unsigned char note; 32 | unsigned char length; 33 | unsigned char legato; 34 | unsigned char instrument; 35 | char portamento; 36 | } note[256]; 37 | int length; 38 | } pattern[256]; 39 | 40 | int n_patterns; 41 | 42 | struct 43 | { 44 | unsigned char pattern[256]; 45 | int length; 46 | } track[3]; 47 | 48 | int n_tracks; 49 | int n_subsongs, n_instruments; 50 | int vib_type; 51 | } hubbard_t; 52 | 53 | int import_hubbard(FILE *f); 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /src/import/hubdialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "hubbard.h" 4 | 5 | int hub_view(hubbard_t *hub); 6 | -------------------------------------------------------------------------------- /src/import/import.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "mused.h" 27 | #include "event.h" 28 | #include "import.h" 29 | #include "mod.h" 30 | #include "ahx.h" 31 | #include "xm.h" 32 | #include "org.h" 33 | #include "hubbard.h" 34 | #include "gui/toolutil.h" 35 | #include "gui/msgbox.h" 36 | #include "diskop.h" 37 | #include "SDL_endian.h" 38 | #include "action.h" 39 | #include "optimize.h" 40 | 41 | 42 | extern Mused mused; 43 | extern GfxDomain *domain; 44 | 45 | void import_module(void *type, void* unused1, void* unused2) 46 | { 47 | int r; 48 | if (mused.modified) r = confirm_ync(domain, mused.slider_bevel, &mused.largefont, "Save song?"); 49 | else r = -1; 50 | 51 | if (r == 0) return; 52 | if (r == 1) 53 | { 54 | int r; 55 | 56 | open_data(MAKEPTR(OD_T_SONG), MAKEPTR(OD_A_SAVE), &r); 57 | 58 | if (!r) return; 59 | } 60 | 61 | static const char *mod_name[] = {"a Protracker", "an AHX", "a FastTracker II", "a Cave Story", "a Rob Hubbard"}; 62 | static const char *mod_ext[] = {"mod", "ahx", "xm", "org", "sid"}; 63 | 64 | char buffer[100]; 65 | snprintf(buffer, sizeof(buffer), "Import %s song", mod_name[CASTPTR(int, type)]); 66 | 67 | FILE * f = open_dialog("rb", buffer, mod_ext[CASTPTR(int, type)], domain, mused.slider_bevel, &mused.largefont, &mused.smallfont, NULL); 68 | 69 | if (!f) return; 70 | 71 | stop(NULL, NULL, NULL); 72 | new_song(); 73 | 74 | switch (CASTPTR(int, type)) 75 | { 76 | case IMPORT_MOD: r = import_mod(f); break; 77 | case IMPORT_AHX: r = import_ahx(f); break; 78 | case IMPORT_XM: r = import_xm(f); break; 79 | case IMPORT_ORG: r = import_org(f); break; 80 | case IMPORT_HUBBARD: r = import_hubbard(f); break; 81 | } 82 | 83 | if (CASTPTR(int, type) != IMPORT_HUBBARD) 84 | { 85 | if (!r) 86 | { 87 | snprintf(buffer, sizeof(buffer), "Not %s song", mod_name[CASTPTR(int, type)]); 88 | msgbox(domain, mused.slider_bevel, &mused.largefont, buffer, MB_OK); 89 | } 90 | else 91 | { 92 | optimize_song(&mused.song); 93 | } 94 | } 95 | else 96 | { 97 | optimize_song(&mused.song); 98 | } 99 | 100 | mused.song.num_patterns = NUM_PATTERNS; 101 | 102 | fclose(f); 103 | 104 | set_channels(mused.song.num_channels); 105 | } 106 | 107 | -------------------------------------------------------------------------------- /src/import/import.h: -------------------------------------------------------------------------------- 1 | #ifndef IMPORT_H 2 | #define IMPORT_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | enum { IMPORT_MOD, IMPORT_AHX, IMPORT_XM, IMPORT_ORG, IMPORT_HUBBARD }; 30 | 31 | void import_module(void *type, void*, void*); 32 | 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /src/import/mod.h: -------------------------------------------------------------------------------- 1 | #ifndef MOD_H 2 | #define MOD_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (SDL_Surface *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | #include "SDL.h" 31 | 32 | int import_mod(FILE *f); 33 | Uint16 find_command_pt(Uint16 command, int sample_length); 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /src/import/org.h: -------------------------------------------------------------------------------- 1 | #ifndef ORG_H 2 | #define ORG_H 3 | 4 | /* 5 | Copyright (c) 2009-2011 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (SDL_Surface *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | 31 | int import_org(FILE *f); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/import/xm.h: -------------------------------------------------------------------------------- 1 | #ifndef XM_H 2 | #define XM_H 3 | 4 | /* 5 | Copyright (c) 2009-2011 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (SDL_Surface *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include 30 | 31 | int import_xm(FILE *f); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/key.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2011 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #ifndef KEY_H 27 | #define KEY_H 28 | 29 | #include "SDL.h" 30 | 31 | void translate_key_event(SDL_KeyboardEvent *e); 32 | void load_keymap(const char *name); 33 | void enum_keymaps(); 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /src/keytab.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2011 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "keytab.h" 27 | 28 | const KeyDef keydefs[] = 29 | { 30 | KEYDEF(BACKSPACE), 31 | KEYDEF(TAB), 32 | KEYDEF(CLEAR), 33 | KEYDEF(RETURN), 34 | KEYDEF(PAUSE), 35 | KEYDEF(ESCAPE), 36 | KEYDEF(SPACE), 37 | KEYDEF(EXCLAIM), 38 | KEYDEF(QUOTEDBL), 39 | KEYDEF(HASH), 40 | KEYDEF(DOLLAR), 41 | KEYDEF(AMPERSAND), 42 | KEYDEF(QUOTE), 43 | KEYDEF(LEFTPAREN), 44 | KEYDEF(RIGHTPAREN), 45 | KEYDEF(ASTERISK), 46 | KEYDEF(PLUS), 47 | KEYDEF(COMMA), 48 | KEYDEF(MINUS), 49 | KEYDEF(PERIOD), 50 | KEYDEF(SLASH), 51 | KEYDEF(0), 52 | KEYDEF(1), 53 | KEYDEF(2), 54 | KEYDEF(3), 55 | KEYDEF(4), 56 | KEYDEF(5), 57 | KEYDEF(6), 58 | KEYDEF(7), 59 | KEYDEF(8), 60 | KEYDEF(9), 61 | KEYDEF(COLON), 62 | KEYDEF(SEMICOLON), 63 | KEYDEF(LESS), 64 | KEYDEF(EQUALS), 65 | KEYDEF(GREATER), 66 | KEYDEF(QUESTION), 67 | KEYDEF(AT), 68 | KEYDEF(LEFTBRACKET), 69 | KEYDEF(BACKSLASH), 70 | KEYDEF(RIGHTBRACKET), 71 | KEYDEF(CARET), 72 | KEYDEF(UNDERSCORE), 73 | KEYDEF(BACKQUOTE), 74 | KEYDEF(a), 75 | KEYDEF(b), 76 | KEYDEF(c), 77 | KEYDEF(d), 78 | KEYDEF(e), 79 | KEYDEF(f), 80 | KEYDEF(g), 81 | KEYDEF(h), 82 | KEYDEF(i), 83 | KEYDEF(j), 84 | KEYDEF(k), 85 | KEYDEF(l), 86 | KEYDEF(m), 87 | KEYDEF(n), 88 | KEYDEF(o), 89 | KEYDEF(p), 90 | KEYDEF(q), 91 | KEYDEF(r), 92 | KEYDEF(s), 93 | KEYDEF(t), 94 | KEYDEF(u), 95 | KEYDEF(v), 96 | KEYDEF(w), 97 | KEYDEF(x), 98 | KEYDEF(y), 99 | KEYDEF(z), 100 | KEYDEF(DELETE), 101 | KEYDEF(KP_0), 102 | KEYDEF(KP_1), 103 | KEYDEF(KP_2), 104 | KEYDEF(KP_3), 105 | KEYDEF(KP_4), 106 | KEYDEF(KP_5), 107 | KEYDEF(KP_6), 108 | KEYDEF(KP_7), 109 | KEYDEF(KP_8), 110 | KEYDEF(KP_9), 111 | KEYDEF(KP_PERIOD), 112 | KEYDEF(KP_DIVIDE), 113 | KEYDEF(KP_MULTIPLY), 114 | KEYDEF(KP_MINUS), 115 | KEYDEF(KP_PLUS), 116 | KEYDEF(KP_ENTER), 117 | KEYDEF(KP_EQUALS), 118 | KEYDEF(UP), 119 | KEYDEF(DOWN), 120 | KEYDEF(RIGHT), 121 | KEYDEF(LEFT), 122 | KEYDEF(INSERT), 123 | KEYDEF(HOME), 124 | KEYDEF(END), 125 | KEYDEF(PAGEUP), 126 | KEYDEF(PAGEDOWN), 127 | KEYDEF(F1), 128 | KEYDEF(F2), 129 | KEYDEF(F3), 130 | KEYDEF(F4), 131 | KEYDEF(F5), 132 | KEYDEF(F6), 133 | KEYDEF(F7), 134 | KEYDEF(F8), 135 | KEYDEF(F9), 136 | KEYDEF(F10), 137 | KEYDEF(F11), 138 | KEYDEF(F12), 139 | KEYDEF(F13), 140 | KEYDEF(F14), 141 | KEYDEF(F15), 142 | KEYDEF(CAPSLOCK), 143 | KEYDEF(SCROLLLOCK), 144 | KEYDEF(RSHIFT), 145 | KEYDEF(LSHIFT), 146 | KEYDEF(RCTRL), 147 | KEYDEF(LCTRL), 148 | KEYDEF(RALT), 149 | KEYDEF(LALT), 150 | KEYDEF(MODE), 151 | KEYDEF(HELP), 152 | KEYDEF(PRINTSCREEN), 153 | KEYDEF(SYSREQ), 154 | KEYDEF(MENU), 155 | KEYDEF(POWER), 156 | KEYDEF(UNDO), 157 | {NULL,0} 158 | }; 159 | 160 | 161 | const KeyDef moddefs[] = 162 | { 163 | MODDEF(LSHIFT), 164 | MODDEF(RSHIFT), 165 | MODDEF(LCTRL), 166 | MODDEF(RCTRL), 167 | MODDEF(LALT), 168 | MODDEF(RALT), 169 | MODDEF(NUM), 170 | MODDEF(CAPS), 171 | MODDEF(MODE), 172 | MODDEF(CTRL), 173 | MODDEF(SHIFT), 174 | MODDEF(ALT), 175 | {NULL,0} 176 | }; 177 | -------------------------------------------------------------------------------- /src/keytab.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2011 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #ifndef KEYTAB_H 27 | #define KEYTAB_H 28 | 29 | #include "SDL.h" 30 | 31 | typedef enum { KEYSYM, SCANCODE } KeyTranType; 32 | 33 | typedef struct 34 | { 35 | KeyTranType type; 36 | int focus; 37 | int from_mod; 38 | int from_key; 39 | int from_scancode; 40 | int to_mod; 41 | int to_key; 42 | int to_scancode; 43 | } KeyTran; 44 | 45 | typedef struct 46 | { 47 | const char *name; 48 | int key; 49 | } KeyDef; 50 | 51 | #define KEYDEF(key) {"K_"#key, SDLK_##key} 52 | #define MODDEF(key) {"M_"#key, KMOD_##key} 53 | 54 | extern const KeyDef keydefs[]; 55 | extern const KeyDef moddefs[]; 56 | 57 | #endif 58 | -------------------------------------------------------------------------------- /src/memwriter.c: -------------------------------------------------------------------------------- 1 | #include "memwriter.h" 2 | #include "macros.h" 3 | #include 4 | #include 5 | 6 | static Sint64 mw_size(SDL_RWops *ops) 7 | { 8 | MemWriter *mem = ops->hidden.unknown.data1; 9 | return mem->size; 10 | } 11 | 12 | static Sint64 mw_seek(SDL_RWops *ops, Sint64 position, int mode) 13 | { 14 | MemWriter *mem = ops->hidden.unknown.data1; 15 | switch (mode) 16 | { 17 | case RW_SEEK_SET: 18 | mem->position = position; 19 | break; 20 | 21 | case RW_SEEK_CUR: 22 | mem->position += position; 23 | break; 24 | 25 | case RW_SEEK_END: 26 | mem->position = mem->size - position; 27 | break; 28 | } 29 | 30 | return mem->position; 31 | } 32 | 33 | 34 | static size_t mw_read(SDL_RWops *ops, void *data, size_t size, size_t num) 35 | { 36 | return 0; 37 | } 38 | 39 | 40 | static size_t mw_write(SDL_RWops *ops, const void *data, size_t size, size_t num) 41 | { 42 | MemWriter *mem = ops->hidden.unknown.data1; 43 | if (mem->position + size * num > mem->allocated) 44 | { 45 | int chunk = mem->position + size * num - mem->allocated; 46 | 47 | if (chunk < 1024) 48 | chunk = 1024; 49 | 50 | mem->allocated = mem->allocated + chunk; 51 | mem->data = realloc(mem->data, mem->allocated); 52 | 53 | debug("MemWriter: Allocating %d bytes (%d bytes allocated total)", chunk, (int)mem->allocated); 54 | } 55 | 56 | memcpy(mem->data + mem->position, data, size * num); 57 | 58 | mem->position += size * num; 59 | 60 | if (mem->size < mem->position) 61 | { 62 | mem->size = mem->position; 63 | } 64 | 65 | return size * num; 66 | } 67 | 68 | 69 | static int mw_close(SDL_RWops *ops) 70 | { 71 | MemWriter *mem = ops->hidden.unknown.data1; 72 | int r = 0; 73 | 74 | if (mem->flush) 75 | { 76 | debug("MemWriter: Flushing %d bytes to disk", (int)mem->size); 77 | r = fwrite(mem->data, mem->size, 1, mem->flush) == mem->size ? 0 : -1; 78 | } 79 | 80 | free(mem->data); 81 | free(mem); 82 | SDL_FreeRW(ops); 83 | 84 | return r; 85 | } 86 | 87 | 88 | SDL_RWops * create_memwriter(FILE *flush) 89 | { 90 | MemWriter *mem = malloc(sizeof(*mem)); 91 | mem->position = 0; 92 | mem->data = NULL; 93 | mem->size = 0; 94 | mem->allocated = 0; 95 | mem->flush = flush; 96 | 97 | SDL_RWops *ops = SDL_AllocRW(); 98 | ops->seek = mw_seek; 99 | ops->write = mw_write; 100 | ops->read = mw_read; 101 | ops->close = mw_close; 102 | ops->size = mw_size; 103 | ops->type =0x1234; 104 | ops->hidden.unknown.data1 = mem; 105 | 106 | return ops; 107 | } 108 | -------------------------------------------------------------------------------- /src/memwriter.h: -------------------------------------------------------------------------------- 1 | #ifndef MEMWRITER_H 2 | #define MEMWRITER_H 3 | 4 | #include 5 | 6 | typedef struct 7 | { 8 | void *data; 9 | size_t allocated, size; 10 | size_t position; 11 | FILE *flush; 12 | } MemWriter; 13 | 14 | #include "SDL_rwops.h" 15 | 16 | SDL_RWops * create_memwriter(); 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /src/midi.h: -------------------------------------------------------------------------------- 1 | #ifndef MIDI_H 2 | #define MIDI_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (SDL_Surface *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #ifdef MIDI 30 | 31 | #include "SDL.h" 32 | 33 | #include "gui/menu.h" 34 | 35 | extern Menu midi_menu[]; 36 | 37 | void midi_event(SDL_Event *e); 38 | void midi_init(); 39 | void midi_deinit(); 40 | void midi_set_channel(void *chn, void *unused1, void *unused2); 41 | 42 | #endif 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /src/mybevdefs.h: -------------------------------------------------------------------------------- 1 | #ifndef MYBEVDEFS_H 2 | #define MYBEVDEFS_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "gui/bevdefs.h" 30 | 31 | enum 32 | { 33 | BEV_SELECTED_PATTERN_ROW = BEV_SELECTED_ROW, 34 | BEV_SEQUENCE_PLAY_POS = BEV_USER, 35 | BEV_BACKGROUND, 36 | BEV_SELECTED_SEQUENCE_ROW, 37 | BEV_SEQUENCE_BORDER, 38 | BEV_SEQUENCE_LOOP, 39 | BEV_THIN_FRAME, 40 | BEV_SELECTION, 41 | BEV_EDIT_CURSOR, 42 | BEV_PATTERN, 43 | BEV_PATTERN_CURRENT 44 | }; 45 | 46 | enum 47 | { 48 | DECAL_AUDIO_ENABLED = DECAL_USER, 49 | DECAL_AUDIO_DISABLED, 50 | DECAL_MODE_PATTERN, 51 | DECAL_MODE_SEQUENCE, 52 | DECAL_MODE_CLASSIC, 53 | DECAL_MODE_INSTRUMENT, 54 | DECAL_MODE_FX, 55 | DECAL_MODE_WAVETABLE, 56 | DECAL_MODE_PATTERN_SELECTED, 57 | DECAL_MODE_SEQUENCE_SELECTED, 58 | DECAL_MODE_CLASSIC_SELECTED, 59 | DECAL_MODE_INSTRUMENT_SELECTED, 60 | DECAL_MODE_FX_SELECTED, 61 | DECAL_MODE_WAVETABLE_SELECTED, 62 | DECAL_TOOLBAR_VISUALIZATIONS, 63 | DECAL_TOOLBAR_FULLSCREEN, 64 | DECAL_TOOLBAR_QUIT, 65 | DECAL_COMPACT, 66 | DECAL_COMPACT_SELETED, 67 | DECAL_FOCUS, 68 | DECAL_FOCUS_SELETED 69 | }; 70 | 71 | #endif 72 | -------------------------------------------------------------------------------- /src/mymsg.h: -------------------------------------------------------------------------------- 1 | #ifndef MYMSG_H 2 | #define MYMSG_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (SDL_Surface *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | enum 30 | { 31 | MSG_EVENTHIT = SDL_USEREVENT + 1, 32 | MSG_NOTEON, 33 | MSG_NOTEOFF, 34 | MSG_PROGRAMCHANGE, 35 | MSG_CLOCK, 36 | MSG_START, 37 | MSG_CONTINUE, 38 | MSG_STOP, 39 | MSG_SPP 40 | }; 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /src/nostalgy.c: -------------------------------------------------------------------------------- 1 | #include "nostalgy.h" 2 | #include 3 | 4 | void nos_decrunch(GfxDomain *domain) 5 | { 6 | static const Uint32 palette[] = 7 | { 8 | 0x000000, 9 | 0xFFFFFF, 10 | 0x68372B, 11 | 0x70A4B2, 12 | 0x6F3D86, 13 | 0x588D43, 14 | 0x352879, 15 | 0xB8C76F, 16 | 0x6F4F25, 17 | 0x433900, 18 | 0x9A6759, 19 | 0x444444, 20 | 0x6C6C6C, 21 | 0x9AD284, 22 | 0x6C5EB5, 23 | 0x959595 24 | }; 25 | 26 | for (int i = 0 ; i < 60 ; ++i) 27 | { 28 | for (int y = 0 ; y < domain->screen_h ; ) 29 | { 30 | int h = rand() & 15; 31 | { 32 | SDL_Rect line = {0, y, domain->screen_w, h}; 33 | gfx_rect(domain, &line, palette[rand() & 15]); 34 | } 35 | 36 | y += h; 37 | } 38 | gfx_domain_flip(domain); 39 | SDL_Delay(15); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/nostalgy.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "gfx/gfx.h" 4 | 5 | void nos_decrunch(GfxDomain *domain); 6 | -------------------------------------------------------------------------------- /src/optimize.h: -------------------------------------------------------------------------------- 1 | #ifndef OPTIMIZE_H 2 | #define OPTIMIZE_H 3 | 4 | /* 5 | Copyright (c) 2009-2011 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "snd/music.h" 30 | #include 31 | 32 | void optimize_duplicate_patterns(MusSong *song); 33 | void optimize_song(MusSong *song); 34 | bool is_pattern_empty(const MusPattern *a); 35 | bool is_pattern_equal(const MusPattern *a, const MusPattern *b); 36 | bool is_instrument_used(const MusSong *song, int instrument); 37 | bool is_wavetable_used(const MusSong *song, int wavetable); 38 | 39 | void optimize_patterns_action(void *unused1, void *unused2, void *unused3); 40 | void optimize_instruments_action(void *unused1, void *unused2, void *unused3); 41 | void optimize_wavetables_action(void *unused1, void *unused2, void *unused3); 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /src/shortcutdefs.h: -------------------------------------------------------------------------------- 1 | #ifndef SHORTCUTDEFS_H 2 | #define SHORTCUTDEFS_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "gui/shortcuts.h" 30 | 31 | extern const KeyShortcut shortcuts[]; 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/songstats.h: -------------------------------------------------------------------------------- 1 | #ifndef SONG_STATS_H 2 | #define SONG_STATS_H 3 | 4 | enum 5 | { 6 | STATS_HEADER, 7 | STATS_FX, 8 | STATS_DEFVOLPAN, 9 | STATS_INSTRUMENTS, 10 | STATS_SEQUENCE, 11 | STATS_PATTERNS, 12 | STATS_WAVETABLE, 13 | STATS_WAVETABLE_NAMES, 14 | N_STATS 15 | }; 16 | 17 | typedef struct 18 | { 19 | int size[N_STATS]; 20 | int total_size; 21 | } SongStats; 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /src/stats.c: -------------------------------------------------------------------------------- 1 | #include "stats.h" 2 | #include "memwriter.h" 3 | #include "diskop.h" 4 | #include "macros.h" 5 | #include "mused.h" 6 | #include "gui/msgbox.h" 7 | 8 | static void get_stats(SongStats *stats) 9 | { 10 | SDL_RWops *rw = create_memwriter(NULL); 11 | save_song_inner(rw, stats); 12 | SDL_RWclose(rw); 13 | } 14 | 15 | void song_stats(void *unused1, void *unused2, void *unused3) 16 | { 17 | SongStats stats; 18 | get_stats(&stats); 19 | 20 | char str[1000]; 21 | snprintf(str, sizeof(str), 22 | "Header: %6d bytes %2d %%\n" 23 | "FX: %6d bytes %2d %%\n" 24 | "Def.vol/pan: %6d bytes %2d %%\n" 25 | "Instruments: %6d bytes %2d %%\n" 26 | "Sequence: %6d bytes %2d %%\n" 27 | "Patterns: %6d bytes %2d %%\n" 28 | "Wavetable: %6d bytes %2d %%\n" 29 | "Wave names: %6d bytes %2d %%\n" 30 | "-------------------------------\n" 31 | "TOTAL: %6d bytes", 32 | stats.size[STATS_HEADER], stats.size[STATS_HEADER] * 100 / stats.total_size, 33 | stats.size[STATS_FX], stats.size[STATS_FX] * 100 / stats.total_size, 34 | stats.size[STATS_DEFVOLPAN], stats.size[STATS_DEFVOLPAN] * 100 / stats.total_size, 35 | stats.size[STATS_INSTRUMENTS], stats.size[STATS_INSTRUMENTS] * 100 / stats.total_size, 36 | stats.size[STATS_SEQUENCE], stats.size[STATS_SEQUENCE] * 100 / stats.total_size, 37 | stats.size[STATS_PATTERNS], stats.size[STATS_PATTERNS] * 100 / stats.total_size, 38 | stats.size[STATS_WAVETABLE], stats.size[STATS_WAVETABLE] * 100 / stats.total_size, 39 | stats.size[STATS_WAVETABLE_NAMES], stats.size[STATS_WAVETABLE_NAMES] * 100 / stats.total_size, 40 | stats.total_size 41 | ); 42 | 43 | msgbox(domain, mused.slider_bevel, &mused.largefont, str, MB_OK); 44 | } 45 | -------------------------------------------------------------------------------- /src/stats.h: -------------------------------------------------------------------------------- 1 | #ifndef STATS_H 2 | #define STATS_H 3 | 4 | #include "songstats.h" 5 | 6 | void song_stats(void *unused1, void *unused2, void *unused3); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /src/theme.h: -------------------------------------------------------------------------------- 1 | #ifndef THEME_H 2 | #define THEME_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | enum 30 | { 31 | COLOR_SEQUENCE_COUNTER, 32 | COLOR_SEQUENCE_NORMAL, 33 | COLOR_PATTERN_SELECTED, 34 | COLOR_PATTERN_BAR, 35 | COLOR_PATTERN_BEAT, 36 | COLOR_PATTERN_INSTRUMENT, 37 | COLOR_PATTERN_INSTRUMENT_BAR, 38 | COLOR_PATTERN_INSTRUMENT_BEAT, 39 | COLOR_PATTERN_VOLUME, 40 | COLOR_PATTERN_VOLUME_BAR, 41 | COLOR_PATTERN_VOLUME_BEAT, 42 | COLOR_PATTERN_CTRL, 43 | COLOR_PATTERN_CTRL_BAR, 44 | COLOR_PATTERN_CTRL_BEAT, 45 | COLOR_PATTERN_COMMAND, 46 | COLOR_PATTERN_COMMAND_BAR, 47 | COLOR_PATTERN_COMMAND_BEAT, 48 | COLOR_PATTERN_NORMAL, 49 | COLOR_PATTERN_DISABLED, 50 | COLOR_PROGRAM_SELECTED, 51 | COLOR_PROGRAM_EVEN, 52 | COLOR_PROGRAM_ODD, 53 | COLOR_INSTRUMENT_SELECTED, 54 | COLOR_INSTRUMENT_NORMAL, 55 | COLOR_MENU_NORMAL, 56 | COLOR_MENU_SELECTED, 57 | COLOR_MENU_HEADER, 58 | COLOR_MENU_HEADER_SELECTED, 59 | COLOR_MENU_SHORTCUT, 60 | COLOR_MENU_SHORTCUT_SELECTED, 61 | COLOR_MAIN_TEXT, 62 | COLOR_SMALL_TEXT, 63 | COLOR_BACKGROUND, 64 | COLOR_BUTTON_TEXT, 65 | COLOR_TEXT_SHADOW, 66 | COLOR_PATTERN_EMPTY_DATA, 67 | COLOR_WAVETABLE_SAMPLE, 68 | COLOR_WAVETABLE_BACKGROUND, 69 | COLOR_PROGRESS_BAR, 70 | COLOR_PATTERN_SEQ_NUMBER, 71 | COLOR_CATOMETER_EYES, 72 | COLOR_STATUSBAR_TEXT, 73 | /*-------------*/ 74 | NUM_COLORS 75 | }; 76 | 77 | #include "SDL.h" 78 | 79 | extern Uint32 colors[NUM_COLORS]; 80 | 81 | void load_theme(const char *name); 82 | void enum_themes(); 83 | void free_themes(); 84 | void update_theme_menu(); 85 | Uint32 mix_colors(Uint32 a, Uint32 b); // result = a * (1.0-b_alpha) + b*(b_alpha) 86 | void init_resources_dir(void); 87 | char * query_resource_directory(void); 88 | void set_scaled_cursor(); 89 | 90 | #endif 91 | -------------------------------------------------------------------------------- /src/undo.h: -------------------------------------------------------------------------------- 1 | #ifndef UNDO_H 2 | #define UNDO_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "snd/music.h" 30 | #include 31 | 32 | typedef enum 33 | { 34 | UNDO_PATTERN, 35 | UNDO_SEQUENCE, 36 | UNDO_INSTRUMENT, 37 | UNDO_FX, 38 | UNDO_SONGINFO, 39 | UNDO_MODE, 40 | UNDO_WAVE_PARAM, 41 | UNDO_WAVE_DATA, 42 | UNDO_WAVE_NAME 43 | } UndoType; 44 | 45 | typedef union 46 | { 47 | struct { int channel; MusSeqPattern *seq; int n_seq; } sequence; 48 | struct { int idx; MusInstrument instrument; } instrument; 49 | struct { int idx; MusStep *step; int n_steps; } pattern; 50 | struct { CydFxSerialized fx; int idx; Uint8 multiplex_period; } fx; 51 | struct { int old_mode, focus; } mode; 52 | struct { 53 | Uint16 song_length, loop_point, sequence_step; 54 | Uint8 song_speed, song_speed2, song_rate; 55 | Uint16 time_signature; 56 | Uint32 flags; 57 | Uint8 num_channels; 58 | char title[MUS_SONG_TITLE_LEN + 1]; 59 | Uint8 master_volume, default_volume[MUS_MAX_CHANNELS], default_panning[MUS_MAX_CHANNELS]; 60 | } songinfo; 61 | struct { 62 | int idx; 63 | Uint32 flags; 64 | Uint32 sample_rate; 65 | Uint32 samples, loop_begin, loop_end; 66 | Uint16 base_note; 67 | } wave_param; 68 | struct { 69 | int idx; 70 | void *data; 71 | size_t length; 72 | Uint32 flags; 73 | Uint32 sample_rate; 74 | Uint32 samples, loop_begin, loop_end; 75 | Uint16 base_note; 76 | } wave_data; 77 | struct { 78 | int idx; 79 | char *name; 80 | } wave_name; 81 | } UndoEvent; 82 | 83 | typedef struct UndoFrame_t 84 | { 85 | UndoType type; 86 | struct UndoFrame_t *prev; 87 | UndoEvent event; 88 | bool modified; 89 | } UndoFrame; 90 | 91 | typedef UndoFrame *UndoStack; 92 | 93 | void undo_init(UndoStack *stack); 94 | void undo_deinit(UndoStack *stack); 95 | void undo_destroy_frame(UndoFrame *frame); 96 | void undo_add_frame(UndoStack *stack, UndoFrame *frame); 97 | 98 | /* Use when undo state stored but then the action is cancelled */ 99 | void undo_pop(UndoStack *stack); 100 | 101 | /* Pops the topmost frame from stack, use undo_destroy_frame() after processed */ 102 | UndoFrame *undo(UndoStack *stack); 103 | 104 | void undo_store_mode(UndoStack *stack, int old_mode, int focus, bool modified); 105 | void undo_store_instrument(UndoStack *stack, int idx, const MusInstrument *instrument, bool modified); 106 | void undo_store_sequence(UndoStack *stack, int channel, const MusSeqPattern *sequence, int n_seq, bool modified); 107 | void undo_store_songinfo(UndoStack *stack, const MusSong *song, bool modified); 108 | void undo_store_fx(UndoStack *stack, int idx, const CydFxSerialized *fx, Uint8 multiplex_period, bool modified); 109 | void undo_store_pattern(UndoStack *stack, int idx, const MusPattern *pattern, bool modified); 110 | void undo_store_wave_data(UndoStack *stack, int idx, const CydWavetableEntry *entry, bool modified); 111 | void undo_store_wave_name(UndoStack *stack, int idx, const char *name, bool modified); 112 | void undo_store_wave_param(UndoStack *stack, int idx, const CydWavetableEntry *entry, bool modified); 113 | 114 | #ifdef DEBUG 115 | void undo_show_stack(UndoStack *stack); 116 | #endif 117 | 118 | #endif 119 | -------------------------------------------------------------------------------- /src/version: -------------------------------------------------------------------------------- 1 | 1.7.7 2 | -------------------------------------------------------------------------------- /src/version.in: -------------------------------------------------------------------------------- 1 | #ifndef VERSION_H 2 | #define VERSION_H 3 | 4 | #include "version_number.h" 5 | #define REVISION "r$WCREV$" 6 | #define VERSION_STRING "klystrack " VERSION " " REVISION 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /src/view.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/src/view.c -------------------------------------------------------------------------------- /src/view.h: -------------------------------------------------------------------------------- 1 | #ifndef VIEW_H 2 | #define VIEW_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (GfxDomain *dest_surface, the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "gui/view.h" 30 | 31 | #define PLAYSTOP_INFO_W 78 32 | #define SCROLLBAR 10 33 | 34 | #define uppersig (Uint32)(mused.time_signature >> 8) 35 | #define lowersig (Uint32)(mused.time_signature & 0xff) 36 | #define compoundbeats (uppersig / 3) 37 | #define compounddivider (lowersig) 38 | #define simpletime(i, bar, beat, normal) ((((i) % (lowersig * uppersig) == 0) ? (bar) : ((i) % (lowersig) == 0) ? (beat) : (normal))) 39 | #define compoundtime(i, bar, beat, normal) (((i) % (compoundbeats * 16 * 3 / compounddivider) == 0) ? (bar) : ((i) % (16 * 3 / compounddivider) == 0 ? (beat) : (normal))) 40 | #define timesig(i, bar, beat, normal) (((uppersig != 3) && (uppersig % 3) == 0) ? compoundtime(i, bar, beat, normal) : simpletime(i, bar, beat, normal)) 41 | #define swap(a,b) { a ^= b; b ^= a; a ^= b; } 42 | 43 | void my_draw_view(const View* views, const SDL_Event *_event, GfxDomain *domain); 44 | int generic_field(const SDL_Event *e, const SDL_Rect *area, int focus, int param, const char *_label, const char *format, void *value, int width); 45 | void generic_flags(const SDL_Event *e, const SDL_Rect *_area, int focus, int p, const char *label, Uint32 *flags, Uint32 mask); 46 | int generic_button(const SDL_Event *e, const SDL_Rect *area, int focus, int param, const char *_label, void (*action)(void*,void*,void*), void *p1, void *p2, void *p3); 47 | char * notename(int note); 48 | void my_separator(const SDL_Rect *parent, SDL_Rect *rect); 49 | void set_cursor(const SDL_Rect *location); 50 | bool is_selected_param(int focus, int p); 51 | float percent_to_dB(float percent); 52 | 53 | /* 54 | "Controls" 55 | */ 56 | 57 | void song_name_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 58 | void instrument_name_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 59 | void instrument_disk_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 60 | void program_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 61 | void info_line(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 62 | void sequence_spectrum_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 63 | void pattern_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 64 | void songinfo1_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 65 | void songinfo2_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 66 | void songinfo3_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 67 | void playstop_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 68 | void instrument_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 69 | void instrument_view2(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 70 | void instrument_list(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 71 | void fx_name_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 72 | void fx_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 73 | void bevel_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 74 | void toolbar_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 75 | void fx_global_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 76 | void label(const char *_label, const SDL_Rect *area); 77 | void inst_field(const SDL_Event *e, const SDL_Rect *area, int p, int length, char *text); 78 | 79 | #endif 80 | -------------------------------------------------------------------------------- /src/view/pattern.h: -------------------------------------------------------------------------------- 1 | #ifndef PATTERN_H 2 | #define PATTERN_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "SDL.h" 30 | 31 | void pattern_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 32 | void pattern_view2(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /src/view/sequence.h: -------------------------------------------------------------------------------- 1 | #include "../view.h" 2 | 3 | extern Uint32 pattern_color[16]; 4 | 5 | void sequence_view2(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 6 | -------------------------------------------------------------------------------- /src/view/timer.c: -------------------------------------------------------------------------------- 1 | #include "timer.h" 2 | #include "gui/bevel.h" 3 | #include "mused.h" 4 | #include "mybevdefs.h" 5 | 6 | void timer_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param) 7 | { 8 | //bevel(mused.screen, dest, mused.slider_bevel->surface, BEV_THIN_FRAME); 9 | 10 | SDL_Rect field; 11 | copy_rect(&field, dest); 12 | adjust_rect(&field, 2); 13 | 14 | if (mused.flags & SONG_PLAYING) 15 | { 16 | Uint64 t = (mused.play_start_at + mused.time_played) / 1000; 17 | font_write_args(&mused.smallfont, dest_surface, &field, "%02d:%02d", (int)(t / 60), (int)(t % 60)); 18 | } 19 | else 20 | font_write(&mused.smallfont, dest_surface, &field, "00:00"); 21 | } 22 | -------------------------------------------------------------------------------- /src/view/timer.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "../view.h" 27 | 28 | void timer_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 29 | -------------------------------------------------------------------------------- /src/view/visu.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "visu.h" 27 | #include "gui/bevel.h" 28 | #include "mybevdefs.h" 29 | #include "mused.h" 30 | #include "snd/freqs.h" 31 | #include "gfx/gfx.h" 32 | #include "theme.h" 33 | 34 | extern Uint32 colors[NUM_COLORS]; 35 | 36 | void spectrum_analyzer_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param) 37 | { 38 | SDL_Rect content; 39 | copy_rect(&content, dest); 40 | 41 | SDL_Rect clip; 42 | gfx_domain_get_clip(domain, &clip); 43 | gfx_domain_set_clip(domain, &content); 44 | 45 | int spec[255] = { 0 }; 46 | 47 | for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) 48 | { 49 | Uint8 note = (mused.stat_note[i] & 0xff00) >> 8; 50 | spec[note] = my_max(spec[note], mused.vis.cyd_env[i]); 51 | if (note > 0) spec[note - 1] = my_max(spec[note] / 3, spec[note - 1]); 52 | if (note < 255) spec[note + 1] = my_max(spec[note] / 3, spec[note + 1]); 53 | } 54 | 55 | for (int i = 0 ; i < 96 ; ++i) 56 | { 57 | if (spec[i] >= mused.vis.spec_peak[i]) 58 | mused.vis.spec_peak_decay[i] = 0; 59 | mused.vis.spec_peak_decay[i] = my_min(64, mused.vis.spec_peak_decay[i] + 1); 60 | mused.vis.spec_peak[i] = my_max(0, my_max(mused.vis.spec_peak[i], spec[i]) - my_min(1, my_max(0, /*mused.vis.spec_peak_decay[i] - 20*/ 2)) * 4); 61 | } 62 | 63 | const int w = mused.analyzer->surface->w / 2; 64 | SDL_Rect bar = {content.x, 0, w, 0}; 65 | SDL_Rect src = { 0, 0, w, content.h }; 66 | 67 | for (int i = (MIDDLE_C - content.w / w / 2 + 12) ; i < FREQ_TAB_SIZE && bar.x < content.x + content.w ; ++i, bar.x += bar.w) 68 | { 69 | if (i >= 0) 70 | { 71 | /*bar.h = mused.vis.spec_peak[i] * content.h / MAX_VOLUME; 72 | bar.y = content.y + content.h - bar.h; 73 | 74 | SDL_FillRect(mused.screen, &bar, 0x404040);*/ 75 | 76 | src.x = 0; 77 | src.y = 0; 78 | src.w = w; 79 | src.h = content.h; 80 | 81 | bar.h = content.h; 82 | bar.y = content.y; 83 | 84 | SDL_Rect temp; 85 | copy_rect(&temp, &bar); 86 | 87 | my_BlitSurface(mused.analyzer, &src, dest_surface, &temp); 88 | 89 | bar.h = my_min(MAX_VOLUME, mused.vis.spec_peak[i]) * content.h / MAX_VOLUME; 90 | bar.y = content.y + content.h - bar.h; 91 | 92 | src.h = my_min(MAX_VOLUME, mused.vis.spec_peak[i]) * content.h / MAX_VOLUME; 93 | src.y = mused.analyzer->surface->h - bar.h; 94 | src.h = bar.h; 95 | src.x = w; 96 | 97 | copy_rect(&temp, &bar); 98 | 99 | temp.y += 1; 100 | 101 | my_BlitSurface(mused.analyzer, &src, dest_surface, &temp); 102 | } 103 | } 104 | 105 | gfx_domain_set_clip(dest_surface, &clip); 106 | } 107 | 108 | 109 | void catometer_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param) 110 | { 111 | SDL_Rect content; 112 | copy_rect(&content, dest); 113 | 114 | gfx_rect(dest_surface, &content, colors[COLOR_BACKGROUND]); 115 | 116 | SDL_Rect clip, cat; 117 | copy_rect(&cat, &content); 118 | cat.w = mused.catometer->surface->w; 119 | cat.x = cat.x + content.w / 2 - mused.catometer->surface->w / 2; 120 | gfx_domain_get_clip(domain, &clip); 121 | gfx_domain_set_clip(domain, &content); 122 | my_BlitSurface(mused.catometer, NULL, dest_surface, &cat); 123 | 124 | int v = 0; 125 | 126 | for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) 127 | { 128 | v += mused.vis.cyd_env[i]; 129 | } 130 | 131 | float a = ((float)v * M_PI / (MAX_VOLUME * 4) + M_PI) * 0.25 + mused.vis.prev_a * 0.75; 132 | 133 | if (a < M_PI) 134 | a = M_PI; 135 | 136 | if (a > M_PI * 2) 137 | a = M_PI * 2; 138 | 139 | mused.vis.prev_a = a; 140 | 141 | int ax = cos(a) * 12; 142 | int ay = sin(a) * 12; 143 | int eye1 = 31; 144 | int eye2 = -30; 145 | 146 | for (int w = -3 ; w <= 3 ; ++w) 147 | { 148 | gfx_line(dest_surface, dest->x + dest->w / 2 + eye1 + w, dest->y + dest->h / 2 + 6, dest->x + dest->w / 2 + ax + eye1, dest->y + dest->h / 2 + ay + 6, colors[COLOR_CATOMETER_EYES]); 149 | gfx_line(dest_surface, dest->x + dest->w / 2 + eye2 + w, dest->y + dest->h / 2 + 6, dest->x + dest->w / 2 + ax + eye2, dest->y + dest->h / 2 + ay + 6, colors[COLOR_CATOMETER_EYES]); 150 | } 151 | 152 | gfx_domain_set_clip(dest_surface, &clip); 153 | } 154 | -------------------------------------------------------------------------------- /src/view/visu.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "../view.h" 27 | 28 | void spectrum_analyzer_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 29 | void catometer_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 30 | -------------------------------------------------------------------------------- /src/view/wavetableview.h: -------------------------------------------------------------------------------- 1 | #ifndef WAVETABLEVIEW_H 2 | #define WAVETABLEVIEW_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "SDL.h" 30 | #include "gfx/gfx.h" 31 | 32 | void wavetable_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 33 | void wavetablelist_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 34 | void wavetable_sample_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 35 | void wavetable_tools_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 36 | void wavetable_edit_area(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 37 | void wavetable_sample_area(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 38 | void wavetable_name_view(GfxDomain *dest_surface, const SDL_Rect *dest, const SDL_Event *event, void *param); 39 | void invalidate_wavetable_view(); 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /src/wave.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | */ 25 | 26 | #include "wave.h" 27 | #include "macros.h" 28 | #include 29 | #include 30 | 31 | typedef struct 32 | { 33 | char ckID[4]; 34 | Uint32 cksize; 35 | } Chunk; 36 | 37 | Wave * wave_load(FILE *f) 38 | { 39 | struct { 40 | Chunk c; 41 | char WAVEID[4]; 42 | } __attribute__((__packed__)) RIFF; 43 | 44 | if (fread(&RIFF, 1 , sizeof(RIFF), f) != sizeof(RIFF) || strncmp(RIFF.c.ckID, "RIFF", 4) != 0 || strncmp(RIFF.WAVEID, "WAVE", 4) != 0) 45 | { 46 | fatal("Not a RIFF wave file"); 47 | return NULL; 48 | } 49 | 50 | struct 51 | { 52 | Chunk c; 53 | Uint16 wFormatTag; 54 | Uint16 nChannels; 55 | Uint32 nSamplesPerSec; 56 | Uint32 nAvgBytesPerSec; 57 | Uint16 nBlockAlign; 58 | Uint16 wBitsPerSample; 59 | /*----*/ 60 | Uint16 cbSize; 61 | /*----*/ 62 | Uint16 wValidBitsPerSample; 63 | Uint32 dwChannelMask; 64 | char SubFormat[16]; 65 | } __attribute__((__packed__)) WAVE; 66 | 67 | size_t beginning_of_WAVE = ftell(f); 68 | 69 | if (fread(&WAVE, 1 , sizeof(WAVE), f) < 16 || strncmp(WAVE.c.ckID, "fmt ", 4) != 0) 70 | { 71 | fatal("No 'fmt ' chunk found"); 72 | return NULL; 73 | } 74 | 75 | if (WAVE.wFormatTag != WAVE_FORMAT_PCM/* && WAVE.wFormatTag != WAVE_FORMAT_FLOAT*/) 76 | { 77 | //fatal("Only PCM and float supported"); 78 | fatal("Only PCM supported"); 79 | return NULL; 80 | } 81 | 82 | fseek(f, beginning_of_WAVE + WAVE.c.cksize + 8, SEEK_SET); 83 | 84 | Chunk peek = { "", 0 }; 85 | 86 | fread(&peek, 1, sizeof(peek) ,f); 87 | 88 | if (strncmp(peek.ckID, "fact", 4) == 0) 89 | { 90 | fseek(f, sizeof(Uint32), SEEK_CUR); 91 | } 92 | else 93 | { 94 | fseek(f, beginning_of_WAVE + WAVE.c.cksize + 8, SEEK_SET); 95 | } 96 | 97 | fread(&peek, 1, sizeof(peek) ,f); 98 | 99 | if (strncmp(peek.ckID, "data", 4) != 0) 100 | { 101 | fatal("No 'data' chunk found"); 102 | return NULL; 103 | } 104 | 105 | Wave *w = malloc(sizeof(*w)); 106 | 107 | w->format = WAVE.wFormatTag; 108 | w->channels = WAVE.nChannels; 109 | w->sample_rate = WAVE.nSamplesPerSec; 110 | w->length = peek.cksize / (WAVE.wBitsPerSample / 8) / WAVE.nChannels; 111 | w->bits_per_sample = WAVE.wBitsPerSample; 112 | 113 | w->data = malloc(peek.cksize); 114 | 115 | debug("Reading %d bytes (chn = %d, bits = %d)", peek.cksize, w->channels, w->bits_per_sample); 116 | 117 | fread(w->data, 1, peek.cksize, f); 118 | 119 | return w; 120 | } 121 | 122 | 123 | void wave_destroy(Wave *wave) 124 | { 125 | if (wave) 126 | { 127 | free(wave->data); 128 | free(wave); 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/wave.h: -------------------------------------------------------------------------------- 1 | #ifndef WAVE_H 2 | #define WAVE_H 3 | 4 | /* 5 | Copyright (c) 2009-2010 Tero Lindeman (kometbomb) 6 | 7 | Permission is hereby granted, free of charge, to any person 8 | obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without 10 | restriction, including without limitation the rights to use, 11 | copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following 14 | conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | OTHER DEALINGS IN THE SOFTWARE. 27 | */ 28 | 29 | #include "SDL.h" 30 | #include 31 | 32 | enum 33 | { 34 | WAVE_FORMAT_PCM = 1, 35 | WAVE_FORMAT_FLOAT = 3 36 | }; 37 | 38 | typedef struct 39 | { 40 | int format; 41 | Uint16 channels; 42 | Uint32 sample_rate; 43 | Uint32 length; 44 | Uint16 bits_per_sample; 45 | void *data; 46 | } Wave; 47 | 48 | Wave * wave_load(FILE *f); 49 | void wave_destroy(Wave *wave); 50 | 51 | #endif -------------------------------------------------------------------------------- /src/wave_action.h: -------------------------------------------------------------------------------- 1 | #ifndef __WAVE_ACTION_H 2 | #define __WAVE_ACTION_H 3 | 4 | void wavetable_drop_lowest_bit(void *unused1, void *unused2, void *unused3); 5 | void wavetable_halve_samplerate(void *unused1, void *unused2, void *unused3); 6 | void wavetable_normalize(void *vol, void *unused2, void *unused3); 7 | void wavetable_cut_tail(void *unused1, void *unused2, void *unused3); 8 | void wavetable_cut_head(void *unused1, void *unused2, void *unused3); 9 | void wavetable_chord(void *transpose, void *unused2, void *unused3); 10 | void wavetable_create_one_cycle(void *unused1, void *unused2, void *unused3); 11 | void wavetable_randomize_and_create_one_cycle(void *unused1, void *unused2, void *unused3); 12 | void wavegen_randomize(void *unused1, void *unused2, void *unused3); 13 | void wavegen_preset(void *_preset, void *_settings, void *unused3); 14 | void wavetable_draw(float x, float y, float w); 15 | void wavetable_amp(void *amp, void *unused2, void *unused3); 16 | void wavetable_distort(void *amp, void *unused2, void *unused3); 17 | void wavetable_remove_dc(void *unused1, void *unused2, void *unused3); 18 | void wavetable_filter(void *filter_type, void *unused2, void *unused3); 19 | void wavetable_find_zero(void *unused1, void *unused2, void *unused3); 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /src/wavegen.c: -------------------------------------------------------------------------------- 1 | #include "wavegen.h" 2 | #include "util/rnd.h" 3 | #include 4 | #include "macros.h" 5 | 6 | 7 | float wg_osc(WgOsc *osc, float _phase) 8 | { 9 | double intpart = 0.0f; 10 | double phase = pow(modf(_phase * osc->mult + (float)osc->shift / 8, &intpart), osc->exp_c); 11 | float output = 0; 12 | 13 | switch (osc->osc) 14 | { 15 | default: 16 | 17 | case WG_OSC_SINE: 18 | output = sin(phase * M_PI * 2.0f); 19 | break; 20 | 21 | case WG_OSC_SQUARE: 22 | output = phase >= 0.5f ? -1.0f : 1.0f; 23 | break; 24 | 25 | case WG_OSC_TRIANGLE: 26 | if (phase < 0.5f) 27 | output = phase * 4.0f - 1.0f; 28 | else 29 | output = 1.0f - (phase - 0.5f) * 4.0f; 30 | break; 31 | 32 | case WG_OSC_SAW: 33 | output = phase * 2.0f - 1.0f; 34 | break; 35 | 36 | case WG_OSC_NOISE: 37 | output = rndf() * 2.0f - 1.0f; 38 | } 39 | 40 | if (osc->flags & WG_OSC_FLAG_ABS) 41 | { 42 | output = output * 0.5 + 0.5f; 43 | } 44 | 45 | if (osc->flags & WG_OSC_FLAG_NEG) 46 | { 47 | output = -output; 48 | } 49 | 50 | return output; 51 | } 52 | 53 | 54 | float wg_get_sample(WgOsc *chain, int num_oscs, float phase) 55 | { 56 | float sample = 0; 57 | WgOpType op = WG_OP_ADD; 58 | 59 | for (int i = 0 ; i < num_oscs ; ++i) 60 | { 61 | WgOsc *osc = &chain[i]; 62 | float output = wg_osc(osc, phase); 63 | 64 | switch (op) 65 | { 66 | default: 67 | case WG_OP_ADD: 68 | sample += output; 69 | break; 70 | 71 | case WG_OP_MUL: 72 | sample *= output; 73 | break; 74 | } 75 | 76 | op = osc->op; 77 | } 78 | 79 | return sample; 80 | } 81 | 82 | 83 | void wg_init_osc(WgOsc *osc) 84 | { 85 | osc->exp_c = log(0.5f) / log((float)osc->exp / 100); 86 | } 87 | 88 | 89 | void wg_gen_waveform(WgOsc *chain, int num_oscs, Sint16 *data, int len) 90 | { 91 | for (int i = 0 ; i < num_oscs ; ++i) 92 | { 93 | wg_init_osc(&chain[i]); 94 | } 95 | 96 | for (int i = 0 ; i < len ; ++i) 97 | { 98 | double s = wg_get_sample(chain, num_oscs, (float)i / len); 99 | 100 | if (s > 1.0) 101 | s = 1.0; 102 | else if (s < -1.0) 103 | s = -1.0; 104 | 105 | data[i] = 32767 * s; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/wavegen.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "SDL.h" 4 | 5 | #define WG_CHAIN_OSCS 4 6 | 7 | typedef enum 8 | { 9 | WG_OSC_SINE, 10 | WG_OSC_SQUARE, 11 | WG_OSC_SAW, 12 | WG_OSC_TRIANGLE, 13 | WG_OSC_NOISE, 14 | WG_NUM_OSCS 15 | } WgOscType; 16 | 17 | typedef enum 18 | { 19 | WG_OP_ADD, 20 | WG_OP_MUL, 21 | WG_NUM_OPS 22 | } WgOpType; 23 | 24 | typedef struct 25 | { 26 | WgOscType osc; 27 | WgOpType op; 28 | int mult, shift; 29 | int exp; 30 | float exp_c; 31 | Uint32 flags; 32 | } WgOsc; 33 | 34 | enum 35 | { 36 | WG_OSC_FLAG_ABS = 1, 37 | WG_OSC_FLAG_NEG = 2 38 | }; 39 | 40 | typedef struct 41 | { 42 | WgOsc chain[WG_CHAIN_OSCS]; 43 | int num_oscs, length; 44 | } WgSettings; 45 | 46 | typedef struct 47 | { 48 | const char *name; 49 | WgSettings settings; 50 | } WgPreset; 51 | 52 | void wg_gen_waveform(WgOsc *chain, int num_oscs, Sint16 *data, int len); 53 | float wg_osc(WgOsc *osc, float _phase); 54 | void wg_init_osc(WgOsc *osc); 55 | float wg_get_sample(WgOsc *chain, int num_oscs, float phase); 56 | -------------------------------------------------------------------------------- /src/wavewriter.c: -------------------------------------------------------------------------------- 1 | #include "wavewriter.h" 2 | #include 3 | #include "SDL.h" 4 | 5 | WaveWriter * ww_create(FILE * file, int sample_rate, int channels) 6 | { 7 | WaveWriter * ww = malloc(sizeof(WaveWriter)); 8 | 9 | ww->file = file; 10 | ww->channels = channels; 11 | 12 | Uint16 tmp16 = 0; 13 | Uint32 tmp32 = 0; 14 | 15 | fwrite("RIFF", 4, 1, ww->file); 16 | 17 | ww->riffsize_pos = ftell(ww->file); 18 | 19 | fwrite(&tmp32, 4, 1, ww->file); 20 | fwrite("WAVE", 4, 1, ww->file); 21 | fwrite("fmt ", 4, 1, ww->file); 22 | 23 | tmp32 = SDL_SwapLE32(16); // size of format data 24 | 25 | fwrite(&tmp32, 4, 1, ww->file); 26 | 27 | tmp16 = SDL_SwapLE16(1); // data type = PCM 28 | 29 | fwrite(&tmp16, 2, 1, ww->file); 30 | 31 | tmp16 = SDL_SwapLE16(channels); 32 | 33 | fwrite(&tmp16, 2, 1, ww->file); 34 | 35 | tmp32 = SDL_SwapLE32(sample_rate); 36 | 37 | fwrite(&tmp32, 4, 1, ww->file); 38 | 39 | tmp32 = SDL_SwapLE32(sample_rate * channels * sizeof(Sint16)); 40 | 41 | fwrite(&tmp32, 4, 1, ww->file); 42 | 43 | tmp16 = SDL_SwapLE16(channels * sizeof(Sint16)); 44 | 45 | fwrite(&tmp16, 2, 1, ww->file); 46 | 47 | tmp16 = SDL_SwapLE16(16); // bits per sample 48 | 49 | fwrite(&tmp16, 2, 1, ww->file); 50 | 51 | fwrite("data", 4, 1, ww->file); 52 | 53 | ww->chunksize_pos = ftell(ww->file); 54 | 55 | tmp32 = 0; 56 | fwrite(&tmp32, 4, 1, ww->file); 57 | 58 | return ww; 59 | } 60 | 61 | 62 | void ww_write(WaveWriter *ww, Sint16 * buffer, int samples) 63 | { 64 | fwrite(buffer, samples * ww->channels * sizeof(Sint16), 1, ww->file); 65 | } 66 | 67 | 68 | void ww_finish(WaveWriter *ww) 69 | { 70 | Uint32 sz = ftell(ww->file) - 8; 71 | Uint32 tmp32 = SDL_SwapLE32(sz); 72 | 73 | fseek(ww->file, ww->riffsize_pos, SEEK_SET); 74 | fwrite(&tmp32, sizeof(tmp32), 1, ww->file); 75 | 76 | tmp32 = SDL_SwapLE32(sz + 8 - (ww->chunksize_pos + 4)); 77 | 78 | fseek(ww->file, ww->chunksize_pos, SEEK_SET); 79 | fwrite(&tmp32, sizeof(tmp32), 1, ww->file); 80 | 81 | fclose(ww->file); 82 | free(ww); 83 | } 84 | -------------------------------------------------------------------------------- /src/wavewriter.h: -------------------------------------------------------------------------------- 1 | #ifndef WAVEWRITER_H 2 | #define WAVEWRITER_H 3 | 4 | #include 5 | #include "SDL.h" 6 | 7 | typedef struct 8 | { 9 | FILE *file; 10 | int channels; 11 | size_t chunksize_pos, riffsize_pos; 12 | } WaveWriter; 13 | 14 | /* Create WaveWriter with sample rate of rate/16-bits and start writing to file */ 15 | WaveWriter * ww_create(FILE * file, int sample_rate, int channels); 16 | /* Write channels * samples Sint16's */ 17 | void ww_write(WaveWriter *ww, Sint16 * buffer, int samples); 18 | /* Close file and free WaveWriter */ 19 | void ww_finish(WaveWriter *ww); 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /src/zap.c: -------------------------------------------------------------------------------- 1 | #include "zap.h" 2 | #include "mused.h" 3 | #include "gui/toolutil.h" 4 | #include 5 | #include "event.h" 6 | #include "view/wavetableview.h" 7 | 8 | void zap_instruments(void* no_confirm, void* b, void* c) 9 | { 10 | if (!CASTPTR(int, no_confirm) && !confirm(domain, mused.slider_bevel, &mused.largefont, "Zap instruments (no undo)?")) 11 | return; 12 | 13 | debug("Zap instruments"); 14 | 15 | for (int i = 0 ; i < NUM_INSTRUMENTS ; ++i) 16 | { 17 | MusInstrument *inst = &mused.song.instrument[i]; 18 | kt_default_instrument(inst); 19 | } 20 | } 21 | 22 | 23 | void zap_sequence(void* no_confirm, void* b, void* c) 24 | { 25 | if (!CASTPTR(int, no_confirm) && !confirm(domain, mused.slider_bevel, &mused.largefont, "Zap sequence (no undo)?")) 26 | return; 27 | 28 | debug("Zap sequence"); 29 | 30 | for (int i = 0 ; i < MUS_MAX_CHANNELS ; ++i) 31 | { 32 | memset(mused.song.sequence[i], 0, NUM_SEQUENCES * sizeof(MusSeqPattern)); 33 | mused.song.num_sequences[i] = 0; 34 | mused.song.default_volume[i] = MAX_VOLUME; 35 | mused.song.default_panning[i] = 0; 36 | } 37 | 38 | for (int i = 0 ; i < NUM_PATTERNS ; ++i) 39 | { 40 | clear_pattern_range(&mused.song.pattern[i], 0, mused.song.pattern[i].num_steps); 41 | resize_pattern(&mused.song.pattern[i], mused.default_pattern_length); 42 | } 43 | 44 | mused.sequence_position = 0; 45 | mused.pattern_position = 0; 46 | mused.current_sequencepos = 0; 47 | mused.current_sequencetrack = 0; 48 | 49 | mused.song.song_length = 0; 50 | mused.song.loop_point = 0; 51 | 52 | update_position_sliders(); 53 | } 54 | 55 | 56 | void zap_fx(void* no_confirm, void* b, void* c) 57 | { 58 | if (!CASTPTR(int, no_confirm) && !confirm(domain, mused.slider_bevel, &mused.largefont, "Zap FX (no undo)?")) 59 | return; 60 | 61 | debug("Zap FX"); 62 | 63 | mused.song.flags = 0; 64 | 65 | for (int fx = 0 ; fx < CYD_MAX_FX_CHANNELS ; ++fx) 66 | { 67 | mused.song.fx[fx].flags = 0; 68 | mused.song.fx[fx].crushex.downsample = 0; 69 | mused.song.fx[fx].crush.bit_drop = 4; 70 | mused.song.fx[fx].crushex.gain = 128; 71 | mused.song.fx[fx].chr.min_delay = 0; 72 | mused.song.fx[fx].chr.rate = 40; 73 | mused.song.fx[fx].chr.max_delay = 20; 74 | strcpy(mused.song.fx[fx].name, ""); 75 | for (int i = 0 ; i < CYDRVB_TAPS ; ++i) 76 | { 77 | mused.song.fx[fx].rvb.tap[i].delay = i * 100 + 50; 78 | mused.song.fx[fx].rvb.tap[i].gain = (i + 1) * -30; 79 | mused.song.fx[fx].rvb.tap[i].panning = CYD_PAN_CENTER; 80 | mused.song.fx[fx].rvb.tap[i].flags = 1; 81 | } 82 | } 83 | 84 | mirror_flags(); 85 | } 86 | 87 | 88 | void zap_wavetable(void* no_confirm, void* b, void* c) 89 | { 90 | if (!CASTPTR(int, no_confirm) && !confirm(domain, mused.slider_bevel, &mused.largefont, "Zap wavetable (no undo)?")) 91 | return; 92 | 93 | debug("Zap wavetable"); 94 | 95 | if (mused.song.wavetable_names) 96 | { 97 | for (int i = 0 ; i < CYD_WAVE_MAX_ENTRIES ; ++i) 98 | free(mused.song.wavetable_names[i]); 99 | free(mused.song.wavetable_names); 100 | } 101 | 102 | mused.song.wavetable_names = malloc(CYD_WAVE_MAX_ENTRIES * sizeof(char*)); 103 | 104 | for (int i = 0 ; i < CYD_WAVE_MAX_ENTRIES ; ++i) 105 | { 106 | mused.song.wavetable_names[i] = malloc(MUS_WAVETABLE_NAME_LEN + 1); 107 | strcpy(mused.song.wavetable_names[i], ""); 108 | } 109 | 110 | if (mused.mus.cyd) cyd_reset_wavetable(mused.mus.cyd); 111 | 112 | invalidate_wavetable_view(); 113 | } 114 | 115 | -------------------------------------------------------------------------------- /src/zap.h: -------------------------------------------------------------------------------- 1 | #ifndef ZAP_H 2 | #define ZAP_H 3 | 4 | void zap_instruments(void* no_confirm, void* b, void* c); 5 | void zap_sequence(void* no_confirm, void* b, void* c); 6 | void zap_fx(void* no_confirm, void* b, void* c); 7 | void zap_wavetable(void* no_confirm, void* b, void* c); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /themes/AHX/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/AHX/bevel.png -------------------------------------------------------------------------------- /themes/AHX/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | statusbar_text = main_text 5 | 6 | sequence_counter = 0x000000 7 | sequence_normal = 0xc6c6ce 8 | 9 | pattern_normal = 0xcee7e7 10 | pattern_beat = 0xcee7e7 11 | pattern_bar = 0xcee7e7 12 | pattern_selected = 0xffffff 13 | pattern_disabled = 0x525a63 14 | 15 | pattern_instrument = 0xcee7e7 16 | pattern_instrument_beat = 0xcee7e7 17 | pattern_instrument_bar = 0xcee7e7 18 | 19 | program_selected = 0xffffff 20 | program_even = 0xcee7e7 21 | program_odd = 0xcee7e7 22 | 23 | instrument_selected = 0xffffff 24 | instrument_normal = 0xcee7e7 25 | 26 | menu = 0xffffff 27 | menu_selected = 0xffffff 28 | menu_header = 0xffffff 29 | menu_header_selected = 0xffffff 30 | menu_shortcut = 0xffffff 31 | menu_shortcut_selected = 0xffffff 32 | 33 | pattern_volume = 0xcee7e7 34 | pattern_volume_beat = 0xcee7e7 35 | pattern_volume_bar = 0xcee7e7 36 | 37 | pattern_ctrl = 0xcee7e7 38 | pattern_ctrl_beat = 0xcee7e7 39 | pattern_ctrl_bar = 0xcee7e7 40 | 41 | pattern_command = 0xcee7e7 42 | pattern_command_beat = 0xcee7e7 43 | pattern_command_bar = 0xcee7e7 44 | 45 | catometer_eyes = 0xa04f9b 46 | -------------------------------------------------------------------------------- /themes/AHX/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/AHX/font/charmap.txt -------------------------------------------------------------------------------- /themes/AHX/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/AHX/font/font.png -------------------------------------------------------------------------------- /themes/AHX/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/AHX/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/AHX/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/AHX/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/AHX/font7x6/font.png -------------------------------------------------------------------------------- /themes/AHX/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/AHX/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/AHX/vu.png -------------------------------------------------------------------------------- /themes/Blacklyst/analyzor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/analyzor.png -------------------------------------------------------------------------------- /themes/Blacklyst/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/bevel.png -------------------------------------------------------------------------------- /themes/Blacklyst/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | button_text = 0xffffff 5 | text_shadow = 0x0 6 | statusbar_text = main_text 7 | 8 | sequence_counter = 0x820b05 9 | sequence_normal = 0x3eb6a3 10 | 11 | pattern_normal = 0x3eb6a3 12 | pattern_beat = 0x00f4cd 13 | pattern_bar = 0xffffff 14 | pattern_selected = 0x0 15 | pattern_disabled = 0x333333 16 | 17 | pattern_instrument = 0xecb34b 18 | pattern_instrument_beat = 0xecb34b 19 | pattern_instrument_bar = 0xecb34b 20 | 21 | pattern_volume = 0x3eb6a3 22 | pattern_volume_beat = 0x00f4cd 23 | pattern_volume_bar = 0x00f4cd 24 | 25 | pattern_ctrl = 0x3eb6a3 26 | pattern_ctrl_beat = 0x00f4cd 27 | pattern_ctrl_bar = 0x00f4cd 28 | 29 | pattern_command = 0x3eb6a3 30 | pattern_command_beat = 0x00f4cd 31 | pattern_command_bar = 0x00f4cd 32 | 33 | pattern_empty_data = 0xc0000000 34 | 35 | program_selected = 0xffffff 36 | program_even = 0x3eb6a3 37 | program_odd = 0x2f8a7c 38 | 39 | instrument_selected = 0xffffff 40 | instrument_normal = 0x3eb6a3 41 | 42 | menu = 0xffffff 43 | menu_selected = 0xffffff 44 | menu_header = 0xffffff 45 | menu_header_selected = 0xffffff 46 | menu_shortcut = 0xffffff 47 | menu_shortcut_selected = 0xffffff 48 | 49 | wavetable_sample = 0xffffff 50 | wavetable_background = 0x0 51 | progress_bar = 0xffffff 52 | 53 | catometer_eyes = 0xa04f9b 54 | -------------------------------------------------------------------------------- /themes/Blacklyst/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/font/charmap.txt -------------------------------------------------------------------------------- /themes/Blacklyst/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/font/font.png -------------------------------------------------------------------------------- /themes/Blacklyst/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Blacklyst/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Blacklyst/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/font7x6/font.png -------------------------------------------------------------------------------- /themes/Blacklyst/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Blacklyst/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Blacklyst/vu.png -------------------------------------------------------------------------------- /themes/C64/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/bevel.png -------------------------------------------------------------------------------- /themes/C64/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xffffff 3 | small_text = 0x787878 4 | statusbar_text = main_text 5 | 6 | sequence_counter = 0xffffff 7 | sequence_normal = 0x7869c4 8 | 9 | pattern_normal = 0x787878 10 | pattern_beat = 0x787878 11 | pattern_bar = 0x787878 12 | pattern_selected = 0xffffff 13 | pattern_disabled = 0x40318d 14 | 15 | pattern_instrument = 0x9f9f9f 16 | pattern_instrument_beat = 0x9f9f9f 17 | pattern_instrument_bar = 0x9f9f9f 18 | 19 | program_selected = 0xffffff 20 | program_even = 0x787878 21 | program_odd = 0x787878 22 | 23 | instrument_selected = 0xffffff 24 | instrument_normal = 0x787878 25 | 26 | menu = 0x787878 27 | menu_selected = 0xffffff 28 | menu_header = 0xffffff 29 | menu_header_selected = 0xffffff 30 | menu_shortcut = 0x787878 31 | menu_shortcut_selected = 0xffffff 32 | 33 | pattern_volume = 0x9f9f9f 34 | pattern_volume_beat = 0x9f9f9f 35 | pattern_volume_bar = 0x9f9f9f 36 | 37 | pattern_ctrl = 0x9f9f9f 38 | pattern_ctrl_beat = 0x9f9f9f 39 | pattern_ctrl_bar = 0x9f9f9f 40 | 41 | pattern_command = 0x9f9f9f 42 | pattern_command_beat = 0x9f9f9f 43 | pattern_command_bar = 0x9f9f9f 44 | 45 | catometer_eyes = 0xa04f9b 46 | -------------------------------------------------------------------------------- /themes/C64/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/font/charmap.txt -------------------------------------------------------------------------------- /themes/C64/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/font/font.png -------------------------------------------------------------------------------- /themes/C64/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/C64/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/C64/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/font7x6/font.png -------------------------------------------------------------------------------- /themes/C64/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/C64/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/logo.png -------------------------------------------------------------------------------- /themes/C64/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/C64/vu.png -------------------------------------------------------------------------------- /themes/Classic/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Classic/bevel.png -------------------------------------------------------------------------------- /themes/Classic/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | statusbar_text = main_text 5 | 6 | sequence_counter = 0x000000 7 | sequence_normal = 0x000000 8 | 9 | pattern_selected = 0xffffff 10 | pattern_bar = 0xffffff 11 | pattern_beat = 0xc0c0ff 12 | pattern_normal = 0xd0a0d0 13 | pattern_disabled = 0x808080 14 | 15 | pattern_instrument = 0xd0a0d0 16 | pattern_instrument_bar = 0xffffff 17 | pattern_instrument_beat = 0xffffff 18 | 19 | program_selected = 0xffffff 20 | program_even = 0xe0d0d0 21 | program_odd = 0xb0a0b0 22 | 23 | instrument_selected = 0xffffff 24 | instrument_normal = 0xc0c0c0 25 | 26 | menu = 0xffffff 27 | menu_selected = 0xffffff 28 | menu_header = 0xffffff 29 | menu_header_selected = 0xffffff 30 | menu_shortcut = 0xffffff 31 | menu_shortcut_selected = 0xffffff 32 | 33 | catometer_eyes = 0xa04f9b 34 | -------------------------------------------------------------------------------- /themes/Classic/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Classic/font/charmap.txt -------------------------------------------------------------------------------- /themes/Classic/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Classic/font/font.png -------------------------------------------------------------------------------- /themes/Classic/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Classic/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Classic/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Classic/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Classic/font7x6/font.png -------------------------------------------------------------------------------- /themes/Classic/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Classic/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Classic/vu.png -------------------------------------------------------------------------------- /themes/Default/analyzor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/analyzor.png -------------------------------------------------------------------------------- /themes/Default/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/bevel.png -------------------------------------------------------------------------------- /themes/Default/catometer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/catometer.png -------------------------------------------------------------------------------- /themes/Default/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | button_text = 0xffffff 5 | statusbar_text = main_text 6 | 7 | sequence_counter = 0xffffff 8 | sequence_normal = 0x000000 9 | 10 | pattern_normal = 0xa0c9d0 11 | pattern_beat = 0x619fac 12 | pattern_bar = 0xffffff 13 | pattern_selected = 0xffffff 14 | pattern_disabled = 0x808080 15 | 16 | pattern_instrument = 0x00c8e8 17 | pattern_instrument_beat = 0x009fba 18 | pattern_instrument_bar = 0xffffff 19 | 20 | pattern_volume = 0xa0c9d0 21 | pattern_volume_beat = 0x619fac 22 | pattern_volume_bar = 0xffffff 23 | 24 | pattern_ctrl = 0xa0c9d0 25 | pattern_ctrl_beat = 0x619fac 26 | pattern_ctrl_bar = 0xffffff 27 | 28 | pattern_command = 0x00c8e8 29 | pattern_command_beat = 0x009fba 30 | pattern_command_bar = 0xffffff 31 | 32 | pattern_empty_data = 0x80000000 33 | pattern_seq_number = 0xffffff 34 | 35 | program_selected = 0xffffff 36 | program_even = 0xd0d0e0 37 | program_odd = 0xb0a0b0 38 | 39 | instrument_selected = 0xffffff 40 | instrument_normal = 0xc0c0c0 41 | 42 | menu = 0xffffff 43 | menu_selected = 0xffffff 44 | menu_header = 0xffffff 45 | menu_header_selected = 0xffffff 46 | menu_shortcut = 0xffffff 47 | menu_shortcut_selected = 0xffffff 48 | 49 | wavetable_sample = 0xffffff 50 | wavetable_background = 0x0 51 | progress_bar = 0xffffff 52 | 53 | catometer_eyes = 0xa04f9b 54 | -------------------------------------------------------------------------------- /themes/Default/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/cursor.png -------------------------------------------------------------------------------- /themes/Default/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/font/charmap.txt -------------------------------------------------------------------------------- /themes/Default/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/font/font.png -------------------------------------------------------------------------------- /themes/Default/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Default/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Default/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/font7x6/font.png -------------------------------------------------------------------------------- /themes/Default/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/icon.png -------------------------------------------------------------------------------- /themes/Default/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/logo.png -------------------------------------------------------------------------------- /themes/Default/tiny/charmap.txt: -------------------------------------------------------------------------------- 1 | 0123456789abcdef+- -------------------------------------------------------------------------------- /themes/Default/tiny/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/tiny/font.png -------------------------------------------------------------------------------- /themes/Default/tiny/res.txt: -------------------------------------------------------------------------------- 1 | 4 6 -------------------------------------------------------------------------------- /themes/Default/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Default/vu.png -------------------------------------------------------------------------------- /themes/Gameboy/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Gameboy/bevel.png -------------------------------------------------------------------------------- /themes/Gameboy/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | statusbar_text = main_text 5 | 6 | sequence_normal = 0xaaaaaa 7 | sequence_counter = 0x000000 8 | 9 | pattern_normal = 0xaaaaaa 10 | pattern_beat = 0xaaaaaa 11 | pattern_bar = 0xffffff 12 | pattern_selected = 0xffffff 13 | pattern_disabled = 0x555555 14 | 15 | pattern_instrument = 0xffffff 16 | pattern_instrument_beat = 0xffffff 17 | pattern_instrument_bar = 0xffffff 18 | 19 | program_selected = 0xffffff 20 | program_even = 0xaaaaaa 21 | program_odd = 0xaaaaaa 22 | 23 | instrument_selected = 0xffffff 24 | instrument_normal = 0xaaaaaa 25 | 26 | menu = 0xffffff 27 | menu_selected = 0xffffff 28 | menu_header = 0xffffff 29 | menu_header_selected = 0xffffff 30 | menu_shortcut = 0xffffff 31 | menu_shortcut_selected = 0xffffff 32 | 33 | catometer_eyes = 0xa04f9b 34 | -------------------------------------------------------------------------------- /themes/Gameboy/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Gameboy/font/charmap.txt -------------------------------------------------------------------------------- /themes/Gameboy/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Gameboy/font/font.png -------------------------------------------------------------------------------- /themes/Gameboy/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Gameboy/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Gameboy/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Gameboy/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Gameboy/font7x6/font.png -------------------------------------------------------------------------------- /themes/Gameboy/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Gameboy/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Gameboy/vu.png -------------------------------------------------------------------------------- /themes/Golden_Brown/analyzor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/analyzor.png -------------------------------------------------------------------------------- /themes/Golden_Brown/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/bevel.png -------------------------------------------------------------------------------- /themes/Golden_Brown/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x0 2 | main_text = 0xe1d622 3 | small_text = 0xe1d622 4 | button_text = 0xc3ba24 5 | statusbar_text = main_text 6 | 7 | sequence_counter = 0x000000 8 | sequence_normal = 0x3c2f26 9 | 10 | pattern_normal = 0x668ca6 11 | pattern_beat = 0xa0b2c6 12 | pattern_bar = 0xd9def1 13 | pattern_selected = 0xffffff 14 | pattern_disabled = 0x333333 15 | 16 | pattern_instrument = 0x668ca6 17 | pattern_instrument_beat = 0xa0b2c6 18 | pattern_instrument_bar = 0xd9def1 19 | 20 | pattern_volume = 0x68934e 21 | pattern_volume_beat = 0xa4c187 22 | pattern_volume_bar = 0xe3f1d9 23 | 24 | pattern_ctrl = 0x937b4e 25 | pattern_ctrl_beat = 0xc1ae87 26 | pattern_ctrl_bar = 0xf1e8d9 27 | 28 | pattern_command = 0x1791a6 29 | pattern_command_beat = 0x00c8e8 30 | pattern_command_bar = 0x97eefc 31 | 32 | pattern_empty_data = 0x80000000 33 | 34 | program_selected = 0xfff4cc 35 | program_even = 0x668ca6 36 | program_odd = 0xa0b2c6 37 | 38 | instrument_selected = 0xfff4cc 39 | instrument_normal = 0x1791a6 40 | 41 | menu = 0xc1ae87 42 | menu_selected = 0xe1d622 43 | menu_header = 0x97eefc 44 | menu_header_selected = 0xd9def1 45 | menu_shortcut = 0xc1ae87 46 | menu_shortcut_selected = 0xe1d622 47 | 48 | wavetable_sample = 0xffffff 49 | wavetable_background = 0x0 50 | progress_bar = 0x291f17 51 | 52 | catometer_eyes = 0xa04f9b 53 | -------------------------------------------------------------------------------- /themes/Golden_Brown/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/font/charmap.txt -------------------------------------------------------------------------------- /themes/Golden_Brown/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/font/font.png -------------------------------------------------------------------------------- /themes/Golden_Brown/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Golden_Brown/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Golden_Brown/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/font7x6/font.png -------------------------------------------------------------------------------- /themes/Golden_Brown/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Golden_Brown/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Golden_Brown/vu.png -------------------------------------------------------------------------------- /themes/Rust_Camo/analyzor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/analyzor.png -------------------------------------------------------------------------------- /themes/Rust_Camo/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/bevel.png -------------------------------------------------------------------------------- /themes/Rust_Camo/catometer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/catometer.png -------------------------------------------------------------------------------- /themes/Rust_Camo/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x000011 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | button_text = 0xffffff 5 | text_shadow = 0x0 6 | statusbar_text = main_text 7 | 8 | sequence_counter = 0xffffff 9 | sequence_normal = 0x0 10 | 11 | pattern_normal = 0x2699ff 12 | pattern_beat = 0x2699ff 13 | pattern_bar = 0xffffff 14 | pattern_selected = 0x0 15 | pattern_disabled = 0x333333 16 | 17 | pattern_instrument = 0x2699ff 18 | pattern_instrument_beat = 0x2699ff 19 | pattern_instrument_bar = 0x2699ff 20 | 21 | pattern_volume = 0x2699ff 22 | pattern_volume_beat = 0x2699ff 23 | pattern_volume_bar = 0x2699ff 24 | 25 | pattern_ctrl = 0x2699ff 26 | pattern_ctrl_beat = 0x2699ff 27 | pattern_ctrl_bar = 0x2699ff 28 | 29 | pattern_command = 0x2699ff 30 | pattern_command_beat = 0x2699ff 31 | pattern_command_bar = 0x2699ff 32 | 33 | pattern_empty_data = 0x80000000 34 | 35 | program_selected = 0xffffff 36 | program_even = 0x2699ff 37 | program_odd = 0x2699ff 38 | 39 | instrument_selected = 0xffffff 40 | instrument_normal = 0x2699ff 41 | 42 | menu = 0xffffff 43 | menu_selected = 0xffffff 44 | menu_header = 0xffffff 45 | menu_header_selected = 0xffffff 46 | menu_shortcut = 0xffffff 47 | menu_shortcut_selected = 0xffffff 48 | 49 | wavetable_sample = 0x2699ff 50 | wavetable_background = 0x0b2b48 51 | progress_bar = 0xffffff 52 | -------------------------------------------------------------------------------- /themes/Rust_Camo/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/font/charmap.txt -------------------------------------------------------------------------------- /themes/Rust_Camo/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/font/font.png -------------------------------------------------------------------------------- /themes/Rust_Camo/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Rust_Camo/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Rust_Camo/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/font7x6/font.png -------------------------------------------------------------------------------- /themes/Rust_Camo/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Rust_Camo/tiny/charmap.txt: -------------------------------------------------------------------------------- 1 | 0123456789abcdef+- -------------------------------------------------------------------------------- /themes/Rust_Camo/tiny/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/tiny/font.png -------------------------------------------------------------------------------- /themes/Rust_Camo/tiny/res.txt: -------------------------------------------------------------------------------- 1 | 4 6 -------------------------------------------------------------------------------- /themes/Rust_Camo/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Camo/vu.png -------------------------------------------------------------------------------- /themes/Rust_Red/analyzor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/analyzor.png -------------------------------------------------------------------------------- /themes/Rust_Red/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/bevel.png -------------------------------------------------------------------------------- /themes/Rust_Red/catometer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/catometer.png -------------------------------------------------------------------------------- /themes/Rust_Red/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x000011 2 | main_text = 0xffffff 3 | small_text = 0xffffff 4 | button_text = 0xffffff 5 | text_shadow = 0x0 6 | statusbar_text = main_text 7 | 8 | sequence_counter = 0xffffff 9 | sequence_normal = 0x0 10 | 11 | pattern_normal = 0x2699ff 12 | pattern_beat = 0x2699ff 13 | pattern_bar = 0xffffff 14 | pattern_selected = 0x0 15 | pattern_disabled = 0x333333 16 | 17 | pattern_instrument = 0x2699ff 18 | pattern_instrument_beat = 0x2699ff 19 | pattern_instrument_bar = 0x2699ff 20 | 21 | pattern_volume = 0x2699ff 22 | pattern_volume_beat = 0x2699ff 23 | pattern_volume_bar = 0x2699ff 24 | 25 | pattern_ctrl = 0x2699ff 26 | pattern_ctrl_beat = 0x2699ff 27 | pattern_ctrl_bar = 0x2699ff 28 | 29 | pattern_command = 0x2699ff 30 | pattern_command_beat = 0x2699ff 31 | pattern_command_bar = 0x2699ff 32 | 33 | pattern_empty_data = 0x80000000 34 | 35 | program_selected = 0xffffff 36 | program_even = 0x2699ff 37 | program_odd = 0x2699ff 38 | 39 | instrument_selected = 0xffffff 40 | instrument_normal = 0x2699ff 41 | 42 | menu = 0xffffff 43 | menu_selected = 0xffffff 44 | menu_header = 0xffffff 45 | menu_header_selected = 0xffffff 46 | menu_shortcut = 0xffffff 47 | menu_shortcut_selected = 0xffffff 48 | 49 | wavetable_sample = 0x2699ff 50 | wavetable_background = 0x0b2b48 51 | progress_bar = 0xffffff 52 | -------------------------------------------------------------------------------- /themes/Rust_Red/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/font/charmap.txt -------------------------------------------------------------------------------- /themes/Rust_Red/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/font/font.png -------------------------------------------------------------------------------- /themes/Rust_Red/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Rust_Red/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Rust_Red/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/font7x6/font.png -------------------------------------------------------------------------------- /themes/Rust_Red/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Rust_Red/tiny/charmap.txt: -------------------------------------------------------------------------------- 1 | 0123456789abcdef+- -------------------------------------------------------------------------------- /themes/Rust_Red/tiny/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/tiny/font.png -------------------------------------------------------------------------------- /themes/Rust_Red/tiny/res.txt: -------------------------------------------------------------------------------- 1 | 4 6 -------------------------------------------------------------------------------- /themes/Rust_Red/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Rust_Red/vu.png -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/analyzor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/analyzor.png -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/bevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/bevel.png -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/colors.txt: -------------------------------------------------------------------------------- 1 | background = 0x000011 2 | main_text = 0x0 3 | small_text = 0xffffff 4 | button_text = 0xffffff 5 | text_shadow = 0x0 6 | 7 | sequence_counter = 0xffffff 8 | sequence_normal = 0x0 9 | 10 | pattern_normal = 0x3047ff 11 | pattern_beat = 0x3047ff 12 | pattern_bar = 0x3047ff 13 | pattern_selected = 0x0 14 | pattern_disabled = 0x333333 15 | 16 | statusbar_text = pattern_normal 17 | 18 | pattern_instrument = 0x3047ff 19 | pattern_instrument_beat = 0x3047ff 20 | pattern_instrument_bar = 0x3047ff 21 | 22 | pattern_volume = 0x3047ff 23 | pattern_volume_beat = 0x3047ff 24 | pattern_volume_bar = 0x3047ff 25 | 26 | pattern_ctrl = 0x3047ff 27 | pattern_ctrl_beat = 0x3047ff 28 | pattern_ctrl_bar = 0x3047ff 29 | 30 | pattern_command = 0x3047ff 31 | pattern_command_beat = 0x3047ff 32 | pattern_command_bar = 0x3047ff 33 | 34 | pattern_empty_data = 0xff000000 35 | 36 | program_selected = 0x0 37 | program_even = 0x3047ff 38 | program_odd = 0x3047ff 39 | 40 | instrument_selected = 0x0 41 | instrument_normal = 0x3047ff 42 | 43 | menu = 0xffffff 44 | menu_selected = 0xffffff 45 | menu_header = 0xffffff 46 | menu_header_selected = 0xffffff 47 | menu_shortcut = 0xffffff 48 | menu_shortcut_selected = 0xffffff 49 | 50 | wavetable_sample = 0xfff000 51 | wavetable_background = 0x0 52 | progress_bar = 0xffffff 53 | -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/font/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/font/charmap.txt -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/font/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/font/font.png -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/font/res.txt: -------------------------------------------------------------------------------- 1 | 8 8 -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/font7x6/charmap.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/font7x6/charmap.txt -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/font7x6/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/font7x6/font.png -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/font7x6/res.txt: -------------------------------------------------------------------------------- 1 | 7 6 -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/tiny/charmap.txt: -------------------------------------------------------------------------------- 1 | 0123456789abcdef+- -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/tiny/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/tiny/font.png -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/tiny/res.txt: -------------------------------------------------------------------------------- 1 | 4 6 -------------------------------------------------------------------------------- /themes/Ultimate_Proctamed/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kometbomb/klystrack/fe6e7465512bee32bf8e724857a7fbab902b8db0/themes/Ultimate_Proctamed/vu.png -------------------------------------------------------------------------------- /windres/resource.h: -------------------------------------------------------------------------------- 1 | #ifndef IDC_STATIC 2 | #define IDC_STATIC (-1) 3 | #endif 4 | 5 | #define IDI_MAINICON 101 6 | -------------------------------------------------------------------------------- /windres/resource.rc: -------------------------------------------------------------------------------- 1 | // Generated by ResEdit 1.4.13 2 | // Copyright (C) 2006-2010 3 | // http://www.resedit.net 4 | 5 | #include 6 | #include 7 | #include 8 | #include "resource.h" 9 | 10 | 11 | 12 | 13 | // 14 | // Icon resources 15 | // 16 | IDI_MAINICON ICON "..\\icon\\256x256.ico" 17 | --------------------------------------------------------------------------------