├── .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)) [](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 |
--------------------------------------------------------------------------------