Snibbetracker
Fakebit music tracker
Install / Use
/learn @lundstroem/SnibbetrackerREADME
snibbetracker
license
MIT License
Copyright (c) 2019 Harry Lundström
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
introduction
snibbetracker is a fakebit tracker written in C using SDL2 that I began working on in 2014 to learn DSP programming. As I do not have time to work on it anymore, I decided to release the source so that someone could take over if they wanted.
credits
- lundstroem
- salkinitzor
- nordloef
- Linde
- sunfl0wr
- Rockard
- 0c0
- OlofsonArcade
- goto80
- lolloise
- crabinfo
config
buffer setting:
Use lower values to decrease latency, higher values to avoid stuttering if the buffering cannot keep up. Needs to be a power of two, for example: 256, 512, 1024, 2048, 4096, 8192.
"buffer_size":4096
Path to working directory, needs to be full. OSX example: /Users/d/Documents/snibbetracker Windows example C:\snibbetracker Make sure that the folder exists before using it and that is is accessible by the program.
controls overview
- modfier key is cmd on OSX and ctrl on win.
macOS
To change settings, edit the config located at: snibbetracker.app/Contents/Resources/config.txt
track view
- return: toggle editing on/off.
- space: play/stop.
- arrow keys: move cursor.
- tab: go to pattern view.
- modifier+left/right: change octave up/down.
- modifier+up/down: move notes below cursor.
- modifier+1-9: step size.
- shift+arrow keys: make selection.
- modifier+c/v/x: copy paste or cut note (or selection).
- character keys: play notes or edit effects.
- modifier+f: toggle play cursor follow.
- home/end: go to top / bottom.
- plus/minus: transpose halfnote in selection.
- modifier+plus/minus: transpose octave in selection.
track format explanation:
- a = note, b = instrument number, ccc = effects. 6 supported channels.
- a b ccc | a b ccc | a b ccc | a b ccc | a b ccc | a b ccc
pattern view
-
arrow keys: move around grid.
-
plus/minus: cycle waveform, pattern numbers, active rows etc.
-
return: go to instrument view (when gridcursor is at Ins 0-F)
-
tab: go to track view.
-
e: jump to trackview with current row position.
-
m: mute track (or channel if cursor is at the top)
-
x: activate/inactivate track.
-
s: solo track (or channel if cursor is at the top)
-
shift+up/down: paginate tracks (0-63).
-
modifier+c/v: copy paste track data.
-
home/end: set cursor to top / bottom.
-
modifier+up/down: move rows below cursor.
-
amp - master amplitude, used both for previewing and exporting.
-
rows - number of active rows in patterns.
-
arp - general arpeggio speed.
-
preview - if notes are audible when editing.
-
tempo - open tempo editor.
-
visual - visualiser.
-
credits - show credits.
-
wavetable - connect a channel to lane 0-5 to combine waves together at different speeds. (see effect 9).
-
cust wave - create custom waveform for the "cust" wave type.
instrument view
- arrow keys: move node.
- modifier+arrow keys: move node slowly.
- tab: cycle nodes.
- return/esc: go to pattern view.
- shift: toggle editing of envelope or effects.
- home/end: cycle instruments.
custom wave
- arrow keys: move node.
- tab: cycle nodes.
wavetable view
- x: activate/inactivate row. First row is always active. Toggle loop active/inactive.
- plus/minus: change speed on top row.
- 1-F: change overall speed on top row, or speed per row.
tempo view
- x: activate/inactivate row. each column must have at least one active row.
- plus/minus: change BPM on top row.
- 1-F: change BPM on top row, or beats.
- modifier+return: switch tempo column. while playing, column will be armed and switched to when the current pattern has finished.
global controls
- modifier+s: go to save view
- modifier+o: go to load view
- modifier+e: go to export view.
- modifier+i: go to instrument view.
- modifier+t: go to tempo view.
- modifier+r: go to wavetable view.
- modifier+j: go to custom wave view.
- modifier+n: reset project.
- space: toggle playback.
- escape: exit current view.
- F1, F2 etc to change views.
save view
- arrow keys: navigate file system.
- character keys: enter filename.
- enter: save file at the current location.
- escape: exit save view.
load view
- arrow keys: navigate file system.
- enter: load the file.
- escape: exit load view.
effects
- 0xx - arpeggio (second tone halfsteps, third tone halfsteps) change speed in settings:Arp xx.
- 1xx - arpeggio speed (speed, speed) use one of the values or both multiplied.
- 2xx - delay (speed, feedback)
- 3xx - portamento (speed, speed) uses a single value if other is 0 or a multiplication of both. Sets the speed to when new notes will be reached.
- 4xx - vibrato (speed, depth).
- 5xx - distortion (amp, amp).
- 6xx - FM (depth, speed).
- 7xx - detune (amount, amount) 88 is middle.
- 8xx - PWM (linear position/oscillation depth, oscillation speed) on squarewave. If param2 is present, param1 will be used for osc depth.
- 9xx - set wavetable/waveform for current channel. param1: set wavetable lane 0-5 or param2: change waveform 0-5.
- Axx - (left amplitud, right amplitud) can be used for amplitude, pan and turning off a tone.
- Bxx - downsample sweep down (linear, sweep) Works best on noise channel. Choose either linear or sweep.
- Cxx - downsample sweep up (linear, sweep) Works best on noise channel. Choose either linear or sweep.
- Dxx - ends pattern. D11 - jump to next pattern and reset tempo seq. D1x - reset tempo seq. D2x - switch tempo_seq column. x = tempo seq column (0-5).
- Exx - pitch up (fast, slow) Works on non-noise channels. Both values can be combined to increase effect.
- Fxx - pitch down (fast, slow) Works on non-noise channels. Both values can be combined to increase effect.
- Gxx - bitcrush, params are multiplied to represent a bit depth. Affects all channels.
changelog
v1.1.1 - 2017-01-23 15.36
- fixed bug where groove setting was wrong in exported wavs.
- changed instrument effect inputs to not jump down to the next row.
- added icon to Windows build.
- statically linked SDL2 on Windows build (no need for the DLL).
v1.1.0 - 2017-01-01 14.21
- added functionality to move pattern rows in patternview with modifier+up/down.
- changed pagination of pattern rows to shift+up/down.
- added variable stepsize when adding or removing track items in trackview. Set with modifier+1-9.
- save path folder changed from Palestone Software to lundstroem, need to move old projects to new dir.
- changed fullscreen mode to better conserve aspect ratio.
- command prompt removed on Windows.
v1.0.0 - 2016-10-14 15.34
- file ending changed to .snibb, change ending on old project files to be able to load them.
- numpad plus and minus now works.
- added F1, F2 etc keys for fast switching of views.
- working directory setting removed, SDL2 will provide a working dir depending on the platform. Default on macOS is /Users/username/Library/Application Support/lundstroem/snibbetracker/ on Windows it can be overridden with creating a file named exe_dir_as_workspace.txt in the exe dir.
- setting for passive render removed, will always use passive.
- fixed bug where tempo would get misaligned when loading a project while playing back.
- fixed alignment of first custom wave node.
- added "author", "title", and "info" strings to file format.
build 21 - 2015-09-18 10.52
- show red lingering pixels in visualiser to display when audio clips.
- reset will now clear wavetable and custom waveform.
- noise table is now predefined instead of randomly generated at runtime.
- fixed preview of downsample sweep effect.
- fixed bug where notes at the end of the song leak into the start when exporting wav.
build 20 - 2015-08-12 16.00
- set default amp to 50% instead of 100%.
- fixed bug where visualiser showed twice the actual amplitude.
- increased max file name length to 40 instead of 20.
build 19 - 2015-08-10 12.27
- fixed reset of downsample.
- added bitcrush effect.
- when removing effect in trackview, the params are also removed.
build 18 - 2015-07-23 13.26
- changed activate button to x for wavetable, tempo and pattern editors.
- changed wavetable 900 to work like 90 to select wavetable lane 0 for current voice/channel. 9-0 to change waveform (param2).
- removed portamento reset on loopback for smoother transition when previewing. Set effect 3 without params to reset it manually when needed.
- made FM more chromatic and using now using effect 600.
- removed linked dist.
- fixed crash bug where sometimes noise phase would get a negative value.
- preview in instrument view now works with the current instrument you are editing.
- lowered modifiers for effects 700 and 300.
- refactored input.
- fixed bug where exported wave header indicated wrong size.
- fixed bug where detune would not reset.
- fixed bug where previous arp setting would app
Related Skills
node-connect
349.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
