├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── pull_request_template.md ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── assets ├── audio_item.png ├── banner.png ├── note_item.png ├── plugins.png ├── routing.png ├── sequencer.png └── va1.png ├── design ├── README.md ├── bhaviktarsariya@fiverr │ └── README.md ├── haiqasheikh@fiverr │ ├── README.md │ ├── plugins_v1 │ │ ├── knobs-1.fig │ │ └── rack.fig │ └── theme_v1 │ │ ├── assets.zip │ │ └── figma.fig ├── ivancevich@github │ └── buttons.sketch ├── saadishahh@fiverr │ ├── README.md │ └── logo_v1 │ │ ├── AI.ai │ │ ├── EPS.eps │ │ ├── high-res.jpg │ │ ├── splash.jpg │ │ └── trans.png └── stargateaudio@github │ ├── banner.xcf │ └── icon_v1 │ ├── alternate-colors.xcf │ ├── gradients.xcf │ ├── less-detail.xcf │ ├── one-color.xcf │ └── orig.xcf ├── docs ├── CODING_STYLE.md ├── CONTRIB.md ├── QA │ └── README.md ├── UserManual │ └── en │ │ ├── 000_README.md │ │ ├── 005_transport.md │ │ ├── DAW │ │ ├── 000_README.md │ │ ├── 005_transport.md │ │ ├── 010_sequencer.md │ │ ├── 020_plugin_racks.md │ │ ├── 030_item_editor.md │ │ ├── 040_routing.md │ │ ├── 050_mixer.md │ │ ├── 060_hardware_tab.md │ │ └── 070_project_notes.md │ │ └── WaveEdit │ │ └── 000_README.md ├── benchmark-project.zip ├── benchmarking.md ├── debugging.md ├── developing-plugins.md ├── project_design_principles.md ├── theming.md └── troubleshooting │ ├── appimage.md │ ├── arch_linux.md │ ├── linux_install.md │ ├── macos_install.md │ └── windows_install.md ├── scripts ├── DEBIAN_COPY.sh ├── arch_deps.sh ├── bl-osc.py ├── color-hex-interpolate.py ├── deb.py ├── debian_deps.sh ├── diag.py ├── fedora-live-os-creator ├── fedora_deps.sh ├── formant_maker.py ├── opensuse_deps.sh ├── osc_phases.py ├── pkgbuild.py ├── rpm.py ├── src.sh ├── tag.sh └── wavetable_maker │ ├── Makefile │ ├── main.c │ ├── wavs │ └── readme.txt │ └── wtgen.sh └── src ├── .gitignore ├── MANIFEST.in ├── Makefile ├── README.md ├── appimage ├── Dockerfile-appimage-builder ├── Dockerfile-base ├── appimage-assets │ ├── cmake-3.24.2.tar.gz │ ├── libsndfile-1.1.0.tar.gz │ ├── portaudio-19.7.0.tar.gz │ ├── portmidi-2.0.4.tar.gz │ └── squashfs-tools-4.5.1.tar.gz ├── appimage-helper.sh └── python-appimage │ ├── release.py │ └── stargate │ ├── entrypoint.sh │ ├── requirements.txt │ ├── stargate.appdata.xml │ ├── stargate.desktop │ └── stargate.png ├── engine ├── .clang_complete ├── .gitignore ├── Makefile ├── benchmark │ ├── bench_main.c │ ├── bench_main.h │ ├── main.c │ ├── util.c │ └── util.h ├── clang-mingw64-source-me.sh ├── cli │ └── main.c ├── cv2pdb │ ├── CHANGES │ ├── FEATURES │ ├── INSTALL │ ├── LICENSE │ ├── README.MD │ ├── autoexp.expand │ ├── autoexp.visualizer │ ├── cv2pdb.exe │ └── dviewhelper.dll ├── include │ ├── _main.h │ ├── audio │ │ ├── audio_pool.h │ │ ├── input.h │ │ ├── item.h │ │ ├── paifx.h │ │ ├── sample_graph.h │ │ └── util.h │ ├── audiodsp │ │ ├── constants.h │ │ ├── lib │ │ │ ├── amp.h │ │ │ ├── clip.h │ │ │ ├── denormal.h │ │ │ ├── fast_sine.h │ │ │ ├── fftw_lock.h │ │ │ ├── interpolate-cubic.h │ │ │ ├── interpolate-linear.h │ │ │ ├── interpolate-sinc.h │ │ │ ├── lmalloc.h │ │ │ ├── math.h │ │ │ ├── midi.h │ │ │ ├── osc_core.h │ │ │ ├── peak_meter.h │ │ │ ├── pitch_core.h │ │ │ ├── resampler_linear.h │ │ │ ├── smoother-iir.h │ │ │ ├── smoother-linear.h │ │ │ ├── spectrum_analyzer.h │ │ │ └── voice.h │ │ └── modules │ │ │ ├── delay │ │ │ ├── chorus.h │ │ │ ├── delay.h │ │ │ ├── delay_plugin.h │ │ │ ├── multi_comb_filter.h │ │ │ └── reverb.h │ │ │ ├── distortion │ │ │ ├── clipper.h │ │ │ ├── foldback.h │ │ │ ├── glitch.h │ │ │ ├── glitch_v2.h │ │ │ ├── lofi.h │ │ │ ├── multi.h │ │ │ ├── poly_glitch.h │ │ │ ├── ring_mod.h │ │ │ ├── sample_and_hold.h │ │ │ ├── saturator.h │ │ │ └── soft_clipper.h │ │ │ ├── dynamics │ │ │ ├── compressor.h │ │ │ ├── limiter.h │ │ │ └── sidechain_comp.h │ │ │ ├── filter │ │ │ ├── comb_filter.h │ │ │ ├── dc_offset_filter.h │ │ │ ├── formant_filter.h │ │ │ ├── ladder.h │ │ │ ├── nosvf.h │ │ │ ├── one_pole.h │ │ │ ├── peak_eq.h │ │ │ ├── splitter.h │ │ │ ├── svf.h │ │ │ ├── svf_stereo.h │ │ │ └── vocoder.h │ │ │ ├── modulation │ │ │ ├── adsr.h │ │ │ ├── env_follower.h │ │ │ ├── env_follower2.h │ │ │ ├── gate.h │ │ │ ├── perc_env.h │ │ │ └── ramp_env.h │ │ │ ├── multifx │ │ │ ├── multifx10knob.h │ │ │ └── multifx3knob.h │ │ │ ├── oscillator │ │ │ ├── lfo_simple.h │ │ │ ├── noise.h │ │ │ ├── osc_simple.h │ │ │ ├── osc_wavetable.h │ │ │ └── wavetables.h │ │ │ └── signal_routing │ │ │ ├── amp_and_panner.h │ │ │ ├── audio_xfade.h │ │ │ ├── dry_wet.h │ │ │ ├── dry_wet_pan.h │ │ │ ├── mixer_channel.h │ │ │ └── panner2.h │ ├── compiler.h │ ├── csv │ │ ├── 1d.h │ │ ├── 2d.h │ │ ├── kvp.h │ │ └── split.h │ ├── daw.h │ ├── daw │ │ ├── config.h │ │ ├── limits.h │ │ └── metronome.h │ ├── ds │ │ └── list.h │ ├── file │ │ └── path.h │ ├── files.h │ ├── globals.h │ ├── hardware │ │ ├── audio.h │ │ ├── config.h │ │ └── midi.h │ ├── ipc.h │ ├── log.h │ ├── osc.h │ ├── plugin.h │ ├── plugins │ │ ├── channel.h │ │ ├── compressor.h │ │ ├── delay.h │ │ ├── eq.h │ │ ├── fm1.h │ │ ├── limiter.h │ │ ├── multifx.h │ │ ├── nabu.h │ │ ├── pitchglitch.h │ │ ├── reverb.h │ │ ├── sampler1.h │ │ ├── sidechain_comp.h │ │ ├── simple_fader.h │ │ ├── trigger_fx.h │ │ ├── va1.h │ │ ├── vocoder.h │ │ ├── widemixer.h │ │ └── xfade.h │ ├── project.h │ ├── soundcheck.h │ ├── stargate.h │ ├── unicode.h │ ├── wave_edit.h │ └── worker.h ├── libcds │ ├── .gitignore │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── benchmark │ │ ├── bench_hashtable.c │ │ ├── bench_hashtable.h │ │ ├── bench_list.c │ │ ├── bench_list.h │ │ ├── bench_queue.c │ │ ├── bench_queue.h │ │ ├── main.c │ │ ├── util.c │ │ └── util.h │ ├── docs │ │ └── basics.md │ ├── include │ │ └── cds │ │ │ ├── bytestr.h │ │ │ ├── comparator.h │ │ │ ├── dl-list.h │ │ │ ├── fast-sll.h │ │ │ ├── hashtable.h │ │ │ ├── hashtable │ │ │ ├── bucket.h │ │ │ ├── entry.h │ │ │ └── hash.h │ │ │ ├── list.h │ │ │ ├── objectstore.h │ │ │ ├── queue.h │ │ │ └── types.h │ ├── libcds.spec │ ├── meta.json │ ├── src │ │ ├── bytestr.c │ │ ├── dl-list.c │ │ ├── fast-sll.c │ │ ├── hashtable.c │ │ ├── hashtable │ │ │ ├── bucket.c │ │ │ ├── entry.c │ │ │ └── hash.c │ │ ├── list.c │ │ ├── objectstore.c │ │ └── queue.c │ └── tests │ │ ├── hashtable │ │ ├── test_hash.c │ │ └── test_hash.h │ │ ├── main.c │ │ ├── test_bytestr.c │ │ ├── test_bytestr.h │ │ ├── test_dl-list.c │ │ ├── test_dl-list.h │ │ ├── test_fast-sll.c │ │ ├── test_fast-sll.h │ │ ├── test_hashtable.c │ │ ├── test_hashtable.h │ │ ├── test_list.c │ │ ├── test_list.h │ │ ├── test_objectstore.c │ │ ├── test_objectstore.h │ │ ├── test_queue.c │ │ └── test_queue.h ├── mingw64-source-me.sh ├── src │ ├── _main.c │ ├── audio │ │ ├── audio_pool.c │ │ ├── input.c │ │ ├── item.c │ │ ├── paifx.c │ │ ├── sample_graph.c │ │ └── util.c │ ├── audiodsp │ │ ├── lib │ │ │ ├── amp.c │ │ │ ├── clip.c │ │ │ ├── denormal.c │ │ │ ├── fast_sine.c │ │ │ ├── fftw_lock.c │ │ │ ├── interpolate-cubic.c │ │ │ ├── interpolate-linear.c │ │ │ ├── interpolate-sinc.c │ │ │ ├── lmalloc.c │ │ │ ├── math.c │ │ │ ├── midi.c │ │ │ ├── osc_core.c │ │ │ ├── peak_meter.c │ │ │ ├── pitch_core.c │ │ │ ├── resampler_linear.c │ │ │ ├── smoother-iir.c │ │ │ ├── smoother-linear.c │ │ │ ├── spectrum_analyzer.c │ │ │ └── voice.c │ │ └── modules │ │ │ ├── delay │ │ │ ├── chorus.c │ │ │ ├── delay.c │ │ │ ├── delay_plugin.c │ │ │ ├── multi_comb_filter.c │ │ │ └── reverb.c │ │ │ ├── distortion │ │ │ ├── clipper.c │ │ │ ├── foldback.c │ │ │ ├── glitch.c │ │ │ ├── glitch_v2.c │ │ │ ├── lofi.c │ │ │ ├── multi.c │ │ │ ├── poly_glitch.c │ │ │ ├── ring_mod.c │ │ │ ├── sample_and_hold.c │ │ │ ├── saturator.c │ │ │ └── soft_clipper.c │ │ │ ├── dynamics │ │ │ ├── compressor.c │ │ │ ├── limiter.c │ │ │ └── sidechain_comp.c │ │ │ ├── filter │ │ │ ├── comb_filter.c │ │ │ ├── dc_offset_filter.c │ │ │ ├── formant_filter.c │ │ │ ├── ladder.c │ │ │ ├── nosvf.c │ │ │ ├── one_pole.c │ │ │ ├── peak_eq.c │ │ │ ├── splitter.c │ │ │ ├── svf.c │ │ │ ├── svf_stereo.c │ │ │ └── vocoder.c │ │ │ ├── modulation │ │ │ ├── adsr.c │ │ │ ├── env_follower.c │ │ │ ├── env_follower2.c │ │ │ ├── gate.c │ │ │ ├── perc_env.c │ │ │ └── ramp_env.c │ │ │ ├── multifx │ │ │ ├── multifx10knob.c │ │ │ └── multifx3knob.c │ │ │ ├── oscillator │ │ │ ├── lfo_simple.c │ │ │ ├── noise.c │ │ │ ├── osc_simple.c │ │ │ ├── osc_wavetable.c │ │ │ └── wavetables.c │ │ │ └── signal_routing │ │ │ ├── amp_and_panner.c │ │ │ ├── audio_xfade.c │ │ │ ├── dry_wet.c │ │ │ ├── dry_wet_pan.c │ │ │ ├── mixer_channel.c │ │ │ └── panner2.c │ ├── compiler.c │ ├── csv │ │ ├── 1d.c │ │ ├── 2d.c │ │ ├── kvp.c │ │ └── split.c │ ├── daw │ │ ├── atm.c │ │ ├── audio.c │ │ ├── config.c │ │ ├── daw.c │ │ ├── item.c │ │ ├── metronome.c │ │ ├── midi.c │ │ ├── render.c │ │ ├── route.c │ │ ├── seq.c │ │ └── track.c │ ├── ds │ │ └── list.c │ ├── file │ │ └── path.c │ ├── files.c │ ├── globals.c │ ├── hardware │ │ ├── audio.c │ │ ├── config.c │ │ └── midi.c │ ├── ipc │ │ ├── ipc.c │ │ ├── unix.c │ │ └── windows.c │ ├── log.c │ ├── osc.c │ ├── plugin.c │ ├── plugins │ │ ├── channel.c │ │ ├── compressor.c │ │ ├── delay.c │ │ ├── eq.c │ │ ├── fm1.c │ │ ├── limiter.c │ │ ├── multifx.c │ │ ├── nabu.c │ │ ├── pitchglitch.c │ │ ├── reverb.c │ │ ├── sampler1.c │ │ ├── sidechain_comp.c │ │ ├── simple_fader.c │ │ ├── trigger_fx.c │ │ ├── va1.c │ │ ├── vocoder.c │ │ ├── widemixer.c │ │ └── xfade.c │ ├── project.c │ ├── soundcheck.c │ ├── stargate.c │ ├── unicode.c │ ├── wave_edit.c │ └── worker.c ├── test_fixtures │ ├── 1.wav │ ├── 2.wav │ └── projects │ │ ├── daw_e2e │ │ ├── audio │ │ │ ├── audio_pool │ │ │ ├── samplegraph │ │ │ │ ├── 0 │ │ │ │ └── 1 │ │ │ ├── samples │ │ │ │ └── home │ │ │ │ │ └── fd │ │ │ │ │ └── src │ │ │ │ │ └── github.com │ │ │ │ │ └── stargateaudio │ │ │ │ │ └── stargate-sample-pack │ │ │ │ │ └── stargate-sample-pack │ │ │ │ │ └── stargate │ │ │ │ │ └── kicks │ │ │ │ │ ├── kick-1-A.wav │ │ │ │ │ └── kick-1-C.wav │ │ │ ├── stretch.txt │ │ │ └── stretch_map.txt │ │ ├── backups │ │ │ └── 2021-12-16_19-50-52.tar.bz2 │ │ └── projects │ │ │ ├── daw │ │ │ ├── items.txt │ │ │ ├── items │ │ │ │ ├── 0 │ │ │ │ └── 1 │ │ │ ├── playlist.json │ │ │ ├── routing.txt │ │ │ ├── songs │ │ │ │ └── 0 │ │ │ ├── tracks.txt │ │ │ └── tracks │ │ │ │ ├── 0 │ │ │ │ ├── 1 │ │ │ │ ├── 2 │ │ │ │ ├── 3 │ │ │ │ ├── 4 │ │ │ │ ├── 5 │ │ │ │ ├── 6 │ │ │ │ ├── 7 │ │ │ │ ├── 8 │ │ │ │ ├── 9 │ │ │ │ ├── 10 │ │ │ │ ├── 11 │ │ │ │ ├── 12 │ │ │ │ ├── 13 │ │ │ │ ├── 14 │ │ │ │ ├── 15 │ │ │ │ ├── 16 │ │ │ │ ├── 17 │ │ │ │ ├── 18 │ │ │ │ ├── 19 │ │ │ │ ├── 20 │ │ │ │ ├── 21 │ │ │ │ ├── 22 │ │ │ │ ├── 23 │ │ │ │ ├── 24 │ │ │ │ ├── 25 │ │ │ │ ├── 26 │ │ │ │ ├── 27 │ │ │ │ ├── 28 │ │ │ │ ├── 29 │ │ │ │ ├── 30 │ │ │ │ └── 31 │ │ │ ├── plugin_uid.txt │ │ │ ├── plugins │ │ │ ├── 0 │ │ │ ├── 1 │ │ │ ├── 2 │ │ │ ├── 3 │ │ │ ├── 4 │ │ │ ├── 5 │ │ │ ├── 6 │ │ │ ├── 7 │ │ │ ├── 8 │ │ │ ├── 9 │ │ │ ├── 10 │ │ │ ├── 11 │ │ │ ├── 12 │ │ │ ├── 13 │ │ │ ├── 14 │ │ │ ├── 15 │ │ │ ├── 16 │ │ │ └── 17 │ │ │ └── wave_edit │ │ │ └── tracks │ │ │ └── 0 │ │ └── wave_edit_e2e │ │ ├── audio │ │ ├── audio_pool │ │ ├── samplegraph │ │ │ ├── 0 │ │ │ └── 1 │ │ ├── stretch.txt │ │ └── stretch_map.txt │ │ └── projects │ │ ├── daw │ │ ├── items.txt │ │ ├── playlist.json │ │ ├── songs │ │ │ └── 0 │ │ ├── tracks.txt │ │ └── tracks │ │ │ ├── 0 │ │ │ ├── 1 │ │ │ ├── 2 │ │ │ ├── 3 │ │ │ ├── 4 │ │ │ ├── 5 │ │ │ ├── 6 │ │ │ ├── 7 │ │ │ ├── 8 │ │ │ ├── 9 │ │ │ ├── 10 │ │ │ ├── 11 │ │ │ ├── 12 │ │ │ ├── 13 │ │ │ ├── 14 │ │ │ ├── 15 │ │ │ ├── 16 │ │ │ ├── 17 │ │ │ ├── 18 │ │ │ ├── 19 │ │ │ ├── 20 │ │ │ ├── 21 │ │ │ ├── 22 │ │ │ ├── 23 │ │ │ ├── 24 │ │ │ ├── 25 │ │ │ ├── 26 │ │ │ ├── 27 │ │ │ ├── 28 │ │ │ ├── 29 │ │ │ ├── 30 │ │ │ └── 31 │ │ └── wave_edit │ │ └── tracks │ │ └── 0 ├── test_tmp │ └── .gitkeep └── tests │ ├── audiodsp │ ├── lib │ │ ├── test_amp.c │ │ ├── test_amp.h │ │ ├── test_denormal.c │ │ ├── test_denormal.h │ │ ├── test_resampler_linear.c │ │ └── test_resampler_linear.h │ └── modules │ │ └── modulation │ │ ├── test_adsr.c │ │ └── test_adsr.h │ ├── csv │ ├── test_split.c │ └── test_split.h │ ├── file │ └── test_path.c │ ├── main.c │ ├── plugins │ ├── test_va1.c │ └── test_va1.h │ ├── test_audiodsp.c │ ├── test_csv.c │ ├── test_daw.c │ ├── test_files.c │ ├── test_main.h │ ├── test_plugins.c │ ├── test_wave_edit.c │ └── testlib │ ├── math.c │ └── math.h ├── files ├── fonts │ ├── RobotoCondensed-Bold.ttf │ └── RobotoCondensed-Regular.ttf ├── metronome │ └── square │ │ ├── down.wav │ │ └── up.wav ├── plugin_assets │ ├── Knob 1.svg │ ├── compressor │ │ └── logo.svg │ ├── delay │ │ ├── knob-bg.svg │ │ ├── knob-fg.svg │ │ └── logo.svg │ ├── drop-down-dark.svg │ ├── drop-down.svg │ ├── fm1 │ │ └── logo-left.svg │ ├── gold-knob-bg.svg │ ├── gold-knob-complete.svg │ ├── gold-knob-fg.svg │ ├── knob-metal-3.svg │ ├── knob-metal-4.svg │ ├── knob-metal-5.svg │ ├── knob-metal-bg.svg │ ├── knob-plastic-1.svg │ ├── knob-plastic-2-fg.svg │ ├── knob-plastic-2-light.svg │ ├── knob-plastic-2.svg │ ├── knob-plastic-3.svg │ ├── knob-plastic-4.svg │ ├── knob-plastic-5.svg │ ├── knob-plastic-fg.svg │ ├── limiter │ │ └── logo.svg │ ├── logo-right.svg │ ├── multifx │ │ └── logo-left.svg │ ├── pitchglitch │ │ ├── knob-bg.svg │ │ ├── knob-fg.svg │ │ └── logo.svg │ ├── reverb │ │ ├── knob-bg.svg │ │ ├── knob-fg.svg │ │ └── logo.svg │ ├── screw.svg │ ├── sidechain_compressor │ │ └── logo.svg │ ├── slider-1-h.svg │ ├── slider-1-v.svg │ ├── triggerfx │ │ └── logo.svg │ ├── va1 │ │ ├── knob.svg │ │ ├── knob2.svg │ │ ├── logo-left.svg │ │ └── logo-right.svg │ ├── vocoder │ │ └── logo.svg │ └── xfade │ │ └── logo.svg ├── presets │ ├── FM1.sgp │ └── VA1.sgp ├── share │ ├── applications │ │ └── stargate.desktop │ ├── doc │ │ └── stargate │ │ │ └── copyright │ ├── mime │ │ └── packages │ │ │ └── stargate.xml │ └── pixmaps │ │ ├── stargate.ico │ │ └── stargate.png └── themes │ └── default │ ├── assets │ ├── dark │ │ ├── dc-off.svg │ │ ├── draw-off.svg │ │ ├── drop-down.svg │ │ ├── erase-off.svg │ │ ├── follow-off.svg │ │ ├── fx-off.svg │ │ ├── hide-off.svg │ │ ├── knob-fg.svg │ │ ├── loop-off.svg │ │ ├── menu.svg │ │ ├── metronome-off.svg │ │ ├── mute-off.svg │ │ ├── panic.svg │ │ ├── play-off.svg │ │ ├── power-off.svg │ │ ├── rec-off.svg │ │ ├── select-off.svg │ │ ├── smooth.svg │ │ ├── solo-off.svg │ │ ├── speaker-off.svg │ │ ├── split-off.svg │ │ └── stop-off.svg │ ├── daw.svg │ ├── dc-on.svg │ ├── draw-on.svg │ ├── edit-atm.svg │ ├── edit-items.svg │ ├── erase-on.svg │ ├── follow-on.svg │ ├── fx-on.svg │ ├── h-fader.svg │ ├── hide-on.svg │ ├── icon.svg │ ├── knob-bg.svg │ ├── knob-fg.svg │ ├── loop-on.svg │ ├── metronome-on.svg │ ├── mute-on.svg │ ├── play-on.svg │ ├── power-on.svg │ ├── rec-on.svg │ ├── select-on.svg │ ├── solo-on.svg │ ├── speaker-on.svg │ ├── spinbox-down.svg │ ├── spinbox-up.svg │ ├── splash.svg │ ├── split-on.svg │ ├── stop-on.svg │ ├── v-fader.svg │ ├── wave-editor.svg │ └── zoom_slider_handle.svg │ ├── default-lightweight.sgtheme │ ├── default.sgtheme │ ├── palettes │ ├── dark.yaml │ └── default.yaml │ ├── system │ └── default.yaml │ ├── templates │ └── default.qss │ └── vars │ ├── common.yaml │ └── default.yaml ├── linux ├── ARM.md ├── README.md ├── building_universal_deb_and_rpm_packages.md └── rpi4.md ├── loc.sh ├── macos ├── Distribution.xml ├── README.md ├── Scripts │ ├── postinstall │ └── preinstall ├── homebrew_deps.sh ├── link.py ├── release.py ├── requirements-intel.txt ├── requirements-m1.txt ├── stargate.icns └── test-without-brew.sh ├── meta.json ├── pyinstaller-mac-onedir.spec ├── pyinstaller-windows-onedir.spec ├── pyinstaller-windows-onefile.spec ├── requirements.txt ├── scripts └── stargate ├── setup.cfg ├── setup.py ├── sg_py_vendor ├── .gitignore ├── mido │ ├── __about__.py │ ├── __init__.py │ ├── backends │ │ ├── __init__.py │ │ ├── _parser_queue.py │ │ ├── amidi.py │ │ ├── backend.py │ │ ├── portmidi.py │ │ ├── portmidi_init.py │ │ ├── pygame.py │ │ ├── rtmidi.py │ │ ├── rtmidi_python.py │ │ └── rtmidi_utils.py │ ├── frozen.py │ ├── messages │ │ ├── __init__.py │ │ ├── checks.py │ │ ├── decode.py │ │ ├── encode.py │ │ ├── messages.py │ │ ├── specs.py │ │ └── strings.py │ ├── midifiles │ │ ├── __init__.py │ │ ├── meta.py │ │ ├── midifiles.py │ │ ├── tracks.py │ │ └── units.py │ ├── parser.py │ ├── ports.py │ ├── py2.py │ ├── sockets.py │ ├── syx.py │ ├── tokenizer.py │ └── version.py ├── pymarshal │ ├── __init__.py │ ├── bson.py │ ├── csv.py │ ├── json.py │ └── util │ │ ├── __init__.py │ │ ├── checks.py │ │ ├── init_args.py │ │ ├── key_swap.py │ │ ├── marshal.py │ │ ├── pm_assert.py │ │ └── type.py └── wavefile │ ├── __init__.py │ ├── libsndfile.py │ └── wavefile.py ├── sglib ├── __init__.py ├── api │ ├── __init__.py │ ├── daw │ │ ├── __init__.py │ │ ├── api_audio_item.py │ │ ├── api_cc.py │ │ ├── api_note.py │ │ ├── api_patterns.py │ │ ├── api_pb.py │ │ ├── api_playlist.py │ │ ├── api_project_notes.py │ │ ├── api_rack.py │ │ ├── api_seq.py │ │ └── api_transport.py │ └── wave_edit │ │ ├── __init__.py │ │ └── api_project_notes.py ├── constants.py ├── hardware │ ├── __init__.py │ └── rpi.py ├── ipc │ ├── __init__.py │ ├── abstract.py │ ├── daw.py │ ├── stargate.py │ └── wave_edit.py ├── lib │ ├── __init__.py │ ├── _ctypes.py │ ├── appimage.py │ ├── bookmark.py │ ├── engine.py │ ├── history.py │ ├── midi.py │ ├── normalize.py │ ├── path │ │ ├── __init__.py │ │ ├── linux.py │ │ ├── macos.py │ │ └── windows.py │ ├── paulstretch.py │ ├── pidfile.py │ ├── portable.py │ ├── portaudio.py │ ├── portmidi.py │ ├── process.py │ ├── scales.py │ ├── sfz.py │ ├── strings.py │ ├── translate.py │ ├── updates.py │ └── util.py ├── log.py ├── math.py └── models │ ├── __init__.py │ ├── cc_mapping.py │ ├── daw │ ├── __init__.py │ ├── _shared.py │ ├── atm_point.py │ ├── atm_sequence.py │ ├── audio_item.py │ ├── item.py │ ├── midi_file.py │ ├── playlist.py │ ├── project.py │ ├── routing │ │ ├── __init__.py │ │ ├── graph.py │ │ ├── midi.py │ │ └── track.py │ ├── seq_item.py │ ├── sequence_marker.py │ ├── sequencer.py │ ├── tempo_marker.py │ ├── text_marker.py │ └── track_colors.py │ ├── multifx_settings.py │ ├── plugin │ ├── __init__.py │ ├── plugin.py │ ├── preset.py │ └── rack.py │ ├── plugin_file.py │ ├── plugins │ ├── __init__.py │ └── sampler1.py │ ├── project │ ├── __init__.py │ ├── abstract.py │ ├── midi.py │ └── project.py │ ├── stargate │ ├── __init__.py │ ├── audio_inputs.py │ ├── audio_item.py │ ├── audio_pool.py │ ├── midi_events.py │ ├── project.py │ ├── sample_graph.py │ ├── takes.py │ └── tracks.py │ ├── theme.py │ └── track_plugin.py ├── sgui ├── __init__.py ├── _main.py ├── daw │ ├── __init__.py │ ├── entrypoint.py │ ├── filedragdrop.py │ ├── hardware.py │ ├── item_editor │ │ ├── __init__.py │ │ ├── abstract.py │ │ ├── audio │ │ │ ├── __init__.py │ │ │ ├── _shared.py │ │ │ ├── fade_vol_dialog.py │ │ │ ├── item.py │ │ │ ├── item_context_menu.py │ │ │ └── time_pitch_dialog.py │ │ ├── automation.py │ │ ├── editor.py │ │ └── notes │ │ │ ├── __init__.py │ │ │ ├── _shared.py │ │ │ ├── editor.py │ │ │ ├── key.py │ │ │ └── note.py │ ├── lib │ │ ├── __init__.py │ │ ├── item.py │ │ ├── sequence.py │ │ └── undo.py │ ├── painter_path.py │ ├── sequencer │ │ ├── __init__.py │ │ ├── _shared.py │ │ ├── atm_context_menu.py │ │ ├── atm_item.py │ │ ├── audio_input.py │ │ ├── context_menu.py │ │ ├── header_context_menu.py │ │ ├── item.py │ │ ├── itemlist.py │ │ ├── midi_file_dialog.py │ │ ├── playlist.py │ │ ├── seq.py │ │ └── track.py │ ├── shared.py │ ├── strings.py │ └── transport.py ├── ipc │ ├── __init__.py │ ├── null.py │ └── socket.py ├── main.py ├── plugins │ ├── __init__.py │ ├── channel.py │ ├── compressor.py │ ├── delay.py │ ├── eq.py │ ├── fm1.py │ ├── limiter.py │ ├── multifx.py │ ├── nabu.py │ ├── pitchglitch.py │ ├── reverb.py │ ├── sampler1.py │ ├── sidechain_comp.py │ ├── simple_fader.py │ ├── trigger_fx.py │ ├── util.py │ ├── va1.py │ ├── vocoder.py │ ├── widemixer.py │ └── xfade.py ├── preflight.py ├── project.py ├── project_recovery.py ├── sgqt.py ├── shared.py ├── splash.py ├── transport.py ├── updates.py ├── util.py ├── wave_edit │ └── __init__.py ├── welcome.py └── widgets │ ├── __init__.py │ ├── _shared.py │ ├── abstract_plugin_ui.py │ ├── add_mul_dialog.py │ ├── additive_osc.py │ ├── adsr.py │ ├── adsr_main.py │ ├── audio_item_viewer.py │ ├── control.py │ ├── distortion.py │ ├── eq.py │ ├── file_browser.py │ ├── file_select.py │ ├── filter.py │ ├── freq_splitter.py │ ├── hardware_dialog.py │ ├── knob.py │ ├── lfo.py │ ├── lfo_dialog.py │ ├── main.py │ ├── multifx.py │ ├── multifx10.py │ ├── multifx_tooltips.py │ ├── nested_combobox.py │ ├── note_selector.py │ ├── ordered_table.py │ ├── paif.py │ ├── peak_meter.py │ ├── perc_env.py │ ├── playback_widget.py │ ├── preset_browser.py │ ├── preset_manager.py │ ├── project_notes.py │ ├── pysound.py │ ├── ramp_env.py │ ├── routing_matrix.py │ ├── sample_graph.py │ ├── sample_viewer.py │ ├── spectrum.py │ ├── time_pitch_dialog.py │ ├── transport.py │ └── va_osc.py ├── test ├── __init__.py └── sglib │ ├── __init__.py │ ├── _fixtures │ ├── config │ │ └── device.csv │ └── wavs │ │ ├── 1.wav │ │ └── 2.wav │ ├── hardware │ ├── __init__.py │ └── test_rpi.py │ ├── lib │ ├── __init__.py │ ├── sfz │ │ ├── 001-Acoustic Grand Piano.sfz │ │ ├── 002-Bright Acoustic Piano.sfz │ │ ├── 003-Electric Grand Piano.sfz │ │ ├── 005-Electric Piano 1.sfz │ │ ├── Data │ │ │ ├── hammer.txt │ │ │ ├── notes.txt │ │ │ ├── pedal.txt │ │ │ ├── region.txt │ │ │ ├── str_res.txt │ │ │ ├── tune_nat.txt │ │ │ ├── tune_ret.txt │ │ │ ├── vel_01.txt │ │ │ ├── vel_02.txt │ │ │ ├── vel_03.txt │ │ │ ├── vel_04.txt │ │ │ ├── vel_05.txt │ │ │ ├── vel_06.txt │ │ │ ├── vel_07.txt │ │ │ ├── vel_08.txt │ │ │ ├── vel_09.txt │ │ │ ├── vel_10.txt │ │ │ ├── vel_11.txt │ │ │ ├── vel_12.txt │ │ │ ├── vel_13.txt │ │ │ ├── vel_14.txt │ │ │ ├── vel_15.txt │ │ │ └── vel_16.txt │ │ └── Salamander Grand Piano V3.sfz │ ├── test_ctypes.py │ ├── test_pidfile.py │ └── test_sfz.py │ ├── models │ ├── __init__.py │ ├── daw │ │ ├── __init__.py │ │ └── routing │ │ │ ├── test_graph.py │ │ │ ├── test_midi.py │ │ │ └── test_track.py │ ├── plugin │ │ ├── __init__.py │ │ ├── test_plugin.py │ │ ├── test_preset.py │ │ └── test_rack.py │ ├── stargate │ │ ├── __init__.py │ │ └── test_audio_pool.py │ ├── test_project.py │ └── test_theme.py │ ├── test_log.py │ └── test_math.py ├── test_parse.sh ├── vendor └── .gitignore └── windows ├── LaunchStargate.cmd ├── README.md ├── debug-symbols.md ├── gpl-3.0.txt ├── msys2_deps.sh ├── release.py ├── requirements.txt └── windows_portable_flash_drive.md /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # NOTE 2 | Answering these questions is mandatory. If your pull request (PR) does not 3 | include these questions with answers, it may be closed without further 4 | discussion. 5 | 6 | # Questions 7 | **Is this PR a feature or bug fix?** 8 | 9 | **Briefly describe what this PR does, and the value it adds** 10 | 11 | **Does this PR align with the core project principles?** 12 | Project principles are available [HERE]( 13 | https://github.com/stargateaudio/stargate/docs/project_design_principles.md 14 | ) 15 | 16 | **How did you test the code for bugs and performance? If not applicable, 17 | enter "N/A", otherwise please describe what you did, your findings, and 18 | how it will affect support for hardware official supported by Stargate DAW** 19 | 20 | **Have you given this project (Stargate DAW) a Github star?** 21 | 22 | **Is this a one-off contribution, or will you become a regular contributor?** 23 | 24 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/vendor/portaudio-binaries"] 2 | path = src/vendor/portaudio-binaries 3 | url = https://github.com/spatialaudio/portaudio-binaries.git 4 | 5 | [submodule "src/vendor/soundtouch"] 6 | path = src/vendor/soundtouch 7 | url = ../stargate-soundtouch.git 8 | 9 | [submodule "src/vendor/sbsms"] 10 | path = src/vendor/sbsms 11 | url = ../stargate-sbsms.git 12 | -------------------------------------------------------------------------------- /assets/audio_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/audio_item.png -------------------------------------------------------------------------------- /assets/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/banner.png -------------------------------------------------------------------------------- /assets/note_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/note_item.png -------------------------------------------------------------------------------- /assets/plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/plugins.png -------------------------------------------------------------------------------- /assets/routing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/routing.png -------------------------------------------------------------------------------- /assets/sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/sequencer.png -------------------------------------------------------------------------------- /assets/va1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/assets/va1.png -------------------------------------------------------------------------------- /design/README.md: -------------------------------------------------------------------------------- 1 | # Design 2 | This folder contains source files for graphic design work done for the project. 3 | 4 | Each artist should have their own folder, and if they like, appropriate 5 | attribution and links to hire them for graphic design and related services. 6 | -------------------------------------------------------------------------------- /design/bhaviktarsariya@fiverr/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | bhaviktarsariya was hired through fiverr.com to create an application icon. 3 | You can hire bhaviktarsariya for your own projects using [this link]( 4 | https://www.fiverr.com/bhaviktarsariya 5 | ) 6 | -------------------------------------------------------------------------------- /design/haiqasheikh@fiverr/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | Haiqa was hired through fiverr.com to create mock-ups for color themes, 3 | and icon sets. If you would like to hire Haiqa for your own projects, visit 4 | her [fiverr page](https://www.fiverr.com/haiqasheikh) 5 | 6 | -------------------------------------------------------------------------------- /design/haiqasheikh@fiverr/plugins_v1/knobs-1.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/haiqasheikh@fiverr/plugins_v1/knobs-1.fig -------------------------------------------------------------------------------- /design/haiqasheikh@fiverr/plugins_v1/rack.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/haiqasheikh@fiverr/plugins_v1/rack.fig -------------------------------------------------------------------------------- /design/haiqasheikh@fiverr/theme_v1/assets.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/haiqasheikh@fiverr/theme_v1/assets.zip -------------------------------------------------------------------------------- /design/haiqasheikh@fiverr/theme_v1/figma.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/haiqasheikh@fiverr/theme_v1/figma.fig -------------------------------------------------------------------------------- /design/ivancevich@github/buttons.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/ivancevich@github/buttons.sketch -------------------------------------------------------------------------------- /design/saadishahh@fiverr/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | Saadishahh was hired to create the logo for the stargateaudio project using 4 | fiverr.com. If you would like to hire Saadishahh for your own project, 5 | [visit this link](https://www.fiverr.com/saadishahh). 6 | -------------------------------------------------------------------------------- /design/saadishahh@fiverr/logo_v1/AI.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/saadishahh@fiverr/logo_v1/AI.ai -------------------------------------------------------------------------------- /design/saadishahh@fiverr/logo_v1/EPS.eps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/saadishahh@fiverr/logo_v1/EPS.eps -------------------------------------------------------------------------------- /design/saadishahh@fiverr/logo_v1/high-res.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/saadishahh@fiverr/logo_v1/high-res.jpg -------------------------------------------------------------------------------- /design/saadishahh@fiverr/logo_v1/splash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/saadishahh@fiverr/logo_v1/splash.jpg -------------------------------------------------------------------------------- /design/saadishahh@fiverr/logo_v1/trans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/saadishahh@fiverr/logo_v1/trans.png -------------------------------------------------------------------------------- /design/stargateaudio@github/banner.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/stargateaudio@github/banner.xcf -------------------------------------------------------------------------------- /design/stargateaudio@github/icon_v1/alternate-colors.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/stargateaudio@github/icon_v1/alternate-colors.xcf -------------------------------------------------------------------------------- /design/stargateaudio@github/icon_v1/gradients.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/stargateaudio@github/icon_v1/gradients.xcf -------------------------------------------------------------------------------- /design/stargateaudio@github/icon_v1/less-detail.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/stargateaudio@github/icon_v1/less-detail.xcf -------------------------------------------------------------------------------- /design/stargateaudio@github/icon_v1/one-color.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/stargateaudio@github/icon_v1/one-color.xcf -------------------------------------------------------------------------------- /design/stargateaudio@github/icon_v1/orig.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/design/stargateaudio@github/icon_v1/orig.xcf -------------------------------------------------------------------------------- /docs/QA/README.md: -------------------------------------------------------------------------------- 1 | # QA 2 | This folder contains various QA flows for manually testing Stargate. 3 | Developers should check and update these flows as they modify or add 4 | features. 5 | 6 | # Folder structure 7 | Please adhere to the following structure when creating flows: 8 | ``` 9 | docs/QA/ 10 | daw/ 11 | full.md # List of flows to follow, in a sane order 12 | sequencer/ 13 | some_flow.md 14 | ... 15 | item_editor/ 16 | ... 17 | wave_editor/ 18 | ... 19 | ``` 20 | The structure should follow `host->tab/section->flow.md` 21 | -------------------------------------------------------------------------------- /docs/UserManual/en/005_transport.md: -------------------------------------------------------------------------------- 1 | # Transport 2 | The transport handles common functionality between hosts such as: 3 | - The main menu 4 | - Play, stop, record 5 | - Panic 6 | - Stargate host selection 7 | - Displaying Time 8 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/000_README.md: -------------------------------------------------------------------------------- 1 | # Concept 2 | The Stargate DAW is a new take on pattern-based editing. The feature set is 3 | suitable for most kinds of music, with a focus on pattern-based music such 4 | as House, Dubstep, EDM, Hip-Hop and modern Pop. 5 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/005_transport.md: -------------------------------------------------------------------------------- 1 | # Transport 2 | The DAW transport adds additional controls to the standard transport. 3 | 4 | # Loop Mode 5 | This allows you to loop your project. Currently, the only supported modes are 6 | `Off` and `Region`. To loop a region, first set the region start and end in 7 | the sequencer header by right-clicking. 8 | 9 | # Mouse Tools 10 | These buttons will appear or disappear depending on which tab is open. They 11 | are mapped to the hotkeys a, s, d, f, so you can keep your right hand on 12 | the mouse, and use your left hand to switch mouse tools. 13 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/020_plugin_racks.md: -------------------------------------------------------------------------------- 1 | # Plugin Racks 2 | The plugin racks host all of your instrument and effect plugins. Stargate 3 | uses it's own high quality, CPU efficient plugins, in it's own plugin format. 4 | This allows us to create a DAW that works on every operating system and CPU 5 | architecture, with portable project files that can be shared for easy 6 | collaboration. 7 | 8 | Each plugin rack receives input from a sequencer track. You can open a track's 9 | plugin rack by clicking on the dropdown on the sequencer track and clicking 10 | the "Show Plugins" button. 11 | 12 | All instrument plugins pass-through their audio. You can layer multiple 13 | instrument plugins, or send audio through them, mixing it with the output 14 | of the instrument. 15 | 16 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/040_routing.md: -------------------------------------------------------------------------------- 1 | # Routing 2 | This tab allows you to control the routing of audio and MIDI throughout the 3 | project. Use cases include: 4 | - Effect processing, busses, sends 5 | - Sidechain effects such as vocoder and sidechain compressor 6 | - MIDI routing 7 | 8 | See the tooltip help for the mouse modifiers to set each type of route. 9 | 10 | # Types of Sends 11 | ## Audio 12 | Route audio from one track to another. 13 | 14 | ## Sidechain 15 | Route audio to the sidechain input of a plugin rack. This only makes sense if 16 | that rack is using a sidechain-enabled plugin. 17 | 18 | ## MIDI 19 | Send all of the MIDI events from one plugin rack to another 20 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/050_mixer.md: -------------------------------------------------------------------------------- 1 | # Mixer 2 | The mixer allows to you mix your audio and adjust the volume and pan of each 3 | channel. For each audio send defined on the `Routing` tab, there will be 4 | a slot created for a mixer plugin on the mixer. 5 | 6 | # Mixer Plugins 7 | In Stargate, the mixer uses plugins to provide mixer channel functionality. 8 | Presently, the 2 mixer plugins are `Simple Fader` and `SG Channel`, although 9 | in the future we may offer more mixer plugins. 10 | 11 | The mixer plugin is the last plugin in a plugin rack. If you want a 12 | pre-channel, you can add a mixer plugin as the first plugin in the plugin 13 | rack, but it will only be visible in the plugin rack and not the mixer. 14 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/060_hardware_tab.md: -------------------------------------------------------------------------------- 1 | # Hardware Tab 2 | The hardware tab allows you to route your audio inputs and MIDI inputs to 3 | tracks and plugin racks. You must configure your hardware correctly in 4 | the main menu File\->HardwareSettings... first before it will appear in this 5 | menu. 6 | -------------------------------------------------------------------------------- /docs/UserManual/en/DAW/070_project_notes.md: -------------------------------------------------------------------------------- 1 | # Project notes 2 | 3 | This tab simply allows you to write arbitrary text about your project. You 4 | can document things such as scales, lyrics, your inspiration, or anything 5 | else you want. 6 | -------------------------------------------------------------------------------- /docs/UserManual/en/WaveEdit/000_README.md: -------------------------------------------------------------------------------- 1 | # Wave Editor 2 | 3 | Stargate provides a basic wave editor that be used for simple tasks. If there 4 | is demand for more advanced wave editing functionality, we will turn it into 5 | a full-featured wave editor. 6 | -------------------------------------------------------------------------------- /docs/benchmark-project.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/docs/benchmark-project.zip -------------------------------------------------------------------------------- /scripts/DEBIAN_COPY.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | # Currently working on Debian 11 4 | 5 | # Build the rpm and deb packages and copy to /mnt/stargatedaw 6 | # Meant for building the rpm and deb packages on an old version of Debian, 7 | # so that they will be linked against an old glibc and in theory run on 8 | # any Linux distro that uses those package formats 9 | 10 | cd $(realpath $(dirname $0)/..) 11 | 12 | git switch main 13 | git pull 14 | ./scripts/deb.py -i 15 | ./scripts/rpm.py 16 | 17 | MINOR=$(jq -r .version.minor src/meta.json) 18 | cp \ 19 | src/stargate-${MINOR}-*amd64.deb \ 20 | stargate-${MINOR}-1.x86_64.rpm \ 21 | /mnt/stargatedaw/ 22 | -------------------------------------------------------------------------------- /scripts/arch_deps.sh: -------------------------------------------------------------------------------- 1 | sudo pacman -S \ 2 | portaudio \ 3 | python-pip \ 4 | vim \ 5 | fakeroot \ 6 | fakeroot \ 7 | binutils \ 8 | vorbis-tools \ 9 | rubberband \ 10 | pkgconf \ 11 | portmidi \ 12 | portmidi \ 13 | gcc \ 14 | vorbis-tools python-pyqt6 \ 15 | python-mutagen \ 16 | python-jinja python-numpy python-pyaml \ 17 | jq \ 18 | make \ 19 | libsndfile 20 | -------------------------------------------------------------------------------- /scripts/debian_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -xe 2 | 3 | # Ubuntu, and maybe some of it's derivatives 4 | sudo add-apt-repository universe || true 5 | sudo add-apt-repository multiverse || true 6 | 7 | sudo apt-get update 8 | 9 | sudo apt-get install -y \ 10 | autoconf \ 11 | automake \ 12 | build-essential \ 13 | debhelper \ 14 | dh-make \ 15 | ffmpeg \ 16 | g++ \ 17 | gcc \ 18 | gdb \ 19 | genisoimage \ 20 | gettext \ 21 | jq \ 22 | lame \ 23 | libasound2-dev \ 24 | libfftw3-dev \ 25 | libportmidi-dev \ 26 | libsndfile1-dev \ 27 | libtool \ 28 | portaudio19-dev \ 29 | python3 \ 30 | python3-dev \ 31 | python3-numpy \ 32 | python3-pip \ 33 | python3-pyqt5 \ 34 | python3-pyqt5.qtsvg \ 35 | rpm \ 36 | rubberband-cli \ 37 | squashfs-tools \ 38 | vorbis-tools 39 | 40 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 41 | pip3 install -r ${SCRIPT_DIR}/../src/requirements.txt 42 | -------------------------------------------------------------------------------- /scripts/fedora_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | # This script installs all dependencies needed to build on Fedora 4 | 5 | #dependencies 6 | sudo dnf install \ 7 | alsa-lib-devel \ 8 | ccache \ 9 | @development-tools \ 10 | fedora-packager \ 11 | fftw-devel \ 12 | gcc \ 13 | gcc-c++ \ 14 | gcovr \ 15 | gettext \ 16 | git \ 17 | jq \ 18 | lame \ 19 | libsndfile-devel \ 20 | livecd-tools \ 21 | patchelf \ 22 | portaudio-devel \ 23 | portmidi-devel \ 24 | python3-devel \ 25 | python3-numpy \ 26 | python3-qt5 \ 27 | python3-pytest \ 28 | python3-pytest-cov \ 29 | rubberband \ 30 | spin-kickstarts \ 31 | vorbis-tools 32 | 33 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 34 | pip install -r ${SCRIPT_DIR}/../src/requirements.txt 35 | pip install yq 36 | -------------------------------------------------------------------------------- /scripts/opensuse_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | # This script installs all dependencies needed to build on Fedora 4 | 5 | #dependencies 6 | sudo zypper install \ 7 | alsa-devel \ 8 | fftw3-devel \ 9 | gcc \ 10 | gcc-c++ \ 11 | gcovr \ 12 | gettext \ 13 | git \ 14 | jq \ 15 | lame \ 16 | libsndfile-devel \ 17 | portaudio-devel \ 18 | portmidi-devel \ 19 | python3-devel \ 20 | python3-numpy \ 21 | python3-qt5 \ 22 | python3-pytest \ 23 | python3-pytest-cov \ 24 | rpm-build \ 25 | rubberband-cli \ 26 | vorbis-tools 27 | 28 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 29 | pip install -r ${SCRIPT_DIR}/../src/requirements.txt 30 | pip install yq 31 | -------------------------------------------------------------------------------- /scripts/osc_phases.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import random 3 | 4 | print("int OSC_CORE_PHASES[32][7] = {") 5 | for i in range(32): 6 | print(" {") 7 | sum_phases = 0 8 | while sum_phases > 4. or sum_phases < 3.: 9 | phases = [round(random.random(), 7) for j in range(7)] 10 | sum_phases = sum(phases) 11 | print(" " * 8 + ",\n ".join(str(x) for x in phases)) 12 | print(" },") 13 | print("};") 14 | -------------------------------------------------------------------------------- /scripts/src.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -xe 2 | 3 | #git pull 4 | MAJOR=$(jq -r .version.major src/meta.json) 5 | MINOR=$(jq -r .version.minor src/meta.json) 6 | make -C src/ commit_hash 7 | VERSION=${MAJOR}-${MINOR} 8 | rm -rf $VERSION 9 | mkdir $VERSION 10 | cp -r src/{engine,files,Makefile,meta.json,scripts,sglib} $VERSION 11 | cp -r src/{sg_py_vendor,sgui,test,vendor} $VERSION 12 | find $VERSION -name '*.pyc' -delete 13 | tar czf ${VERSION}.tar.gz $VERSION 14 | rm -rf $VERSION 15 | 16 | -------------------------------------------------------------------------------- /scripts/tag.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | MAJOR=$(jq -r .version.major src/meta.json) 4 | MINOR=$(jq -r .version.minor src/meta.json) 5 | VERSION=${MAJOR}-${MINOR} 6 | git tag ${VERSION} 7 | git push --tags 8 | -------------------------------------------------------------------------------- /scripts/wavetable_maker/wavs/readme.txt: -------------------------------------------------------------------------------- 1 | This directory receives the programmatically generated wavetables in .wav form, while the C arrays of floats are printed to wt.h 2 | -------------------------------------------------------------------------------- /scripts/wavetable_maker/wtgen.sh: -------------------------------------------------------------------------------- 1 | make clean 2 | make 3 | ./wtgen > wt.h 4 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | AppDir/ 3 | # This is dynamically generated from a template 4 | AppImageBuilder.yml 5 | appimage-build/ 6 | appimage-builder-cache/ 7 | .coverage 8 | .eggs/ 9 | COMMIT 10 | dist/ 11 | htmlcov/ 12 | stargate.egg-info/ 13 | ./tmp/ 14 | 15 | # Nuitka 16 | stargate.build 17 | stargate.dist 18 | stargate.bin 19 | stargate.onefile-build 20 | sglib/**/*.c 21 | sglib/**/*.pyd 22 | sglib/**/*.so 23 | sgui/**/*.c 24 | sgui/**/*.pyd 25 | sgui/**/*.so 26 | -------------------------------------------------------------------------------- /src/MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include files * 2 | include meta.json 3 | include requirements.txt 4 | -------------------------------------------------------------------------------- /src/appimage/Dockerfile-base: -------------------------------------------------------------------------------- 1 | ARG IMAGE=debian:11 2 | 3 | FROM ${IMAGE} 4 | 5 | RUN apt update && apt install -y \ 6 | autoconf \ 7 | autogen \ 8 | automake \ 9 | curl \ 10 | build-essential \ 11 | cmake \ 12 | g++ \ 13 | gcc \ 14 | libtool \ 15 | pkg-config \ 16 | python3-dev \ 17 | jq \ 18 | less \ 19 | tmux \ 20 | vim 21 | 22 | RUN apt install -y zlib1g-dev libssl-dev 23 | 24 | -------------------------------------------------------------------------------- /src/appimage/appimage-assets/cmake-3.24.2.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/appimage/appimage-assets/cmake-3.24.2.tar.gz -------------------------------------------------------------------------------- /src/appimage/appimage-assets/libsndfile-1.1.0.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/appimage/appimage-assets/libsndfile-1.1.0.tar.gz -------------------------------------------------------------------------------- /src/appimage/appimage-assets/portaudio-19.7.0.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/appimage/appimage-assets/portaudio-19.7.0.tar.gz -------------------------------------------------------------------------------- /src/appimage/appimage-assets/portmidi-2.0.4.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/appimage/appimage-assets/portmidi-2.0.4.tar.gz -------------------------------------------------------------------------------- /src/appimage/appimage-assets/squashfs-tools-4.5.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/appimage/appimage-assets/squashfs-tools-4.5.1.tar.gz -------------------------------------------------------------------------------- /src/appimage/python-appimage/stargate/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash -i 2 | 3 | PYVER=3.11 4 | 5 | if [ -z "$LD_LIBRARY_PATH" ]; then 6 | export LD_LIBRARY_PATH="${APPDIR}/usr/lib:${APPDIR}/usr/lib/x86_64-linux-gnu" 7 | fi 8 | 9 | export QT_QPA_PLATFORM_PLUGIN_PATH="${APPDIR}/opt/python${PYVER}/lib/python${PYVER}/site-packages/PyQt5/Qt5/plugins/platforms" 10 | 11 | export QT_DEBUG_PLUGINS=1 12 | 13 | # exporting the DISPLAY fixes Qt errors regarding the xcb platform plugin 14 | if [ -e "$(which xrandr)" ]; then 15 | export DISPLAY=":$(xrandr --current | grep -Eo 'Screen [0-9]+:' | grep -Eo '[0-9]+')" 16 | elif [ -e /tmp/.X11-unix ]; then 17 | export DISPLAY=$(ls /tmp/.X11-unix | tr 'X' ':' | head -n 1) 18 | fi 19 | 20 | 21 | {{ python-executable }} -s \ 22 | -u "${APPDIR}/opt/stargate/scripts/stargate" "$@" 23 | -------------------------------------------------------------------------------- /src/appimage/python-appimage/stargate/requirements.txt: -------------------------------------------------------------------------------- 1 | #${CURRENT_REPO} 2 | -r ${CURRENT_REPO}/requirements.txt 3 | numpy 4 | PyQt5 5 | -------------------------------------------------------------------------------- /src/appimage/python-appimage/stargate/stargate.appdata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | stargate 4 | GPL3 5 | GPL3 6 | stargate 7 | Stargate DAW 8 | 9 |

Stargate DAW is a digital audio workstation with a comprehensive 10 | set of plugins included 11 |

12 |
13 | stargate.desktop 14 | https://github.com/stargatedaw 15 | 16 | python{{ python-version }} 17 | 18 |
19 | -------------------------------------------------------------------------------- /src/appimage/python-appimage/stargate/stargate.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=stargate 4 | Exec=stargate 5 | Comment=Digital Audio Workstation (DAW) 6 | Icon=stargate 7 | Categories=System; 8 | #Terminal=true 9 | -------------------------------------------------------------------------------- /src/appimage/python-appimage/stargate/stargate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/appimage/python-appimage/stargate/stargate.png -------------------------------------------------------------------------------- /src/engine/.clang_complete: -------------------------------------------------------------------------------- 1 | -I./include 2 | 3 | -------------------------------------------------------------------------------- /src/engine/.gitignore: -------------------------------------------------------------------------------- 1 | .vs 2 | *.gcda 3 | *.gcno 4 | *.pdb 5 | *.rpm 6 | *.so 7 | *.swp 8 | *.tar.bz2 9 | /tmp/ 10 | /test_tmp/*wav* 11 | bench.out 12 | coverage*.html 13 | gmon.out 14 | html/ 15 | pahole.txt 16 | profile.txt 17 | rubberband 18 | sbsms 19 | stargate-engine* 20 | stargate-soundstretch 21 | test.wav 22 | test.wav.finished 23 | vgcore* 24 | -------------------------------------------------------------------------------- /src/engine/benchmark/bench_main.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "_main.h" 4 | #include "bench_main.h" 5 | 6 | void BenchMain(){ 7 | int retcode = _main(); 8 | assert(retcode == 0); 9 | } 10 | -------------------------------------------------------------------------------- /src/engine/benchmark/bench_main.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_MAIN_H 2 | #define TEST_MAIN_H 3 | 4 | void BenchMain(); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/engine/benchmark/main.c: -------------------------------------------------------------------------------- 1 | #include "models/bench_mystruct.h" 2 | #include "bench_main.h" 3 | #include "./util.h" 4 | 5 | 6 | int main(){ 7 | BenchMain(); 8 | BenchMyStruct(); 9 | 10 | // Just being called for the coverage, not being used in the template 11 | BenchObjCount(1); 12 | 13 | return 0; 14 | } 15 | -------------------------------------------------------------------------------- /src/engine/clang-mingw64-source-me.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export PATH="/mingw64/bin:${PATH}" 4 | export CC=clang 5 | export CXX=clang++ 6 | export CPP=clang-cpp 7 | export RANLIB=llvm-ranlib 8 | export PREFIX=/usr 9 | 10 | -------------------------------------------------------------------------------- /src/engine/cli/main.c: -------------------------------------------------------------------------------- 1 | #include "compiler.h" 2 | #include "_main.h" 3 | 4 | 5 | #if SG_OS == _OS_WINDOWS 6 | #include 7 | #include 8 | 9 | int main(){ 10 | int argc; 11 | LPWSTR* argv = CommandLineToArgvW(GetCommandLine(), &argc); 12 | return _main(argc, argv); 13 | } 14 | #else 15 | NO_OPTIMIZATION int main(int argc, char** argv){ 16 | return _main(argc, argv); 17 | } 18 | #endif 19 | 20 | -------------------------------------------------------------------------------- /src/engine/cv2pdb/cv2pdb.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/cv2pdb/cv2pdb.exe -------------------------------------------------------------------------------- /src/engine/cv2pdb/dviewhelper.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/cv2pdb/dviewhelper.dll -------------------------------------------------------------------------------- /src/engine/include/_main.h: -------------------------------------------------------------------------------- 1 | #ifndef MAIN_H 2 | #define MAIN_H 3 | 4 | #include "compiler.h" 5 | #include "hardware/config.h" 6 | 7 | 8 | #define CLOCKID CLOCK_REALTIME 9 | #define SIG SIGRTMIN 10 | 11 | int _main(int argc, SGPATHSTR** argv); 12 | void start_socket_thread(); 13 | void start_ui_thread(int pid); 14 | void setup_signal_handling(); 15 | 16 | int v_configure( 17 | char* path, 18 | char* key, 19 | char* value 20 | ); 21 | int daw_render(int argc, SGPATHSTR** argv); 22 | void print_help(); 23 | int main_loop(); 24 | void v_run_main_loop( 25 | int sample_count, 26 | struct SamplePair* output, 27 | SGFLT *a_input_buffers 28 | ); 29 | void set_thread_params(); 30 | void alloc_output_buffers(); 31 | int init_hardware( 32 | struct HardwareConfig* hardware_config 33 | ); 34 | int start_engine(SGPATHSTR* project_dir, int thread_count); 35 | void stop_engine(); 36 | #endif 37 | -------------------------------------------------------------------------------- /src/engine/include/audio/sample_graph.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_AUDIO_SAMPLE_GRAPH_H 2 | #define UTIL_AUDIO_SAMPLE_GRAPH_H 3 | 4 | #include "plugin.h" 5 | 6 | void v_create_sample_graph(t_audio_pool_item * self); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /src/engine/include/audio/util.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_AUDIO_UTIL 2 | #define UTIL_AUDIO_UTIL 3 | 4 | #include "compiler.h" 5 | 6 | /*For time(affecting pitch) time stretching... Since this is done 7 | offline anyways, it's not super optimized... */ 8 | void v_rate_envelope( 9 | SGPATHSTR * a_file_in, 10 | SGPATHSTR * a_file_out, 11 | SGFLT a_start_rate, 12 | SGFLT a_end_rate 13 | ); 14 | 15 | /*For pitch(affecting time) pitch shifting... Since this is done 16 | offline anyways, it's not super optimized... */ 17 | void v_pitch_envelope( 18 | SGPATHSTR * a_file_in, 19 | SGPATHSTR * a_file_out, 20 | SGFLT a_start_pitch, 21 | SGFLT a_end_pitch 22 | ); 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/constants.h: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of the Stargate project, Copyright Stargate Team 3 | 4 | This program is free software; you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation; version 3 of the License. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | */ 13 | 14 | #ifndef CONSTANTS_H 15 | #define CONSTANTS_H 16 | 17 | #define PI 3.141592654f 18 | #define PI2 6.283185307f 19 | #define base_a4 440.0f 20 | #define base_a4_recip (1.0f / 440.0f) 21 | /* 22 | const SGFLT PI = 3.141592654f; 23 | const SGFLT PI2 = 6.283185307f; 24 | const SGFLT base_a4 = 440.0f; 25 | const SGFLT base_a4_recip = 1.0f / 440.0f; 26 | */ 27 | 28 | #endif /* CONSTANTS_H */ 29 | 30 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/lib/clip.h: -------------------------------------------------------------------------------- 1 | #ifndef _STARGATE_CLIP_H 2 | #define _STARGATE_CLIP_H 3 | 4 | #include "compiler.h" 5 | 6 | SGFLT fclip(SGFLT value, SGFLT min, SGFLT max); 7 | SGFLT fclip_min(SGFLT value, SGFLT min); 8 | SGFLT fclip_max(SGFLT value, SGFLT max); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/lib/denormal.h: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of the Stargate project, Copyright Stargate Team 3 | 4 | This program is free software; you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation; version 3 of the License. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | */ 13 | 14 | #ifndef DENORMAL_H 15 | #define DENORMAL_H 16 | 17 | #include "compiler.h" 18 | 19 | SGFLT f_remove_denormal(SGFLT); 20 | 21 | #endif /* DENORMAL_H */ 22 | 23 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/lib/fftw_lock.h: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of the Stargate project, Copyright Stargate Team 3 | 4 | This program is free software; you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation; version 3 of the License. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | */ 13 | 14 | #ifndef FFTW_LOCK_H 15 | #define FFTW_LOCK_H 16 | 17 | #include 18 | #include "compiler.h" 19 | 20 | 21 | extern pthread_mutex_t FFTW_LOCK; 22 | 23 | #endif /* FFTW_LOCK_H */ 24 | 25 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/lib/midi.h: -------------------------------------------------------------------------------- 1 | #ifndef STARGATE_LIB_MIDI_H 2 | #define STARGATE_LIB_MIDI_H 3 | 4 | #define MIDI_ALL_CHANNELS 16 5 | 6 | struct MIDINoteOff { 7 | long sample; 8 | int channel; 9 | }; 10 | 11 | // Check that a MIDI event is in the same channel as the plugin 12 | int midi_event_is_in_channel(int note_channel, int instrument_channel); 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/modules/distortion/poly_glitch.h: -------------------------------------------------------------------------------- 1 | #ifndef POLY_GLITCH_H 2 | #define POLY_GLITCH_H 3 | 4 | #include "compiler.h" 5 | 6 | struct PolyGlitch { 7 | struct SamplePair* buffer; 8 | int buffer_len; // max size of the buffer 9 | int input_pos; // position input has been written to 10 | int pos; // position of the playback cursor 11 | SGFLT last_pitch; 12 | SGFLT sr; 13 | int repeat_pos; // position to reset to zero on 14 | }; 15 | 16 | void poly_glitch_init(struct PolyGlitch* self, SGFLT sr); 17 | void poly_glitch_trigger(struct PolyGlitch* self); 18 | void poly_glitch_set(struct PolyGlitch* self, SGFLT pitch); 19 | struct SamplePair poly_glitch_run( 20 | struct PolyGlitch* self, 21 | struct SamplePair input 22 | ); 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/modules/filter/ladder.h: -------------------------------------------------------------------------------- 1 | #ifndef STARGATE_LADDER_H 2 | #define STARGATE_LADDER_H 3 | 4 | #include "compiler.h" 5 | 6 | #define LADDER_PI 3.14159265358979323846264338327950288 7 | 8 | struct LadderChannel { 9 | double stage[4]; 10 | double delay[4]; 11 | }; 12 | 13 | struct LadderFilter { 14 | SGFLT _c; 15 | SGFLT _r; 16 | 17 | SGFLT cutoff; 18 | SGFLT resonance; 19 | SGFLT sampleRate; 20 | SGFLT sr_recip; 21 | SGFLT max_freq; 22 | 23 | double p; 24 | double k; 25 | double t1; 26 | double t2; 27 | 28 | struct LadderChannel channels[2]; 29 | }; 30 | 31 | void ladder_init(struct LadderFilter* self, SGFLT sampleRate); 32 | SGFLT ladder_run_mono( 33 | struct LadderFilter* self, 34 | SGFLT sample 35 | ); 36 | struct SamplePair ladder_run_stereo( 37 | struct LadderFilter* self, 38 | struct SamplePair sample 39 | ); 40 | void ladder_set(struct LadderFilter* self, SGFLT c, SGFLT r); 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/modules/signal_routing/dry_wet_pan.h: -------------------------------------------------------------------------------- 1 | #ifndef DRY_WET_PAN_H 2 | #define DRY_WET_PAN_H 3 | 4 | #include "compiler.h" 5 | 6 | struct DryWetPan { 7 | SGFLT dry_db; 8 | SGFLT wet_db; 9 | SGFLT pan; 10 | SGFLT dry_left; 11 | SGFLT dry_right; 12 | SGFLT wet_left; 13 | SGFLT wet_right; 14 | struct SamplePair output; 15 | }; 16 | 17 | void dry_wet_pan_set(struct DryWetPan*, SGFLT, SGFLT, SGFLT); 18 | void dry_wet_pan_run(struct DryWetPan*, SGFLT, SGFLT, SGFLT, SGFLT); 19 | void dry_wet_pan_init(struct DryWetPan*); 20 | 21 | #endif /* DRY_WET_PAN_H */ 22 | 23 | -------------------------------------------------------------------------------- /src/engine/include/audiodsp/modules/signal_routing/panner2.h: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of the Stargate project, Copyright Stargate Team 3 | 4 | This program is free software; you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation; version 3 of the License. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | */ 13 | 14 | #ifndef PANNER2_H 15 | #define PANNER2_H 16 | 17 | #include "compiler.h" 18 | 19 | typedef struct { 20 | SGFLT gainL, gainR; 21 | } t_pn2_panner2; 22 | 23 | 24 | void g_pn2_init(t_pn2_panner2* self); 25 | void v_pn2_set(t_pn2_panner2* self, SGFLT a_pan, SGFLT a_law); 26 | // Normalize the volume at center to remain unchanged 27 | void v_pn2_set_normalize(t_pn2_panner2* self, SGFLT a_pan, SGFLT a_law); 28 | 29 | #endif /* PANNER2_H */ 30 | 31 | -------------------------------------------------------------------------------- /src/engine/include/csv/1d.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_CSV_1D_H 2 | #define UTIL_CSV_1D_H 3 | 4 | typedef struct{ 5 | char ** array; 6 | char * buffer; 7 | int x_count; 8 | }t_1d_char_array; 9 | 10 | void g_free_1d_char_array(t_1d_char_array * a_array); 11 | 12 | t_1d_char_array * g_1d_char_array_get( 13 | int a_column_count, 14 | int a_string_size 15 | ); 16 | 17 | t_1d_char_array * c_split_str( 18 | const char * a_input, 19 | char a_delim, 20 | int a_column_count, 21 | int a_string_size 22 | ); 23 | 24 | /* Same as above but ignores extra delimiters in the final column */ 25 | t_1d_char_array * c_split_str_remainder( 26 | const char * a_input, 27 | char a_delim, 28 | int a_column_count, 29 | int a_string_size 30 | ); 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /src/engine/include/csv/2d.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_CSV_2D_H 2 | #define UTIL_CSV_2D_H 3 | 4 | typedef struct 5 | { 6 | char * array; 7 | char * current_str; 8 | int current_index; 9 | int current_row; 10 | int current_column; 11 | int eof; 12 | int eol; 13 | }t_2d_char_array; 14 | 15 | void g_free_2d_char_array(t_2d_char_array * a_array); 16 | /* You must assign something to x->array before trying to read. */ 17 | t_2d_char_array * g_get_2d_array(int a_size); 18 | /* Return a 2d array of strings from a file delimited by 19 | * "|" and "\n" individual fields are 20 | * limited to being the size of SG_TINY_STRING */ 21 | t_2d_char_array * g_get_2d_array_from_file( 22 | const SGPATHSTR* a_file, 23 | int a_size 24 | ); 25 | /* Return the next string from the array*/ 26 | void v_iterate_2d_char_array(t_2d_char_array* a_array); 27 | 28 | /* Return the next string from the array until a newline, ignoring any 29 | * delimiting '|' characters */ 30 | void v_iterate_2d_char_array_to_next_line(t_2d_char_array* a_array); 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /src/engine/include/csv/kvp.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_CSV_KVP_H 2 | #define UTIL_CSV_KVP_H 3 | 4 | /*No pointers internally, call free() directly on an instance*/ 5 | typedef struct 6 | { 7 | int key_len, val_len; 8 | char key[256]; 9 | char value[5000]; 10 | }t_key_value_pair; 11 | 12 | /* Specialized function, split a char* on the first index of a '|' char */ 13 | t_key_value_pair* g_kvp_get(const char * a_input); 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /src/engine/include/csv/split.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_CSV_SPLIT_H 2 | #define UTIL_CSV_SPLIT_H 3 | 4 | typedef struct{ 5 | int count; 6 | char** str_arr; 7 | char* str_block; 8 | }t_line_split; 9 | 10 | t_line_split* g_split_line( 11 | char a_delimiter, 12 | const char * a_str 13 | ); 14 | void v_free_split_line(t_line_split * a_split_line); 15 | 16 | // The new, faster way 17 | const char* str_split(const char*, char*, char); 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /src/engine/include/daw/limits.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_DAW_LIMITS_H 2 | #define UTIL_DAW_LIMITS_H 3 | 4 | #define DN_MAX_ITEM_COUNT 5000 5 | #define DN_TRACK_COUNT 32 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/engine/include/file/path.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_FILE_PATH_H 2 | #define UTIL_FILE_PATH_H 3 | 4 | /* Intended to be similar to Python's os.path.join */ 5 | void path_join( 6 | char * a_result, 7 | int num, 8 | char** a_str_list 9 | ); 10 | 11 | void vpath_join( 12 | char* result, 13 | int count, 14 | ... 15 | ); 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /src/engine/include/globals.h: -------------------------------------------------------------------------------- 1 | #ifndef SG_GLOBALS_H 2 | #define SG_GLOBALS_H 3 | 4 | #include 5 | 6 | typedef struct _t_stargate t_stargate; 7 | extern t_stargate* STARGATE; 8 | // 0 when the application is running, 1 after the shutdown sequence has begun 9 | extern volatile int exiting; 10 | extern volatile int READY; 11 | // Override the hardware config to force a single thread 12 | extern int SINGLE_THREAD; 13 | extern int UI_SEND_USLEEP; 14 | extern pthread_mutex_t CONFIG_LOCK; 15 | extern pthread_mutex_t EXIT_MUTEX; 16 | 17 | // Return 0 if the application is running, 1 if preparing to exit 18 | int is_exiting(); 19 | 20 | // Initiate an orderly shutdown, this causes various thread loops to 21 | // exit so that various threads may finish 22 | void sg_exit(); 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /src/engine/include/hardware/audio.h: -------------------------------------------------------------------------------- 1 | #ifndef HARDWARE_AUDIO_H 2 | #define HARDWARE_AUDIO_H 3 | 4 | #include 5 | 6 | #include "compiler.h" 7 | #include "hardware/config.h" 8 | 9 | #define PA_SAMPLE_TYPE paFloat32 10 | 11 | #define RET_CODE_DEVICE_NOT_FOUND 1000 12 | #define RET_CODE_CONFIG_NOT_FOUND 1001 13 | #define RET_CODE_AUDIO_DEVICE_ERROR 1002 14 | #define RET_CODE_AUDIO_DEVICE_BUSY 1003 15 | 16 | int open_audio_device( 17 | struct HardwareConfig* config, 18 | PaStreamCallback callback 19 | ); 20 | void close_audio_device(); 21 | int portaudioCallback( 22 | const void *inputBuffer, 23 | void *outputBuffer, 24 | unsigned long framesPerBuffer, 25 | const PaStreamCallbackTimeInfo* timeInfo, 26 | PaStreamCallbackFlags statusFlags, 27 | void *userData 28 | ); 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /src/engine/include/log.h: -------------------------------------------------------------------------------- 1 | #ifndef SG_LOG_H 2 | #define SG_LOG_H 3 | 4 | void log_info(const char* format, ...) __attribute__((format(printf, 1, 2))); 5 | void log_warn(const char* format, ...) __attribute__((format(printf, 1, 2))); 6 | void log_error(const char* format, ...) __attribute__((format(printf, 1, 2))); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /src/engine/include/osc.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_OSC_H 2 | #define UTIL_OSC_H 3 | 4 | #define OSC_SEND_QUEUE_SIZE 256 5 | #define OSC_MAX_MESSAGE_SIZE 65536 6 | 7 | struct OscKeyPair { 8 | char key[32]; 9 | char value[OSC_MAX_MESSAGE_SIZE]; 10 | }; 11 | 12 | typedef struct{ 13 | char f_tmp1[OSC_MAX_MESSAGE_SIZE]; 14 | char f_tmp2[OSC_MAX_MESSAGE_SIZE]; 15 | char f_msg[OSC_MAX_MESSAGE_SIZE]; 16 | struct OscKeyPair messages[OSC_SEND_QUEUE_SIZE]; 17 | }t_osc_send_data; 18 | 19 | void* v_osc_send_thread(void* a_arg); 20 | 21 | /* Send an OSC message to the UI. The UI will have a handler that accepts 22 | * key/value pairs as commands. This is safe to use while processing audio 23 | * , as it will not context switch. 24 | * 25 | * a_key: A key that the UI host will recognize 26 | * a_value: The value, or an empty string if not value is required 27 | */ 28 | void v_queue_osc_message( 29 | char* a_key, 30 | char * a_val 31 | ); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/engine/include/project.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_PROJECT_H 2 | #define UTIL_PROJECT_H 3 | 4 | #include "compiler.h" 5 | 6 | void v_open_project(const SGPATHSTR*, int); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /src/engine/include/soundcheck.h: -------------------------------------------------------------------------------- 1 | #ifndef SG_SOUNDCHECK_H 2 | #define SG_SOUNDCHECK_H 3 | 4 | #include "audiodsp/modules/modulation/adsr.h" 5 | #include "audiodsp/modules/oscillator/osc_simple.h" 6 | #include "compiler.h" 7 | 8 | struct SoundCheck { 9 | t_adsr adsr; 10 | t_osc_simple_unison osc; 11 | SGFLT volume; 12 | }; 13 | 14 | extern struct SoundCheck SOUNDCHECK; 15 | 16 | int soundcheck(int arc, SGPATHSTR** argv); 17 | void soundcheck_init(struct SoundCheck*, SGFLT, int); 18 | SGFLT soundcheck_run(struct SoundCheck*); 19 | int soundcheck_callback( 20 | const void *inputBuffer, 21 | void *outputBuffer, 22 | unsigned long framesPerBuffer, 23 | const PaStreamCallbackTimeInfo* timeInfo, 24 | PaStreamCallbackFlags statusFlags, 25 | void *userData 26 | ); 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /src/engine/include/worker.h: -------------------------------------------------------------------------------- 1 | #ifndef UTIL_WORKER_H 2 | #define UTIL_WORKER_H 3 | 4 | #include 5 | 6 | #include "stargate.h" 7 | #include "compiler.h" 8 | #include "hardware/midi.h" 9 | 10 | #ifdef MACOS 11 | #include 12 | #include 13 | #endif 14 | 15 | 16 | void* v_worker_thread(void*); 17 | void v_init_worker_threads(int, int); 18 | 19 | int getNumberOfCores(); 20 | void v_activate( 21 | int a_thread_count, 22 | SGPATHSTR* a_project_path, 23 | SGFLT a_sr, 24 | t_midi_device_list* a_midi_devices, 25 | int a_aux_threads 26 | ); 27 | void v_destructor(); 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /src/engine/libcds/.gitignore: -------------------------------------------------------------------------------- 1 | *.gcda 2 | *.gcno 3 | *.rpm 4 | *.swp 5 | coverage*.html 6 | gmon.out 7 | libcds.benchmark 8 | libcds.debug 9 | libcds.gprof 10 | libcds.pahole 11 | libcds.perf 12 | libcds.so 13 | libcds.tests 14 | pahole.txt 15 | profile.txt 16 | vgcore.* 17 | TODO 18 | -------------------------------------------------------------------------------- /src/engine/libcds/benchmark/bench_hashtable.h: -------------------------------------------------------------------------------- 1 | #ifndef BENCH_HASHTABLE_H 2 | #define BENCH_HASHTABLE_H 3 | 4 | #include 5 | 6 | 7 | void BenchHashTable(); 8 | size_t BenchHashTableSetGetDelete(); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /src/engine/libcds/benchmark/bench_list.h: -------------------------------------------------------------------------------- 1 | #ifndef BENCH_LIST_H 2 | #define BENCH_LIST_H 3 | 4 | #include 5 | 6 | 7 | void BenchList(); 8 | void BenchListAppendPop(); 9 | void BenchListMergeSortBinarySearch(); 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /src/engine/libcds/benchmark/bench_queue.h: -------------------------------------------------------------------------------- 1 | #ifndef BENCH_QUEUE_H 2 | #define BENCH_QUEUE_H 3 | 4 | #include 5 | 6 | 7 | void BenchQueue(); 8 | size_t BenchQueueAppendPop(); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /src/engine/libcds/benchmark/main.c: -------------------------------------------------------------------------------- 1 | #include "./bench_hashtable.h" 2 | #include "./bench_list.h" 3 | #include "./bench_queue.h" 4 | 5 | 6 | int main(){ 7 | BenchHashTable(); 8 | BenchQueue(); 9 | BenchList(); 10 | 11 | return 0; 12 | } 13 | -------------------------------------------------------------------------------- /src/engine/libcds/include/cds/comparator.h: -------------------------------------------------------------------------------- 1 | #ifndef CDS_COMPARATOR_H 2 | #define CDS_COMPARATOR_H 3 | 4 | /* Less-Than, Greater-Than, Equal-To comparator function 5 | * 6 | * A function that accepts a pointer to 2 different instances of 7 | * the type associated with this data structure, and returns: 8 | * * -1 if the first is less than the 2nd 9 | * * 0 if the first is equal to the 2nd 10 | * * 1 if the first is greater than the 2nd 11 | * */ 12 | typedef int (*CDSComparatorLTGTET)(void*, void*); 13 | 14 | /* Comparator function to determine if 2 objects (potentially of different 15 | * types) match. 16 | * Arg 1: A pointer to the object being stored in the data structure 17 | * Arg 2: A pointer to the arbitrary object passed from the calling code 18 | * to the data structure method's "match" argument 19 | * @return: 1 if the objects match, 0 if not 20 | */ 21 | typedef int (*CDSComparatorMatch)(void*, void*); 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /src/engine/libcds/include/cds/hashtable/hash.h: -------------------------------------------------------------------------------- 1 | #ifndef CDS_HASHTABLE_HASH_H 2 | #define CDS_HASHTABLE_HASH_H 3 | 4 | #include 5 | 6 | 7 | /* Simple non-cryptographic-grade hash 8 | * 9 | */ 10 | typedef uint64_t CDSHash; 11 | 12 | /* Simple non-cryptographic-grade hash function 13 | * NOTE: If the memory pointed to by @data contains pointers, this 14 | * will not provide an identical pointer every time if the program 15 | * is restarted. 16 | * NOTE: For integer types, you can simply cast to CDSHash rather than 17 | * hashing as char* 18 | * 19 | * @data: A pointer to the object to be hashed 20 | * @size: The sizeof() the object being pointed to by @data 21 | */ 22 | CDSHash CDSHashNew( 23 | char *data, 24 | size_t size 25 | ); 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /src/engine/libcds/include/cds/types.h: -------------------------------------------------------------------------------- 1 | #ifndef CDS_TYPES_H 2 | #define CDS_TYPES_H 3 | 4 | /* Forward declarations of structs 5 | * 6 | * Allows each file to return other types of structs for a given method 7 | */ 8 | 9 | // byte string 10 | 11 | struct CDSByteStr; 12 | struct CDSByteStrSplit; 13 | 14 | // doubly-linked list 15 | 16 | struct CDSDLList; 17 | struct CDSDLListNode; 18 | 19 | // hashtable 20 | struct CDSHashTable; 21 | 22 | // list 23 | struct CDSList; 24 | 25 | // objectstore 26 | struct CDSObjectStore; 27 | 28 | // queue 29 | struct CDSQueue; 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /src/engine/libcds/libcds.spec: -------------------------------------------------------------------------------- 1 | Summary: libcds == C Data Structure Library 2 | Name: %{name} 3 | Version: %{version} 4 | Release: %{release} 5 | Source0: %{name}-%{version}.tar.gz 6 | License: TODO 7 | Group: Development/Libraries 8 | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot 9 | Prefix: %{_prefix} 10 | Vendor: TODO 11 | Url: https://gitlab.com/jaelen/c-template 12 | 13 | %description 14 | Filling that strange void in the C standard library 15 | 16 | %prep 17 | cd %{_builddir}/%{name}-%{version} 18 | 19 | %build 20 | cd %{_builddir}/%{name}-%{version} 21 | make 22 | 23 | %install 24 | cd %{_builddir}/%{name}-%{version} 25 | DESTDIR=$RPM_BUILD_ROOT make install 26 | 27 | %clean 28 | cd %{_builddir}/%{name}-%{version} 29 | make clean 30 | 31 | %files 32 | %defattr(-,root,root) 33 | %attr(755, root, root) %{_usr}/lib/%{name}.so 34 | -------------------------------------------------------------------------------- /src/engine/libcds/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "release": "1" 4 | } 5 | -------------------------------------------------------------------------------- /src/engine/libcds/src/hashtable/entry.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "cds/hashtable/entry.h" 4 | 5 | void CDSHashTableEntryFree( 6 | struct CDSHashTableEntry* self, 7 | void (*valueFree)(void*) 8 | ){ 9 | if(valueFree){ 10 | valueFree(self->value); 11 | } 12 | free(self->key); 13 | } 14 | -------------------------------------------------------------------------------- /src/engine/libcds/src/hashtable/hash.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "cds/hashtable/hash.h" 5 | 6 | 7 | CDSHash CDSHashNew( 8 | char * data, 9 | size_t size 10 | ){ 11 | size_t i; 12 | 13 | CDSHash result = 19; 14 | 15 | for(i = 0; i < size; ++i){ 16 | result = 31 * result + data[i]; 17 | } 18 | 19 | return result; 20 | } 21 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/hashtable/test_hash.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "cds/hashtable/hash.h" 6 | #include "test_hash.h" 7 | 8 | 9 | void TestCDSHash(){ 10 | TestCDSHashUnique(); 11 | } 12 | 13 | /* Test that the hashing algorithm produces unique data over 14 | * a small sample size 15 | */ 16 | void TestCDSHashUnique(){ 17 | char buffer[64]; 18 | size_t iterations = 100; 19 | size_t i, j; 20 | CDSHash hashes[iterations]; 21 | for(i = 0; i < iterations; ++i){ 22 | snprintf( 23 | buffer, 24 | 64, 25 | "%lu", 26 | i 27 | ); 28 | hashes[i] = CDSHashNew( 29 | buffer, 30 | strlen(buffer) 31 | ); 32 | // DOing this the O(n^2) way to avoid creating a dependency 33 | // on another data structure in this library working correctly 34 | for(j = 0; j < i; ++j){ 35 | assert(hashes[j] != hashes[i]); 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/hashtable/test_hash.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_HASHTABLE_HASH_H 2 | #define TEST_HASHTABLE_HASH_H 3 | 4 | void TestCDSHash(); 5 | void TestCDSHashUnique(); 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/main.c: -------------------------------------------------------------------------------- 1 | #include "hashtable/test_hash.h" 2 | #include "test_bytestr.h" 3 | #include "test_dl-list.h" 4 | #include "test_fast-sll.h" 5 | #include "test_hashtable.h" 6 | #include "test_list.h" 7 | #include "test_objectstore.h" 8 | #include "test_queue.h" 9 | 10 | 11 | int main(){ 12 | TestCDSByteStr(); 13 | TestCDSDLList(); 14 | TestCDSFastSLL(); 15 | TestCDSHash(); 16 | TestCDSHashTable(); 17 | TestCDSList(); 18 | TestCDSObjectStore(); 19 | TestCDSQueue(); 20 | 21 | return 0; 22 | } 23 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_bytestr.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_BYTESTR_H 2 | #define TEST_BYTESTR_H 3 | 4 | void TestCDSByteStr(); 5 | void TestCDSByteStrNew(); 6 | void TestCDSByteStrSlice(); 7 | void TestCDSByteStrJoin(); 8 | void TestCDSByteStrJoinEmpty(); 9 | void TestCDSByteStrSearch(); 10 | void TestCDSByteStrStartsWith(); 11 | void TestCDSByteStrEndsWith(); 12 | void TestCDSByteStrStrip(); 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_dl-list.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_DL_LIST_H 2 | #define TEST_DL_LIST_H 3 | 4 | 5 | void TestCDSDLList(); 6 | void TestCDSDLListInsertAfter(); 7 | void TestCDSDLListInsertBefore(); 8 | void TestCDSDLListRemove(); 9 | void TestCDSDLListSwap(); 10 | void TestCDSDLListObjSizeZero(); 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_fast-sll.h: -------------------------------------------------------------------------------- 1 | 2 | void TestCDSFastSLL(); 3 | void TestCDSFastSLLAllocFree(); 4 | void TestCDSFastSLLZeroCommonSize(); 5 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_hashtable.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_HASHTABLE_H 2 | #define TEST_HASHTABLE_H 3 | 4 | void TestCDSHashTable(); 5 | void TestCDSHashTableNewGetSetDelete(); 6 | void TestCDSHashTableResize(); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_list.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_LIST_H 2 | #define TEST_LIST_H 3 | 4 | struct dummyStruct { 5 | char field1[10]; 6 | int field2; 7 | double field3; 8 | }; 9 | 10 | void TestCDSList(); 11 | void TestCDSListNewAppendFree(); 12 | void TestCDSListAppendResize(); 13 | void TestCDSListIndex(); 14 | void TestCDSListPop(); 15 | void TestCDSListRemove(); 16 | void TestCDSListInsert(); 17 | void TestCDSListSlice(); 18 | void TestCDSListIndexNegative(); 19 | void TestCDSListExtend(); 20 | void TestCDSListInsertionSort(); 21 | void TestCDSListMergeSort(); 22 | void TestCDSListSearch(); 23 | void TestCDSListBinarySearch(); 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_objectstore.h: -------------------------------------------------------------------------------- 1 | void TestCDSObjectStore(); 2 | void TestCDSObjectStoreNewGetDelete(); 3 | void TestCDSObjectStoreResize(); 4 | void TestCDSObjectStoreValues(); 5 | -------------------------------------------------------------------------------- /src/engine/libcds/tests/test_queue.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_QUEUE 2 | #define TEST_QUEUE 3 | 4 | 5 | void TestCDSQueue(); 6 | void TestCDSQueueNewAppendPopPurgeFree(); 7 | void TestCDSQueueFreeFunc(); 8 | void TestCDSQueuePopAlloc(); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /src/engine/mingw64-source-me.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export PATH="${PATH}:/mingw64/bin" 4 | PREFIX=x86_64-w64-mingw32 5 | export CC=$PREFIX-gcc 6 | export CXX=$PREFIX-g++ 7 | export CPP=$PREFIX-cpp 8 | export RANLIB=$PREFIX-ranlib 9 | export PREFIX=/usr 10 | 11 | -------------------------------------------------------------------------------- /src/engine/src/audiodsp/lib/clip.c: -------------------------------------------------------------------------------- 1 | #include "audiodsp/lib/clip.h" 2 | 3 | SGFLT fclip(SGFLT value, SGFLT min, SGFLT max){ 4 | if(value > max){ 5 | return max; 6 | } else if(value < min){ 7 | return min; 8 | } 9 | return value; 10 | } 11 | 12 | SGFLT fclip_min(SGFLT value, SGFLT min){ 13 | if(value < min){ 14 | return min; 15 | } 16 | return value; 17 | } 18 | 19 | SGFLT fclip_max(SGFLT value, SGFLT max){ 20 | if(value > max){ 21 | return max; 22 | } 23 | return value; 24 | } 25 | -------------------------------------------------------------------------------- /src/engine/src/audiodsp/lib/denormal.c: -------------------------------------------------------------------------------- 1 | #include "audiodsp/lib/denormal.h" 2 | 3 | 4 | /* SGFLT f_remove_denormal(SGFLT a_input) 5 | * 6 | * Prevent recursive modules like filters and feedback delays from 7 | * consuming too much CPU 8 | */ 9 | SGFLT f_remove_denormal(SGFLT a_input) 10 | { 11 | if((a_input > 1.0e-15) || (a_input < -1.0e-15)){ 12 | return a_input; 13 | } else { 14 | return 0.0f; 15 | } 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /src/engine/src/audiodsp/lib/fftw_lock.c: -------------------------------------------------------------------------------- 1 | #include "audiodsp/lib/fftw_lock.h" 2 | 3 | pthread_mutex_t FFTW_LOCK; 4 | 5 | -------------------------------------------------------------------------------- /src/engine/src/audiodsp/lib/midi.c: -------------------------------------------------------------------------------- 1 | #include "audiodsp/lib/midi.h" 2 | 3 | int midi_event_is_in_channel(int note_channel, int instrument_channel){ 4 | if( 5 | note_channel == instrument_channel 6 | || 7 | note_channel == 16 // all channels 8 | || 9 | instrument_channel == 16 // all channels 10 | ){ 11 | return 1; 12 | } 13 | return 0; 14 | } 15 | -------------------------------------------------------------------------------- /src/engine/src/globals.c: -------------------------------------------------------------------------------- 1 | #include "globals.h" 2 | 3 | volatile int exiting = 0; 4 | volatile int READY = 0; 5 | int SINGLE_THREAD = 0; 6 | int UI_SEND_USLEEP = 30000; 7 | pthread_mutex_t CONFIG_LOCK; 8 | pthread_mutex_t EXIT_MUTEX; 9 | 10 | int is_exiting(){ 11 | int _exiting; 12 | pthread_mutex_lock(&EXIT_MUTEX); 13 | _exiting = exiting; 14 | pthread_mutex_unlock(&EXIT_MUTEX); 15 | return _exiting; 16 | } 17 | 18 | void sg_exit(){ 19 | pthread_mutex_lock(&EXIT_MUTEX); 20 | exiting = 1; 21 | pthread_mutex_unlock(&EXIT_MUTEX); 22 | } 23 | -------------------------------------------------------------------------------- /src/engine/test_fixtures/1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/test_fixtures/1.wav -------------------------------------------------------------------------------- /src/engine/test_fixtures/2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/test_fixtures/2.wav -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/audio/audio_pool: -------------------------------------------------------------------------------- 1 | 0|0.0|/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/stargate/kicks/kick-1-A.wav 2 | 1|0.0|/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/stargate/kicks/kick-1-C.wav 3 | f|1|93|64|64|9|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0 4 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/audio/samples/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/stargate/kicks/kick-1-A.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/test_fixtures/projects/daw_e2e/audio/samples/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/stargate/kicks/kick-1-A.wav -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/audio/samples/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/stargate/kicks/kick-1-C.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/test_fixtures/projects/daw_e2e/audio/samples/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/stargate/kicks/kick-1-C.wav -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/audio/stretch.txt: -------------------------------------------------------------------------------- 1 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/audio/stretch_map.txt: -------------------------------------------------------------------------------- 1 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/backups/2021-12-16_19-50-52.tar.bz2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/test_fixtures/projects/daw_e2e/backups/2021-12-16_19-50-52.tar.bz2 -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/items.txt: -------------------------------------------------------------------------------- 1 | 0|track1-1 2 | 1|track4-1 3 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/items/0: -------------------------------------------------------------------------------- 1 | U|0 2 | M|3 3 | n|0.0|0.25|45|100 4 | c|0.0|1|63.0 5 | p|0.0|0.052478 6 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/items/1: -------------------------------------------------------------------------------- 1 | U|1 2 | M|0 3 | a|0|1|0.0|1000.0|0|0.0|3|0.0|0|0.0|1.0|0.0|999.0|1|0.0|1.0|0|5|-18|-18|0|-1|0.0|-1|0.0|0|0|0 4 | f|0|64|64|64|14|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0|64|64|64|0 5 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "playlist": [ 3 | { 4 | "seq_uid": 0 5 | } 6 | ], 7 | "pool": [ 8 | { 9 | "name": "default", 10 | "seq_uid": 0 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/routing.txt: -------------------------------------------------------------------------------- 1 | c|4 2 | t|1|0 3 | t|2|1 4 | t|3|2 5 | t|4|3 6 | s|1|0|0|0 7 | s|2|0|0|0 8 | s|3|0|0|0 9 | s|4|0|0|0 10 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/songs/0: -------------------------------------------------------------------------------- 1 | N|default 2 | M|1 3 | E|2|0|128.0|4|4 4 | C|1|1 5 | 1|0.0|4.0|0|0.0 6 | C|2|1 7 | 2|0.0|4.0|0|0.0 8 | C|3|1 9 | 3|0.0|4.0|0|0.0 10 | C|4|1 11 | 4|0.0|4.0|1|0.0 12 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks.txt: -------------------------------------------------------------------------------- 1 | 0|0|0|0|Main 2 | 1|0|0|1|track1 3 | 2|0|0|2|track2 4 | 3|0|0|3|track3 5 | 4|0|0|4|track4 6 | 5|0|0|5|track5 7 | 6|0|0|6|track6 8 | 7|0|0|7|track7 9 | 8|0|0|8|track8 10 | 9|0|0|9|track9 11 | 10|0|0|10|track10 12 | 11|0|0|11|track11 13 | 12|0|0|12|track12 14 | 13|0|0|13|track13 15 | 14|0|0|14|track14 16 | 15|0|0|15|track15 17 | 16|0|0|16|track16 18 | 17|0|0|17|track17 19 | 18|0|0|18|track18 20 | 19|0|0|19|track19 21 | 20|0|0|20|track20 22 | 21|0|0|21|track21 23 | 22|0|0|22|track22 24 | 23|0|0|23|track23 25 | 24|0|0|24|track24 26 | 25|0|0|25|track25 27 | 26|0|0|26|track26 28 | 27|0|0|27|track27 29 | 28|0|0|28|track28 30 | 29|0|0|29|track29 31 | 30|0|0|30|track30 32 | 31|0|0|31|track31 33 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/0: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|6|15|0|0|1 4 | p|3|15|0|0|0|1 5 | p|4|13|1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/1: -------------------------------------------------------------------------------- 1 | p|0|2|2|0|0|1 2 | p|1|4|3|0|0|1 3 | p|2|4|4|0|0|1 4 | p|3|5|5|0|0|1 5 | p|4|8|6|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|7|12|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/10: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/11: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/12: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/13: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/14: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/15: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/16: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/17: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/18: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/19: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/2: -------------------------------------------------------------------------------- 1 | p|0|3|7|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|11|13|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/20: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/21: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/22: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/23: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/24: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/25: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/26: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/27: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/28: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/29: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/3: -------------------------------------------------------------------------------- 1 | p|0|1|8|0|0|1 2 | p|1|9|9|0|0|1 3 | p|2|10|10|0|0|1 4 | p|3|12|11|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|16|14|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/30: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/31: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/4: -------------------------------------------------------------------------------- 1 | p|0|17|16|0|0|1 2 | p|1|17|17|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/5: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/6: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/7: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/8: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/daw/tracks/9: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugin_uid.txt: -------------------------------------------------------------------------------- 1 | 17 -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/0: -------------------------------------------------------------------------------- 1 | 0|-111 2 | 1|-13 3 | 2|500 4 | 3|0 5 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/1: -------------------------------------------------------------------------------- 1 | 0|-237 2 | 1|20 3 | 2|0 4 | 3|50 5 | 4|100 6 | 5|0 7 | 6|0 8 | 7|2 9 | 8|0 10 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/10: -------------------------------------------------------------------------------- 1 | 0|-24 2 | 1|20 3 | 2|20 4 | 3|50 5 | 4|100 6 | 5|0 7 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/11: -------------------------------------------------------------------------------- 1 | 0|-100 2 | 1|-300 3 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/12: -------------------------------------------------------------------------------- 1 | 0|0 2 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/13: -------------------------------------------------------------------------------- 1 | 0|0 2 | 1|0 3 | 2|0 4 | 3|-300 5 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/14: -------------------------------------------------------------------------------- 1 | 0|0 2 | 1|0 3 | 2|0 4 | 3|-300 5 | 4|0 6 | 5|0 7 | 6|1 8 | 7|250 9 | 8|0 10 | 9|0 11 | 10|1 12 | 11|0 13 | 12|0 14 | 13|0 15 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/15: -------------------------------------------------------------------------------- 1 | 4|24 2 | 5|300 3 | 6|-19 4 | 7|42 5 | 8|300 6 | 9|14 7 | 10|61 8 | 11|300 9 | 12|-23 10 | 13|79 11 | 14|300 12 | 15|13 13 | 16|96 14 | 17|300 15 | 18|-19 16 | 19|114 17 | 20|300 18 | 21|23 19 | 22|0 20 | 23|64 21 | 24|36 22 | 25|64 23 | 26|20 24 | 27|64 25 | 28|64 26 | 29|64 27 | 30|0 28 | 31|64 29 | 32|64 30 | 33|64 31 | 34|0 32 | 35|64 33 | 36|64 34 | 37|64 35 | 38|0 36 | 39|64 37 | 40|64 38 | 41|64 39 | 42|0 40 | 43|64 41 | 44|64 42 | 45|64 43 | 46|0 44 | 47|64 45 | 48|64 46 | 49|16 47 | 50|22 48 | 51|111 49 | 52|64 50 | 53|30 51 | 54|21 52 | 55|64 53 | 56|64 54 | 57|64 55 | 58|0 56 | 59|64 57 | 60|64 58 | 61|64 59 | 62|0 60 | 63|64 61 | 64|64 62 | 65|64 63 | 66|0 64 | 67|64 65 | 68|64 66 | 69|64 67 | 70|0 68 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/2: -------------------------------------------------------------------------------- 1 | 2|10 2 | 3|50 3 | 4|0 4 | 5|50 5 | 6|124 6 | 7|-120 7 | 8|15 8 | 9|10 9 | 10|50 10 | 11|100 11 | 12|50 12 | 13|-30 13 | 14|0 14 | 15|0 15 | 16|1 16 | 17|0 17 | 18|0 18 | 19|-6 19 | 20|0 20 | 21|0 21 | 22|0 22 | 23|-6 23 | 24|-6 24 | 25|1 25 | 26|50 26 | 27|0 27 | 28|18 28 | 29|100 29 | 30|0 30 | 31|200 31 | 32|1 32 | 33|1 33 | 34|3 34 | 35|3 35 | 36|0 36 | 37|50 37 | 38|0 38 | 39|0 39 | 40|0 40 | 41|9 41 | 42|0 42 | 43|0 43 | 44|120 44 | 45|0 45 | 46|1 46 | 47|50 47 | 48|0 48 | 49|0 49 | 50|0 50 | 51|0 51 | 52|0 52 | 53|0 53 | 54|1 54 | 55|1 55 | 56|0 56 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/3: -------------------------------------------------------------------------------- 1 | 4|64 2 | 5|64 3 | 6|64 4 | 7|15 5 | 8|64 6 | 9|64 7 | 10|64 8 | 11|25 9 | 12|64 10 | 13|64 11 | 14|64 12 | 15|28 13 | 16|64 14 | 17|64 15 | 18|64 16 | 19|32 17 | 20|64 18 | 21|64 19 | 22|64 20 | 23|30 21 | 24|33 22 | 25|64 23 | 26|64 24 | 27|29 25 | 28|64 26 | 29|64 27 | 30|64 28 | 31|17 29 | 32|64 30 | 33|64 31 | 34|64 32 | 35|19 33 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/4: -------------------------------------------------------------------------------- 1 | 4|64 2 | 5|64 3 | 6|64 4 | 7|18 5 | 8|64 6 | 9|64 7 | 10|64 8 | 11|14 9 | 12|64 10 | 13|64 11 | 14|64 12 | 15|35 13 | 16|64 14 | 17|64 15 | 18|64 16 | 19|16 17 | 20|64 18 | 21|64 19 | 22|64 20 | 23|11 21 | 24|64 22 | 25|64 23 | 26|64 24 | 27|34 25 | 28|64 26 | 29|64 27 | 30|64 28 | 31|27 29 | 32|64 30 | 33|64 31 | 34|64 32 | 35|33 33 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/5: -------------------------------------------------------------------------------- 1 | 0|50 2 | 1|-120 3 | 2|0 4 | 3|-120 5 | 4|0 6 | 5|90 7 | 6|100 8 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/6: -------------------------------------------------------------------------------- 1 | 0|50 2 | 1|-120 3 | 2|90 4 | 3|0 5 | 4|10 6 | 5|50 7 | 6|0 8 | 7|0 9 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/plugins/9: -------------------------------------------------------------------------------- 1 | 4|120 2 | 5|0 3 | 6|0 4 | 7|60 5 | 8|0 6 | 9|71 7 | 10|10 8 | 11|0 9 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/daw_e2e/projects/wave_edit/tracks/0: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/audio/audio_pool: -------------------------------------------------------------------------------- 1 | 0|0.0|/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/karoryfer/kicks/kick_marching_20_old.wav 2 | 1|0.0|/home/fd/src/github.com/stargateaudio/stargate-sample-pack/stargate-sample-pack/karoryfer/kicks/kick_Szpaderski_24_open.wav 3 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/audio/stretch.txt: -------------------------------------------------------------------------------- 1 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/audio/stretch_map.txt: -------------------------------------------------------------------------------- 1 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/items.txt: -------------------------------------------------------------------------------- 1 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "playlist": [ 3 | { 4 | "seq_uid": 0 5 | } 6 | ], 7 | "pool": [ 8 | { 9 | "name": "default", 10 | "seq_uid": 0 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/songs/0: -------------------------------------------------------------------------------- 1 | N|default 2 | M|1 3 | E|2|0|128.0|4|4 4 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks.txt: -------------------------------------------------------------------------------- 1 | 0|0|0|0|Main 2 | 1|0|0|1|track1 3 | 2|0|0|2|track2 4 | 3|0|0|3|track3 5 | 4|0|0|4|track4 6 | 5|0|0|5|track5 7 | 6|0|0|6|track6 8 | 7|0|0|7|track7 9 | 8|0|0|8|track8 10 | 9|0|0|9|track9 11 | 10|0|0|10|track10 12 | 11|0|0|11|track11 13 | 12|0|0|12|track12 14 | 13|0|0|13|track13 15 | 14|0|0|14|track14 16 | 15|0|0|15|track15 17 | 16|0|0|16|track16 18 | 17|0|0|17|track17 19 | 18|0|0|18|track18 20 | 19|0|0|19|track19 21 | 20|0|0|20|track20 22 | 21|0|0|21|track21 23 | 22|0|0|22|track22 24 | 23|0|0|23|track23 25 | 24|0|0|24|track24 26 | 25|0|0|25|track25 27 | 26|0|0|26|track26 28 | 27|0|0|27|track27 29 | 28|0|0|28|track28 30 | 29|0|0|29|track29 31 | 30|0|0|30|track30 32 | 31|0|0|31|track31 33 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/0: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/1: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/10: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/11: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/12: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/13: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/14: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/15: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/16: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/17: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/18: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/19: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/2: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/20: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/21: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/22: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/23: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/24: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/25: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/26: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/27: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/28: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/29: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/3: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/30: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/31: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/4: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/5: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/6: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/7: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/8: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/daw/tracks/9: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | p|10|0|-1|0|0|1 12 | p|11|0|-1|0|0|1 13 | p|12|0|-1|0|0|1 14 | p|13|0|-1|0|0|1 15 | p|14|0|-1|0|0|1 16 | p|15|0|-1|0|0|1 17 | p|16|0|-1|0|0|1 18 | p|17|0|-1|0|0|1 19 | p|18|0|-1|0|0|1 20 | p|19|0|-1|0|0|1 21 | p|20|0|-1|0|0|1 22 | p|21|0|-1|0|0|1 23 | p|22|0|-1|0|0|1 24 | p|23|0|-1|0|0|1 25 | p|24|0|-1|0|0|1 26 | p|25|0|-1|0|0|1 27 | \ -------------------------------------------------------------------------------- /src/engine/test_fixtures/projects/wave_edit_e2e/projects/wave_edit/tracks/0: -------------------------------------------------------------------------------- 1 | p|0|0|-1|0|0|1 2 | p|1|0|-1|0|0|1 3 | p|2|0|-1|0|0|1 4 | p|3|0|-1|0|0|1 5 | p|4|0|-1|0|0|1 6 | p|5|0|-1|0|0|1 7 | p|6|0|-1|0|0|1 8 | p|7|0|-1|0|0|1 9 | p|8|0|-1|0|0|1 10 | p|9|0|-1|0|0|1 11 | \ -------------------------------------------------------------------------------- /src/engine/test_tmp/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/engine/test_tmp/.gitkeep -------------------------------------------------------------------------------- /src/engine/tests/audiodsp/lib/test_amp.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "test_amp.h" 4 | #include "audiodsp/lib/amp.h" 5 | #include "compiler.h" 6 | #include "testlib/math.h" 7 | 8 | 9 | static void TestDbToLinear(){ 10 | struct TestCase{ 11 | SGFLT arg; 12 | SGFLT expected; 13 | }; 14 | struct TestCase TestCases[3] = { 15 | {0., 1.}, 16 | {-6., 0.5}, 17 | {6., 2.}, 18 | }; 19 | int i; 20 | SGFLT result; 21 | struct TestCase* test_case; 22 | for(i = 0; i < 3; ++i){ 23 | test_case = &TestCases[i]; 24 | result = f_db_to_linear(test_case->arg); 25 | test_deviance( 26 | result, 27 | test_case->expected, 28 | 1. 29 | ); 30 | // and backwards 31 | result = f_linear_to_db(test_case->expected); 32 | test_deviance( 33 | result, 34 | test_case->arg, 35 | 1. 36 | ); 37 | } 38 | } 39 | 40 | void TestAmpAll(){ 41 | TestDbToLinear(); 42 | } 43 | -------------------------------------------------------------------------------- /src/engine/tests/audiodsp/lib/test_amp.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_AMP_H 2 | #define TEST_AMP_H 3 | 4 | void TestAmpAll(); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/engine/tests/audiodsp/lib/test_denormal.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "audiodsp/lib/denormal.h" 4 | #include "compiler.h" 5 | #include "test_denormal.h" 6 | 7 | 8 | void TestDenormalAll(){ 9 | SGFLT flt; 10 | flt = f_remove_denormal(1e-16); 11 | assert(flt == (SGFLT)0.); 12 | 13 | flt = f_remove_denormal(1e-14); 14 | assert(flt == (SGFLT)1e-14); 15 | 16 | flt = f_remove_denormal(-1e-14); 17 | assert(flt == (SGFLT)-1e-14); 18 | } 19 | -------------------------------------------------------------------------------- /src/engine/tests/audiodsp/lib/test_denormal.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_DENORMAL_H 2 | #define TEST_DENORMAL_H 3 | 4 | void TestDenormalAll(); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/engine/tests/audiodsp/lib/test_resampler_linear.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_RESAMPLER_LINEAR_H 2 | #define TEST_RESAMPLER_LINEAR_H 3 | 4 | void TestResamplerLinear(); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/engine/tests/audiodsp/modules/modulation/test_adsr.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_ADSR_H 2 | #define TEST_ADSR_H 3 | 4 | void TestADSRAll(); 5 | 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/engine/tests/csv/test_split.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "csv/split.h" 6 | #include "test_split.h" 7 | 8 | void TestSplitStr(){ 9 | char buf[1024]; 10 | const char str[128] = "123|345|432"; 11 | const char* _str = str; 12 | _str = str_split(_str, buf, '|'); 13 | int one = atoi(buf); 14 | assert(one == 123); 15 | _str = str_split(_str, buf, '|'); 16 | int two = atoi(buf); 17 | assert(two == 345); 18 | _str = str_split(_str, buf, '|'); 19 | int three = atoi(buf); 20 | assert(three == 432); 21 | assert(_str == NULL); 22 | } 23 | -------------------------------------------------------------------------------- /src/engine/tests/csv/test_split.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_CSV_SPLIT_H 2 | #define TEST_CSV_SPLIT_H 3 | 4 | void TestSplitStr(); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/engine/tests/file/test_path.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "compiler.h" 4 | #include "file/path.h" 5 | #include "test_main.h" 6 | 7 | 8 | void TestVPath(){ 9 | char result[1024]; 10 | char expected[] = "/var/lol/something/blah"; 11 | vpath_join(result, 3, "/var/lol", "something", "blah"); 12 | sg_assert( 13 | !strcmp(result, expected), 14 | "Expected: %s, got: %s", 15 | expected, 16 | result 17 | ); 18 | } 19 | 20 | void TestFilePath(){ 21 | TestVPath(); 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/engine/tests/main.c: -------------------------------------------------------------------------------- 1 | #include "test_main.h" 2 | 3 | 4 | int main(){ 5 | TestAudioDSP(); 6 | TestCSV(); 7 | TestDAW(); 8 | TestFilePath(); 9 | TestFilesAll(); 10 | TestPlugins(); 11 | TestWaveEdit(); 12 | 13 | return 0; 14 | } 15 | -------------------------------------------------------------------------------- /src/engine/tests/plugins/test_va1.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "test_va1.h" 4 | #include "plugin.h" 5 | #include "plugins/va1.h" 6 | 7 | t_audio_pool_item * mock_host_audio_pool_func(int val){ 8 | return NULL; 9 | } 10 | void mock_queue_message(char* a, char* b){} 11 | 12 | void TestVA1e2e(){ 13 | PluginDescriptor* descriptor = va1_plugin_descriptor(); 14 | t_va1* plugin_data = (t_va1*)g_va1_instantiate( 15 | descriptor, 16 | 44100, 17 | mock_host_audio_pool_func, 18 | 0, 19 | mock_queue_message 20 | ); 21 | assert(plugin_data); 22 | } 23 | -------------------------------------------------------------------------------- /src/engine/tests/plugins/test_va1.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_VA1_H 2 | #define TEST_VA1_H 3 | 4 | void TestVA1e2e(); 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /src/engine/tests/test_audiodsp.c: -------------------------------------------------------------------------------- 1 | #include "test_main.h" 2 | 3 | #include "audiodsp/lib/test_amp.h" 4 | #include "audiodsp/lib/test_denormal.h" 5 | #include "audiodsp/lib/test_resampler_linear.h" 6 | #include "audiodsp/modules/modulation/test_adsr.h" 7 | 8 | void TestAudioDSP(){ 9 | TestDenormalAll(); 10 | TestAmpAll(); 11 | TestADSRAll(); 12 | TestResamplerLinear(); 13 | } 14 | -------------------------------------------------------------------------------- /src/engine/tests/test_csv.c: -------------------------------------------------------------------------------- 1 | #include "csv/test_split.h" 2 | 3 | void TestCSV(){ 4 | TestSplitStr(); 5 | } 6 | -------------------------------------------------------------------------------- /src/engine/tests/test_daw.c: -------------------------------------------------------------------------------- 1 | #include "daw.h" 2 | #include "globals.h" 3 | #include "worker.h" 4 | 5 | 6 | void TestDAWE2E(){ 7 | INSTALL_PREFIX = ".."; 8 | int buffer_size = 128; 9 | int i; 10 | struct SamplePair* buffer = 11 | malloc(sizeof(struct SamplePair) * buffer_size); 12 | v_activate( 13 | 1, 14 | "./test_fixtures/projects/daw_e2e", 15 | 44100, 16 | NULL, 17 | 0 18 | ); 19 | STARGATE->sample_count = buffer_size; 20 | v_set_host(SG_HOST_DAW); 21 | DAW->metronome_enabled = 1; 22 | v_daw_run_engine(buffer_size, buffer, NULL); 23 | v_daw_set_playback_mode(DAW, 1, 0.0, 1); 24 | for(i = 0; i < 10; ++i){ 25 | v_daw_run_engine(buffer_size, buffer, NULL); 26 | } 27 | v_daw_set_playback_mode(DAW, 0, 0.0, 1); 28 | for(i = 0; i < 10; ++i){ 29 | v_daw_run_engine(buffer_size, buffer, NULL); 30 | } 31 | free(buffer); 32 | } 33 | 34 | void TestDAW(){ 35 | TestDAWE2E(); 36 | } 37 | -------------------------------------------------------------------------------- /src/engine/tests/test_files.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "files.h" 6 | 7 | static void TestWriteChownReadDelete(){ 8 | char path[50] = "./tmp/file_read_write_delete.txt"; 9 | char text[50] = "TestWriteReadDelete()"; 10 | char buffer[50]; 11 | 12 | v_write_to_file(path, text); 13 | #if SG_OS == _OS_LINUX 14 | chown_file(path); 15 | #endif 16 | get_string_from_file( 17 | path, 18 | 50, 19 | buffer 20 | ); 21 | assert(!strcmp(text, buffer)); 22 | delete_file(path); 23 | // Test failing to delete 24 | delete_file(path); 25 | } 26 | 27 | static void TestListDir(){ 28 | g_get_dir_list("./tmp"); 29 | } 30 | 31 | void TestFilesAll(){ 32 | TestWriteChownReadDelete(); 33 | TestListDir(); 34 | } 35 | -------------------------------------------------------------------------------- /src/engine/tests/test_main.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_MAIN_H 2 | #define TEST_MAIN_H 3 | 4 | void TestAudioDSP(); 5 | void TestCSV(); 6 | void TestDAW(); 7 | void TestFilePath(); 8 | void TestFilesAll(); 9 | void TestPlugins(); 10 | void TestWaveEdit(); 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /src/engine/tests/test_plugins.c: -------------------------------------------------------------------------------- 1 | #include "plugins/test_va1.h" 2 | 3 | void TestPlugins(){ 4 | TestVA1e2e(); 5 | } 6 | 7 | -------------------------------------------------------------------------------- /src/engine/tests/testlib/math.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "./math.h" 5 | #include "compiler.h" 6 | 7 | void test_deviance( 8 | SGFLT result, 9 | SGFLT expected, 10 | SGFLT deviance 11 | ){ 12 | SGFLT diff = fabs(result - expected); 13 | SGFLT percent = fabs(expected) * deviance * 0.01; 14 | assert(diff <= percent); 15 | } 16 | -------------------------------------------------------------------------------- /src/engine/tests/testlib/math.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTLIB_MATH_H 2 | #define TESTLIB_MATH_H 3 | 4 | #include "compiler.h" 5 | 6 | /* Check that a test result is accurate within @deviance percentage 7 | * Because floating point math is often not completely accurate 8 | */ 9 | void test_deviance( 10 | SGFLT result, 11 | SGFLT expected, 12 | SGFLT deviance 13 | ); 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /src/files/fonts/RobotoCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/files/fonts/RobotoCondensed-Bold.ttf -------------------------------------------------------------------------------- /src/files/fonts/RobotoCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/files/fonts/RobotoCondensed-Regular.ttf -------------------------------------------------------------------------------- /src/files/metronome/square/down.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/files/metronome/square/down.wav -------------------------------------------------------------------------------- /src/files/metronome/square/up.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/files/metronome/square/up.wav -------------------------------------------------------------------------------- /src/files/plugin_assets/knob-metal-bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/files/share/applications/stargate.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Stargate 3 | GenericName=Stargate 4 | Comment=A suite of audio hosts and plugins 5 | Comment[fr]=Un ensemble d'hôtes audio et de greffons 6 | Exec=/usr/bin/stargate %U 7 | Icon=stargate 8 | Terminal=false 9 | Type=Application 10 | Categories=Qt;AudioVideo;Audio; 11 | -------------------------------------------------------------------------------- /src/files/share/doc/stargate/copyright: -------------------------------------------------------------------------------- 1 | Copyright 2021 Stargate Team 2 | See /usr/share/common-licenses/GPL-3 for license 3 | 4 | -------------------------------------------------------------------------------- /src/files/share/mime/packages/stargate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Stargate DAW project file 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/files/share/pixmaps/stargate.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/files/share/pixmaps/stargate.ico -------------------------------------------------------------------------------- /src/files/share/pixmaps/stargate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/files/share/pixmaps/stargate.png -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/draw-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/erase-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/mute-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/play-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/rec-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/dark/stop-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/draw-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/erase-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/loop-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/mute-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/play-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/power-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/rec-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/spinbox-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/spinbox-up.svg: -------------------------------------------------------------------------------- 1 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/split-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/stop-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/files/themes/default/assets/zoom_slider_handle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/files/themes/default/default-lightweight.sgtheme: -------------------------------------------------------------------------------- 1 | template: default.qss 2 | palette: default.yaml 3 | variables: 4 | path: default.yaml 5 | overrides: {} 6 | system: 7 | path: default.yaml 8 | overrides: 9 | daw: {} 10 | widgets: {} 11 | -------------------------------------------------------------------------------- /src/files/themes/default/default.sgtheme: -------------------------------------------------------------------------------- 1 | template: default.qss 2 | palette: default.yaml 3 | variables: 4 | path: default.yaml 5 | overrides: 6 | combobox: |- 7 | qlineargradient( 8 | x1:0, y1:0, x2:0, y2:1, 9 | stop:0 #1f1f27, stop: 0.3 #23232b, stop: 0.6 #23232b, stop:1 #1f1f27 10 | ) 11 | system: 12 | path: default.yaml 13 | overrides: 14 | daw: 15 | seq_antialiasing: true 16 | seq_item_background: "#12666666" 17 | seq_item_background_use_track_color: true 18 | widgets: {} 19 | -------------------------------------------------------------------------------- /src/files/themes/default/palettes/dark.yaml: -------------------------------------------------------------------------------- 1 | black: "#1c1c1b" 2 | gray1: "#222222" 3 | gray2: "#1e1e1e" 4 | gray3: "#191919" 5 | gray4: "#131415" 6 | gray_light: "#636462" 7 | purple: "#8212f2" 8 | white: "#cccccc" 9 | -------------------------------------------------------------------------------- /src/files/themes/default/palettes/default.yaml: -------------------------------------------------------------------------------- 1 | black: "#262126" 2 | black_light: "#2c2a2c" 3 | gray1: "#626262" 4 | gray2: "#5d5a5c" 5 | gray2a: "#585858" 6 | gray3: "#474847" 7 | gray4: "#393939" 8 | gray5: "#323130" 9 | gray_light: "#a3a3a6" 10 | purple: "#8212f2" 11 | white: "#cccccc" 12 | -------------------------------------------------------------------------------- /src/files/themes/default/vars/common.yaml: -------------------------------------------------------------------------------- 1 | 2 | # Must leave one blank line at the top 3 | 4 | highlight_border: "#ffffff" 5 | # This one is used by the UI and must be set 6 | transport_button_size: 40 7 | transport_clock_background: "#333390" 8 | transport_clock_color: "{{ palette.white }}" 9 | 10 | -------------------------------------------------------------------------------- /src/files/themes/default/vars/default.yaml: -------------------------------------------------------------------------------- 1 | # {% include './common.yaml' %} 2 | 3 | assets_subdir: "dark" 4 | background_color: "{{ palette.gray1 }}" 5 | background_color_alt: "{{ palette.gray2 }}" 6 | background_color_alt2: "{{ palette.black }}" 7 | background_color_alt3: "{{ palette.gray_light }}" 8 | background_color_disabled: "#181818" 9 | border_color: "{{ palette.gray5 }}" 10 | button_pressed: "#2d2d2d" 11 | checkbox_check: "{{ palette.white }}" 12 | combobox: "#1f1f27" 13 | highlight: "{{ palette.white }}" 14 | hscrollbar: "{{ palette.gray3 }}" 15 | hscrollbar_groove: "{{ palette.black }}" 16 | item_handle: "#aaaaaa" 17 | text_background_color: "{{ palette.black_light }}" 18 | text_color: "{{ palette.white }}" 19 | text_color_alt: "{{ palette.black }}" 20 | text_color_disabled: "#d0d0d0" 21 | tab_selected: "#1e1e1e" 22 | track_panel_background: "{{ palette.gray4 }}" 23 | transport_clock_background: "#1e1e1e" 24 | transport_panel_background: "{{ palette.gray_light }}" 25 | vscrollbar: "{{ palette.gray3 }}" 26 | vscrollbar_groove: "{{ palette.black }}" 27 | -------------------------------------------------------------------------------- /src/loc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | 3 | echo "Lines of C code:" 4 | find engine/ -type f -regex '.*\.\(c\|h\)' -exec cat {} \; | wc -l 5 | 6 | echo "C tests:" 7 | find engine/tests -type f -regex '.*\.\(c\|h\)' -exec cat {} \; | wc -l 8 | 9 | echo "C headers:" 10 | find engine/include -type f -name '*.h' -exec cat {} \; | wc -l 11 | 12 | echo "Lines of Python code" 13 | find sgui sglib test -type f -name '*.py' -exec cat {} \; | wc -l 14 | 15 | echo "sglib:" 16 | find sglib -type f -name '*.py' -exec cat {} \; | wc -l 17 | 18 | echo "sgui:" 19 | find sgui -type f -name '*.py' -exec cat {} \; | wc -l 20 | 21 | echo "Python tests:" 22 | find test -type f -name '*.py' -exec cat {} \; | wc -l 23 | 24 | -------------------------------------------------------------------------------- /src/macos/Distribution.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Stargate DAW 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Distribution.pkg 27 | 28 | -------------------------------------------------------------------------------- /src/macos/Scripts/postinstall: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | echo "Nothing to be done post install" 4 | -------------------------------------------------------------------------------- /src/macos/Scripts/preinstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash -xe 2 | 3 | # The launch daemon is deprecated, we only ensure that it is uninstalled 4 | # and unloaded. TODO: Remove in mid-2023 5 | SG_LAUNCH_DAEMON="/Library/LaunchDaemons/com.github.stargatedaw.stargate.launchdaemon.plist" 6 | /bin/launchctl unload "${SG_LAUNCH_DAEMON}" || true 7 | rm -f "${SG_LAUNCH_DAEMON}" || true 8 | 9 | # Deprecated DMG install. TODO: Remove in mid-2023 10 | if [ -d "/Applications/stargate.app" ]; then 11 | echo "Deleting previous DMG install of Stargate DAW" 12 | rm -rf /Applications/stargate.app 13 | fi 14 | -------------------------------------------------------------------------------- /src/macos/homebrew_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | 3 | # Used for creating the app bundle and dmg 4 | # Note that "System Integrity Protection" and Homebrew's insistence 5 | # on not running as root makes it impossible to directly install 6 | # Stargate DAW from a Homebrew tap 7 | 8 | brew install \ 9 | create-dmg \ 10 | ffmpeg \ 11 | fftw \ 12 | flac \ 13 | jq \ 14 | lame \ 15 | libogg \ 16 | libsamplerate \ 17 | libsndfile \ 18 | libvorbis \ 19 | opus \ 20 | portaudio \ 21 | portmidi \ 22 | rubberband \ 23 | theora 24 | 25 | -------------------------------------------------------------------------------- /src/macos/requirements-intel.txt: -------------------------------------------------------------------------------- 1 | # Qt 6.2 is the end of the road for us on Intel Mac because 2 | # the build machine for Intel Mac is stuck on Catalina, and 3 | # the next LTS (6.5) created a requirement for Big Sur or 4 | # above. We may consider getting another Intel Mac if this 5 | # becomes a problem later, but the intention is not to do that 6 | PyQt6==6.2.3 7 | PyQt6-Qt6==6.2.4 8 | 9 | jinja2 10 | mido 11 | mutagen 12 | numpy 13 | psutil 14 | pyinstaller==5.6.2 15 | pymarshal 16 | PyYAML 17 | wavefile 18 | -------------------------------------------------------------------------------- /src/macos/requirements-m1.txt: -------------------------------------------------------------------------------- 1 | # DO NOT upgrade both to 6.5.1 2 | # when both are 6.5.1 the application immediately SEGFAULTs 3 | PyQt6==6.5.0 4 | PyQt6-Qt6==6.5.1 5 | 6 | Nuitka 7 | 8 | jinja2 9 | mido 10 | mutagen 11 | numpy 12 | psutil 13 | pyinstaller==5.6.2 14 | pymarshal 15 | PyYAML 16 | wavefile 17 | -------------------------------------------------------------------------------- /src/macos/stargate.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/macos/stargate.icns -------------------------------------------------------------------------------- /src/macos/test-without-brew.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Remove some brew dependencies to test that Pyinstaller linkage is 4 | # working as expected 5 | 6 | brew uninstall -y portaudio portmidi 7 | 8 | open -b io.github.stargateaudio 9 | 10 | brew install -y portaudio portmidi 11 | 12 | -------------------------------------------------------------------------------- /src/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": { 3 | "major": "stargate", 4 | "minor": "24.07.1" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/requirements.txt: -------------------------------------------------------------------------------- 1 | jinja2 2 | mido 3 | mutagen 4 | #numpy 5 | psutil 6 | pymarshal 7 | #PyQt6 8 | PyYAML 9 | wavefile 10 | -------------------------------------------------------------------------------- /src/setup.cfg: -------------------------------------------------------------------------------- 1 | [aliases] 2 | test=pytest 3 | 4 | [bdist_rpm] 5 | requires = 6 | alsa-lib 7 | fftw 8 | lame 9 | libsndfile 10 | portaudio 11 | portmidi 12 | python3 13 | python3-jinja2 14 | python3-mido 15 | python3-mutagen 16 | python3-numpy 17 | python3-psutil 18 | python3-pyyaml 19 | python3-qt5 20 | rubberband 21 | vorbis-tools 22 | 23 | [tool:pytest] 24 | addopts = --cov=sglib --cov-report=html --cov-report=term 25 | 26 | -------------------------------------------------------------------------------- /src/sg_py_vendor/.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | share/ 3 | -------------------------------------------------------------------------------- /src/sg_py_vendor/mido/__about__.py: -------------------------------------------------------------------------------- 1 | __version__ = '1.2.10' 2 | __author__ = 'Ole Martin Bjorndalen' 3 | __author_email__ = 'ombdalen@gmail.com' 4 | __url__ = 'https://mido.readthedocs.io/' 5 | __license__ = 'MIT' 6 | -------------------------------------------------------------------------------- /src/sg_py_vendor/mido/backends/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sg_py_vendor/mido/backends/__init__.py -------------------------------------------------------------------------------- /src/sg_py_vendor/mido/messages/__init__.py: -------------------------------------------------------------------------------- 1 | from .checks import check_time 2 | from .specs import (SPEC_LOOKUP, SPEC_BY_TYPE, SPEC_BY_STATUS, 3 | MIN_PITCHWHEEL, MAX_PITCHWHEEL, MIN_SONGPOS, MAX_SONGPOS) 4 | from .messages import (BaseMessage, Message, parse_string, 5 | format_as_string, parse_string_stream) 6 | -------------------------------------------------------------------------------- /src/sg_py_vendor/mido/midifiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .meta import MetaMessage, UnknownMetaMessage, KeySignatureError 2 | from .units import tick2second, second2tick, bpm2tempo, tempo2bpm 3 | from .tracks import MidiTrack, merge_tracks 4 | from .midifiles import MidiFile 5 | -------------------------------------------------------------------------------- /src/sg_py_vendor/mido/py2.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | PY2 = (sys.version_info.major == 2) 4 | 5 | 6 | def convert_py2_bytes(data): 7 | """Convert bytes object to bytearray in Python 2. 8 | 9 | Many parts of Mido such as ``Parser.feed()`` and 10 | ``Message.from_bytes()`` accept an iterable of integers. 11 | 12 | In Python 3 you can pass a byte string:: 13 | 14 | >>> list(b'\x01\x02\x03') 15 | [1, 2, 3] 16 | 17 | while in Python 2 this happens:: 18 | 19 | >>> list(b'\x01\x02\x03') 20 | ['\x01', '\x02', '\x03'] 21 | 22 | This function patches over the difference:: 23 | 24 | >>> list(convert_py2_bytes(b'\x01\x02\x03')) 25 | [1, 2, 3] 26 | 27 | """ 28 | if PY2 and isinstance(data, bytes): 29 | return bytearray(data) 30 | else: 31 | return data 32 | -------------------------------------------------------------------------------- /src/sg_py_vendor/mido/version.py: -------------------------------------------------------------------------------- 1 | from collections import namedtuple 2 | from .__about__ import __version__ 3 | 4 | VersionInfo = namedtuple('VersionInfo', 5 | ['major', 'minor', 'micro', 'releaselevel', 'serial']) 6 | 7 | 8 | def _make_version_info(version): 9 | if '-' in version: 10 | version, releaselevel = version.split('-') 11 | else: 12 | releaselevel = '' 13 | 14 | major, minor, micro = map(int, version.split('.')) 15 | 16 | return VersionInfo(major, minor, micro, releaselevel, 0) 17 | 18 | 19 | version_info = _make_version_info(__version__) 20 | -------------------------------------------------------------------------------- /src/sg_py_vendor/pymarshal/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Replicates the functionality of Golang's 3 | struct (un)marshalling feature to/from JSON. 4 | 5 | For examples, see: 6 | https://github.com/stargateaudio/pymarshal/blob/master/README.md 7 | """ 8 | 9 | from . import json 10 | from .json import * 11 | 12 | __version__ = '2.2.0' 13 | __all__ = json.__all__ 14 | -------------------------------------------------------------------------------- /src/sg_py_vendor/pymarshal/util/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sg_py_vendor/pymarshal/util/__init__.py -------------------------------------------------------------------------------- /src/sg_py_vendor/pymarshal/util/init_args.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | """ 4 | 5 | import sys 6 | import types 7 | from typing import Any, List 8 | 9 | 10 | def init_args( 11 | cls: Any, 12 | ) -> List[str]: 13 | """ Return the __init__ args (minus 'self') for @cls 14 | 15 | Args: 16 | cls: class, instance or callable 17 | Returns: 18 | The arguments minus 'self' 19 | """ 20 | # This looks insanely goofy, but seems to literally be the 21 | # only thing that actually works. Your obvious ways to 22 | # accomplish this task do not apply here. 23 | try: 24 | # Assume it's a factory function, static method, or other callable 25 | args = cls.__code__.co_varnames 26 | except AttributeError: 27 | # assume it's a class 28 | args = cls.__init__.__code__.co_varnames 29 | 30 | # Note: There is a special place in hell for people who don't 31 | # call the first method argument 'self'. 32 | if args[0] == 'self': 33 | args = args[1:] 34 | 35 | return args 36 | 37 | -------------------------------------------------------------------------------- /src/sg_py_vendor/pymarshal/util/key_swap.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | """ 4 | from typing import Any, Dict 5 | 6 | __all__ = [ 7 | 'key_swap', 8 | ] 9 | 10 | 11 | def key_swap( 12 | d: Dict[str, str], 13 | cls: Any, 14 | marshal: bool, 15 | ) -> dict: 16 | """ Swap the keys in a dictionary 17 | 18 | Args: 19 | d: The dict to swap keys in 20 | cls: class, If the class has a staticly defined 21 | _marshal_key_swap and/or _unmarshal_key_swap dict, 22 | the keys will be swapped. 23 | Otherwise @d is returned 24 | marshal: True if marshalling class to JSON, 25 | False if unmarshalling JSON to class 26 | """ 27 | dname = '_{}marshal_key_swap'.format("" if marshal else "un") 28 | if hasattr(cls, dname): 29 | key_swap = getattr(cls, dname) 30 | return { 31 | key_swap[k] if k in key_swap else k: v 32 | for k, v in d.items() 33 | } 34 | else: 35 | return d 36 | -------------------------------------------------------------------------------- /src/sg_py_vendor/pymarshal/util/pm_assert.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Optional 2 | 3 | 4 | def pm_assert( 5 | condition: Any, 6 | exc: Any=Exception, 7 | context: Any=None, 8 | msg: str="", 9 | ) -> Any: 10 | """ Generic assertion that can be used anywhere 11 | @condition: A condition to assert is true 12 | @exc: Raise if @condition is False 13 | @context: The relevant data structures 14 | @msg: Any additional text to include 15 | """ 16 | if not condition: 17 | raise exc(f"{msg}\n{context}") 18 | return condition 19 | 20 | -------------------------------------------------------------------------------- /src/sg_py_vendor/wavefile/__init__.py: -------------------------------------------------------------------------------- 1 | from .wavefile import * 2 | -------------------------------------------------------------------------------- /src/sglib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/__init__.py -------------------------------------------------------------------------------- /src/sglib/api/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Provides an API for the UI to control the data model and engine. 3 | 4 | All logic for the UI to get or set project data should be put in here and 5 | unit tested, the UI should not modify or read project data directly. 6 | Once data is successfully modified, these functions should commit to undo 7 | history and notify the engine to reload the affected files. 8 | 9 | Submodules to be imported by UI widgets should be prefixed with 'api_' to avoid 10 | confusion with other imports 11 | """ 12 | -------------------------------------------------------------------------------- /src/sglib/api/daw/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/__init__.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_audio_item.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_audio_item.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_cc.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_cc.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_note.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_note.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_patterns.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_patterns.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_pb.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_pb.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_project_notes.py: -------------------------------------------------------------------------------- 1 | """ 2 | API for loading and saving project notes (text notes, not MIDI notes) 3 | """ 4 | from sglib import constants 5 | 6 | 7 | def load(): 8 | return constants.DAW_PROJECT.get_notes() 9 | 10 | def save(notes): 11 | constants.DAW_PROJECT.write_notes(notes) 12 | 13 | -------------------------------------------------------------------------------- /src/sglib/api/daw/api_rack.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_rack.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_seq.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_seq.py -------------------------------------------------------------------------------- /src/sglib/api/daw/api_transport.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/daw/api_transport.py -------------------------------------------------------------------------------- /src/sglib/api/wave_edit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/api/wave_edit/__init__.py -------------------------------------------------------------------------------- /src/sglib/api/wave_edit/api_project_notes.py: -------------------------------------------------------------------------------- 1 | """ 2 | API for loading and saving project notes (text notes, not MIDI notes) 3 | """ 4 | from sglib import constants 5 | 6 | 7 | def load(): 8 | return constants.WAVE_EDIT_PROJECT.get_notes() 9 | 10 | def save(notes): 11 | constants.WAVE_EDIT_PROJECT.write_notes(notes) 12 | 13 | -------------------------------------------------------------------------------- /src/sglib/hardware/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/hardware/__init__.py -------------------------------------------------------------------------------- /src/sglib/ipc/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = [ 2 | "DawIPC", 3 | "WaveEditIPC", 4 | "StargateIPC", 5 | ] 6 | 7 | from .daw import DawIPC 8 | from .stargate import StargateIPC 9 | from .wave_edit import WaveEditIPC 10 | -------------------------------------------------------------------------------- /src/sglib/lib/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file is part of the Stargate project, Copyright Stargate Team 3 | 4 | This program is free software; you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation; version 3 of the License. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | """ 13 | 14 | -------------------------------------------------------------------------------- /src/sglib/lib/normalize.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | 3 | from sglib.log import LOG 4 | from sglib.math import db_to_lin 5 | from sg_py_vendor import wavefile 6 | 7 | def normalize_in_place(path: str, db: float): 8 | dst = path + '.tmp-normalize' 9 | # This could be improved by reading the file in chunks to avoid 10 | # loading in memory using a WaveReader 11 | sr, arr = wavefile.load(path) 12 | factor = db_to_lin(db) / max((arr.max(), arr.min() * -1.)) 13 | LOG.info(f'Normalizing {path} by {factor}') 14 | arr *= factor 15 | with wavefile.WaveWriter(dst, sr, arr.shape[0]) as f: 16 | f.write(arr) 17 | shutil.move(dst, path) 18 | 19 | -------------------------------------------------------------------------------- /src/sglib/lib/path/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/lib/path/__init__.py -------------------------------------------------------------------------------- /src/sglib/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sglib/models/__init__.py -------------------------------------------------------------------------------- /src/sglib/models/daw/__init__.py: -------------------------------------------------------------------------------- 1 | from .atm_point import DawAtmPoint 2 | from .atm_sequence import DawAtmRegion 3 | from .audio_item import DawAudioItem 4 | from .item import item 5 | from .sequence_marker import loop_marker 6 | from .seq_item import sequencer_item 7 | from .sequencer import sequencer 8 | from .tempo_marker import tempo_marker 9 | #from .text_marker import DawTextMarker 10 | from ._shared import ( 11 | min_note_length, 12 | sequencer_marker, 13 | TRACK_COUNT_ALL, 14 | ) 15 | 16 | -------------------------------------------------------------------------------- /src/sglib/models/daw/_shared.py: -------------------------------------------------------------------------------- 1 | from sglib.models.stargate import * 2 | from sglib.lib import history 3 | from sglib.lib.util import * 4 | from sglib.lib.translate import _ 5 | import numpy 6 | import os 7 | import re 8 | import traceback 9 | 10 | TRACK_COUNT_ALL = 32 11 | #Anything smaller gets deleted when doing a transform 12 | min_note_length = 4.0 / 129.0 13 | 14 | class abstract_marker: 15 | def __lt__(self, other): 16 | if self.beat == other.beat: 17 | return self.type < other.type 18 | else: 19 | return self.beat < other.beat 20 | 21 | class sequencer_marker(abstract_marker): 22 | def __init__(self, a_beat, a_text): 23 | self.type = 3 24 | self.beat = int(a_beat) 25 | self.text = str(a_text) 26 | 27 | def __str__(self): 28 | return "|".join( 29 | str(x) 30 | for x in ("E", self.type, self.beat, self.text) 31 | ) 32 | 33 | @staticmethod 34 | def from_str(self, a_str): 35 | return sequencer_marker(*a_str.split("|", 1)) 36 | 37 | -------------------------------------------------------------------------------- /src/sglib/models/daw/routing/__init__.py: -------------------------------------------------------------------------------- 1 | from .graph import RoutingGraph 2 | from .midi import MIDIRoute, MIDIRoutes 3 | from .track import TrackSend 4 | -------------------------------------------------------------------------------- /src/sglib/models/daw/routing/track.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | class TrackSend: 4 | def __init__( 5 | self, 6 | a_track_num, 7 | a_index, 8 | a_output, 9 | conn_type, 10 | ): 11 | """ 12 | @a_track_num: int, The source track 13 | @a_index: int, The index of this TrackSend in the track 14 | @a_output: int, The destination track 15 | conn_type: int, 0: normal, 1 sidechain, 2: MIDI 16 | """ 17 | self.track_num = int(a_track_num) 18 | self.index = int(a_index) 19 | self.output = int(a_output) 20 | self.conn_type = int(conn_type) 21 | 22 | def __str__(self): 23 | return "|".join( 24 | str(x) for x in ( 25 | "s", 26 | self.track_num, 27 | self.index, 28 | self.output, 29 | self.conn_type, 30 | ) 31 | ) 32 | 33 | def __lt__(self, other): 34 | return self.index < other.index 35 | 36 | -------------------------------------------------------------------------------- /src/sglib/models/daw/sequence_marker.py: -------------------------------------------------------------------------------- 1 | from . import _shared 2 | from sglib.models.stargate import * 3 | from sglib.lib.util import * 4 | from sglib.lib.translate import _ 5 | 6 | 7 | class loop_marker(_shared.abstract_marker): 8 | __slots__ = [ 9 | 'type', 10 | 'beat', 11 | 'start_beat', 12 | ] 13 | def __init__(self, a_beat, a_start_beat): 14 | self.type = 1 15 | self.beat = int(a_beat) 16 | self.start_beat = int(a_start_beat) 17 | 18 | def __str__(self): 19 | return "|".join(str(x) for x in 20 | ("E", self.type, self.beat, self.start_beat)) 21 | 22 | @staticmethod 23 | def from_str(self, a_str): 24 | return _shared.sequencer_marker(*a_str.split("|", 1)) 25 | 26 | -------------------------------------------------------------------------------- /src/sglib/models/daw/text_marker.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/sglib/models/multifx_settings.py: -------------------------------------------------------------------------------- 1 | from sglib.lib import util 2 | 3 | 4 | class multifx_settings: 5 | def __init__(self, a_knob0, a_knob1, a_knob2, a_type): 6 | self.knobs = [] 7 | self.knobs.append(int(a_knob0)) 8 | self.knobs.append(int(a_knob1)) 9 | self.knobs.append(int(a_knob2)) 10 | self.fx_type = int(a_type) 11 | 12 | def __lt__(self, other): 13 | if self.index > other.index: 14 | return False 15 | else: 16 | return self.fx_num < other.fx_num 17 | 18 | def __str__(self): 19 | return "|{}".format( 20 | "|".join( 21 | util.proj_file_str(x) 22 | for x in ( 23 | self.knobs[0], 24 | self.knobs[1], 25 | self.knobs[2], 26 | self.fx_type, 27 | ) 28 | ) 29 | ) 30 | 31 | -------------------------------------------------------------------------------- /src/sglib/models/plugin/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugin import ( 2 | Plugin, 3 | PluginCCMapping, 4 | PluginControl, 5 | PluginCustomControl, 6 | PluginMeta, 7 | ) 8 | from .rack import PluginRack 9 | 10 | 11 | __all__ = [ 12 | 'Plugin', 13 | 'PluginCCMapping', 14 | 'PluginControl', 15 | 'PluginCustomControl', 16 | 'PluginMeta', 17 | 'PluginRack', 18 | ] 19 | -------------------------------------------------------------------------------- /src/sglib/models/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from . import sampler1 2 | 3 | _LOOKUP = { 4 | 1: sampler1, 5 | } 6 | 7 | def get_plugin_by_uid(uid: int): 8 | """ Return a plugin models module if the plugin has one 9 | @uid: 10 | The UID of the plugin (the plugin itself, not it's uid 11 | of the plugin pool instance) 12 | 13 | """ 14 | return _LOOKUP.get(uid, None) 15 | 16 | __all__ = [ 17 | 'get_plugin', 18 | ] 19 | -------------------------------------------------------------------------------- /src/sglib/models/plugins/sampler1.py: -------------------------------------------------------------------------------- 1 | from sglib import constants 2 | from sglib.models.plugin_file import plugin_file 3 | import os 4 | 5 | def get_audio_pool_uids(a_plugin_uid): 6 | f_file_path = os.path.join( 7 | *( 8 | str(x) for x in ( 9 | constants.PROJECT.plugin_pool_folder, 10 | a_plugin_uid, 11 | ) 12 | ) 13 | ) 14 | if os.path.isfile(f_file_path): 15 | f_file = plugin_file(f_file_path) 16 | if 'load' in f_file.configure_dict: 17 | return set( 18 | int(x) 19 | for x in f_file.configure_dict['load'].split("|") 20 | if x 21 | ) 22 | else: 23 | return set() 24 | 25 | -------------------------------------------------------------------------------- /src/sglib/models/project/__init__.py: -------------------------------------------------------------------------------- 1 | from .project import GlobalProject 2 | 3 | 4 | __all__ = [ 5 | 'Project', 6 | ] 7 | 8 | -------------------------------------------------------------------------------- /src/sglib/models/project/midi.py: -------------------------------------------------------------------------------- 1 | try: 2 | from sg_py_vendor.pymarshal import type_assert 3 | except ImportError: 4 | from pymarshal import type_assert 5 | 6 | 7 | class MIDIConfig: 8 | def __init__( 9 | self, 10 | default_key, 11 | default_scale, 12 | ): 13 | self.default_key = type_assert( 14 | default_key, 15 | str, 16 | desc="The default key to use in MIDI editors", 17 | ) 18 | self.default_scale = type_assert( 19 | default_scale, 20 | str, 21 | desc="The default scale to use in MIDI editors", 22 | ) 23 | 24 | @staticmethod 25 | def new(): 26 | return MIDIConfig( 27 | "C", 28 | "Major", 29 | ) 30 | 31 | -------------------------------------------------------------------------------- /src/sglib/models/project/project.py: -------------------------------------------------------------------------------- 1 | from .midi import MIDIConfig 2 | try: 3 | from sg_py_vendor.pymarshal import type_assert, type_assert_iter 4 | except ImportError: 5 | from pymarshal import type_assert, type_assert_iter 6 | 7 | 8 | class GlobalProject: 9 | """ Contains settings global to all sub-projects """ 10 | def __init__( 11 | self, 12 | midi_config, 13 | ): 14 | self.midi_config = type_assert( 15 | midi_config, 16 | MIDIConfig, 17 | ) 18 | 19 | @staticmethod 20 | def new(): 21 | return GlobalProject( 22 | MIDIConfig.new(), 23 | ) 24 | 25 | -------------------------------------------------------------------------------- /src/sglib/models/stargate/__init__.py: -------------------------------------------------------------------------------- 1 | from .audio_inputs import * 2 | from .audio_item import * 3 | from .midi_events import * 4 | from .project import * 5 | from .sample_graph import * 6 | from .takes import * 7 | from .tracks import * 8 | 9 | -------------------------------------------------------------------------------- /src/sgui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sgui/__init__.py -------------------------------------------------------------------------------- /src/sgui/daw/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file is part of the Stargate project, Copyright Stargate Team 3 | 4 | This program is free software; you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation; version 3 of the License. 7 | 8 | This program is distributed in the hope that it will be useful, 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | GNU General Public License for more details. 12 | """ 13 | 14 | from sglib.models.daw import * 15 | from .shared import * 16 | from . import shared 17 | -------------------------------------------------------------------------------- /src/sgui/daw/item_editor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sgui/daw/item_editor/__init__.py -------------------------------------------------------------------------------- /src/sgui/daw/lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sgui/daw/lib/__init__.py -------------------------------------------------------------------------------- /src/sgui/daw/lib/sequence.py: -------------------------------------------------------------------------------- 1 | from sglib import constants 2 | from sglib.log import LOG 3 | from sgui.daw import shared 4 | 5 | def change_sequence(name): 6 | """ Change the sequence currently being played by the engine 7 | """ 8 | playlist = constants.DAW_PROJECT.get_playlist() 9 | lookup = constants.DAW_PROJECT.sequence_uids_by_name() 10 | if name in lookup: # Existing 11 | uid, sequence = lookup[name] 12 | else: # Create new 13 | constants.DAW_PROJECT.create_sequence(name) 14 | lookup = constants.DAW_PROJECT.sequence_uids_by_name() 15 | uid, sequence = lookup[name] 16 | constants.DAW_IPC.change_sequence(uid) 17 | constants.DAW_CURRENT_SEQUENCE_UID = uid 18 | shared.CURRENT_SEQUENCE = sequence 19 | shared.SEQUENCER.open_sequence() 20 | shared.SEQUENCER.set_playback_pos(0) 21 | shared.SEQ_WIDGET.scrollbar.setValue(0) 22 | 23 | -------------------------------------------------------------------------------- /src/sgui/daw/lib/undo.py: -------------------------------------------------------------------------------- 1 | from sglib import constants 2 | from sgui.daw import painter_path, shared 3 | 4 | def undo(): 5 | painter_path.clear_caches() 6 | return constants.DAW_PROJECT.undo() 7 | 8 | def redo(): 9 | painter_path.clear_caches() 10 | return constants.DAW_PROJECT.redo() 11 | 12 | -------------------------------------------------------------------------------- /src/sgui/ipc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/sgui/ipc/__init__.py -------------------------------------------------------------------------------- /src/sgui/ipc/null.py: -------------------------------------------------------------------------------- 1 | from sglib.ipc.abstract import AbstractIPCTransport 2 | from sglib.log import LOG 3 | 4 | class NullIPCTransport(AbstractIPCTransport): 5 | def send( 6 | self, 7 | path, 8 | key, 9 | value, 10 | ): 11 | LOG.info( 12 | "Engine not running. Would have sent RPC call: " 13 | f'path: "{path}", key: "{key}", value: "{value}"' 14 | ) 15 | 16 | -------------------------------------------------------------------------------- /src/sgui/plugins/util.py: -------------------------------------------------------------------------------- 1 | from sgui.sgqt import * 2 | 3 | __all__ = [ 4 | 'get_screws', 5 | ] 6 | 7 | def get_screws() -> QVBoxLayout: 8 | layout = QVBoxLayout() 9 | top = QLabel("") 10 | bottom = QLabel("") 11 | for screw in (top, bottom): 12 | screw.setObjectName("screw") 13 | screw.setFixedHeight(24) 14 | screw.setFixedWidth(24) 15 | layout.addWidget(top) 16 | layout.addItem( 17 | QSpacerItem(1, 1, vPolicy=QSizePolicy.Policy.Expanding), 18 | ) 19 | layout.addWidget(bottom) 20 | return layout 21 | -------------------------------------------------------------------------------- /src/sgui/widgets/playback_widget.py: -------------------------------------------------------------------------------- 1 | from sgui import shared as glbl_shared 2 | from sgui.sgqt import * 3 | 4 | class playback_widget: 5 | def __init__(self): 6 | self.play_button = QRadioButton() 7 | self.play_button.setObjectName("play_button") 8 | self.play_button.clicked.connect(glbl_shared.TRANSPORT.on_play) 9 | self.stop_button = QRadioButton() 10 | self.stop_button.setChecked(True) 11 | self.stop_button.setObjectName("stop_button") 12 | self.stop_button.clicked.connect(glbl_shared.TRANSPORT.on_stop) 13 | 14 | -------------------------------------------------------------------------------- /src/sgui/widgets/transport.py: -------------------------------------------------------------------------------- 1 | 2 | class AbstractTransportWidget: 3 | """ TODO """ 4 | pass 5 | -------------------------------------------------------------------------------- /src/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/_fixtures/config/device.csv: -------------------------------------------------------------------------------- 1 | host_api,ALSA 2 | name,Apogee One 3 | buffer_size,128 4 | sample_rate,44100 5 | audio_engine,0 6 | threads,16 7 | thread_lock,0 8 | huge_pages,0 9 | audio_inputs,0 10 | audio_outputs,"2,0,1" 11 | -------------------------------------------------------------------------------- /src/test/sglib/_fixtures/wavs/1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/_fixtures/wavs/1.wav -------------------------------------------------------------------------------- /src/test/sglib/_fixtures/wavs/2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/_fixtures/wavs/2.wav -------------------------------------------------------------------------------- /src/test/sglib/hardware/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/hardware/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/hardware/test_rpi.py: -------------------------------------------------------------------------------- 1 | from sglib.hardware.rpi import * 2 | import tempfile 3 | 4 | def test_is_rpi(): 5 | with tempfile.NamedTemporaryFile() as f: 6 | sysfs_path = f.name 7 | for contents, expected in ( 8 | ('Raspberry Pi 4B', True), 9 | ('Ryzen 9 9999X', False), 10 | ): 11 | with open(sysfs_path, 'w') as f: 12 | f.write(contents) 13 | result = is_rpi( 14 | sysfs_path=sysfs_path, 15 | ) 16 | assert result == expected, (result, expected) 17 | 18 | def test_gpu_mem(): 19 | for cmd, expected in ( 20 | ('echo 512MB', True), 21 | ('echo 128MB', False), 22 | ('echo 128MB 128MB', True), 23 | ('echo five hundred MB', True), 24 | ('exit 1', True), 25 | ): 26 | result = gpu_mem(cmd=cmd) 27 | assert result == expected, (result, expected) 28 | 29 | -------------------------------------------------------------------------------- /src/test/sglib/lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/lib/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/pedal.txt: -------------------------------------------------------------------------------- 1 | master_label=pedalAction 2 | lokey=-1 3 | hikey=-1 4 | 5 | group_label=pedalD 6 | volume=-20 on_locc64=126 on_hicc64=127 group=1 off_by=2 7 | region_label=1 lorand=0 hirand=0.5 sample=pedalD1.$EXT 8 | region_label=2 lorand=0.5 hirand=1 sample=pedalD2.$EXT 9 | 10 | group_label=pedalU 11 | volume=-19 on_locc64=0 on_hicc64=1 group=2 12 | region_label=1 lorand=0 hirand=0.5 sample=pedalU1.$EXT 13 | region_label=2 lorand=0.5 hirand=1 sample=pedalU2.$EXT 14 | -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/tune_nat.txt: -------------------------------------------------------------------------------- 1 | #define $TUNE01 0 2 | #define $TUNE02 0 3 | #define $TUNE03 0 4 | #define $TUNE04 0 5 | #define $TUNE05 0 6 | #define $TUNE06 0 7 | #define $TUNE07 0 8 | #define $TUNE08 0 9 | #define $TUNE09 0 10 | #define $TUNE10 0 11 | #define $TUNE11 0 12 | #define $TUNE12 0 13 | #define $TUNE13 0 14 | #define $TUNE14 0 15 | #define $TUNE15 0 16 | #define $TUNE16 0 17 | #define $TUNE17 0 18 | #define $TUNE18 0 19 | #define $TUNE19 0 20 | #define $TUNE20 0 21 | #define $TUNE21 0 22 | #define $TUNE22 0 23 | #define $TUNE23 0 24 | #define $TUNE24 0 25 | #define $TUNE25 0 26 | #define $TUNE26 0 27 | #define $TUNE27 0 28 | #define $TUNE28 0 29 | #define $TUNE29 0 30 | #define $TUNE30 0 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/tune_ret.txt: -------------------------------------------------------------------------------- 1 | #define $TUNE01 10 2 | #define $TUNE02 13 3 | #define $TUNE03 11 4 | #define $TUNE04 -3 5 | #define $TUNE05 -9 6 | #define $TUNE06 -9 7 | #define $TUNE07 -11 8 | #define $TUNE08 -7 9 | #define $TUNE09 -4 10 | #define $TUNE10 0 11 | #define $TUNE11 -6 12 | #define $TUNE12 -3 13 | #define $TUNE13 -3 14 | #define $TUNE14 -6 15 | #define $TUNE15 -3 16 | #define $TUNE16 0 17 | #define $TUNE17 -4 18 | #define $TUNE18 -8 19 | #define $TUNE19 -8 20 | #define $TUNE20 -5 21 | #define $TUNE21 -7 22 | #define $TUNE22 -8 23 | #define $TUNE23 -12 24 | #define $TUNE24 -13 25 | #define $TUNE25 -12 26 | #define $TUNE26 -17 27 | #define $TUNE27 -17 28 | #define $TUNE28 -27 29 | #define $TUNE29 -38 30 | #define $TUNE30 -38 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_01.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v1 2 | 3 | #define $OFF01 481 4 | #define $OFF02 1388 5 | #define $OFF03 1059 6 | #define $OFF04 971 7 | #define $OFF05 356 8 | #define $OFF06 682 9 | #define $OFF07 711 10 | #define $OFF08 995 11 | #define $OFF09 894 12 | #define $OFF10 918 13 | #define $OFF11 883 14 | #define $OFF12 698 15 | #define $OFF13 714 16 | #define $OFF14 695 17 | #define $OFF15 662 18 | #define $OFF16 515 19 | #define $OFF17 609 20 | #define $OFF18 569 21 | #define $OFF19 638 22 | #define $OFF20 610 23 | #define $OFF21 599 24 | #define $OFF22 1071 25 | #define $OFF23 633 26 | #define $OFF24 674 27 | #define $OFF25 760 28 | #define $OFF26 556 29 | #define $OFF27 528 30 | #define $OFF28 665 31 | #define $OFF29 1058 32 | #define $OFF30 650 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_02.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v2 2 | 3 | #define $OFF01 866 4 | #define $OFF02 2717 5 | #define $OFF03 1096 6 | #define $OFF04 940 7 | #define $OFF05 752 8 | #define $OFF06 812 9 | #define $OFF07 545 10 | #define $OFF08 863 11 | #define $OFF09 554 12 | #define $OFF10 874 13 | #define $OFF11 714 14 | #define $OFF12 656 15 | #define $OFF13 607 16 | #define $OFF14 708 17 | #define $OFF15 558 18 | #define $OFF16 581 19 | #define $OFF17 625 20 | #define $OFF18 677 21 | #define $OFF19 689 22 | #define $OFF20 586 23 | #define $OFF21 629 24 | #define $OFF22 1572 25 | #define $OFF23 778 26 | #define $OFF24 636 27 | #define $OFF25 685 28 | #define $OFF26 763 29 | #define $OFF27 687 30 | #define $OFF28 492 31 | #define $OFF29 723 32 | #define $OFF30 674 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_03.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v3 2 | 3 | #define $OFF01 1148 4 | #define $OFF02 1288 5 | #define $OFF03 1123 6 | #define $OFF04 1162 7 | #define $OFF05 479 8 | #define $OFF06 779 9 | #define $OFF07 686 10 | #define $OFF08 1000 11 | #define $OFF09 675 12 | #define $OFF10 1009 13 | #define $OFF11 785 14 | #define $OFF12 647 15 | #define $OFF13 596 16 | #define $OFF14 678 17 | #define $OFF15 620 18 | #define $OFF16 658 19 | #define $OFF17 576 20 | #define $OFF18 606 21 | #define $OFF19 577 22 | #define $OFF20 659 23 | #define $OFF21 642 24 | #define $OFF22 1364 25 | #define $OFF23 636 26 | #define $OFF24 693 27 | #define $OFF25 646 28 | #define $OFF26 700 29 | #define $OFF27 665 30 | #define $OFF28 635 31 | #define $OFF29 690 32 | #define $OFF30 606 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_04.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v4 2 | 3 | #define $OFF01 1026 4 | #define $OFF02 2272 5 | #define $OFF03 1369 6 | #define $OFF04 1357 7 | #define $OFF05 462 8 | #define $OFF06 945 9 | #define $OFF07 595 10 | #define $OFF08 808 11 | #define $OFF09 577 12 | #define $OFF10 693 13 | #define $OFF11 816 14 | #define $OFF12 818 15 | #define $OFF13 546 16 | #define $OFF14 709 17 | #define $OFF15 731 18 | #define $OFF16 525 19 | #define $OFF17 663 20 | #define $OFF18 587 21 | #define $OFF19 719 22 | #define $OFF20 692 23 | #define $OFF21 1122 24 | #define $OFF22 777 25 | #define $OFF23 594 26 | #define $OFF24 662 27 | #define $OFF25 619 28 | #define $OFF26 548 29 | #define $OFF27 694 30 | #define $OFF28 679 31 | #define $OFF29 665 32 | #define $OFF30 655 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_05.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v5 2 | 3 | #define $OFF01 1118 4 | #define $OFF02 1994 5 | #define $OFF03 1109 6 | #define $OFF04 1240 7 | #define $OFF05 509 8 | #define $OFF06 738 9 | #define $OFF07 465 10 | #define $OFF08 831 11 | #define $OFF09 723 12 | #define $OFF10 915 13 | #define $OFF11 719 14 | #define $OFF12 1016 15 | #define $OFF13 745 16 | #define $OFF14 562 17 | #define $OFF15 784 18 | #define $OFF16 587 19 | #define $OFF17 685 20 | #define $OFF18 595 21 | #define $OFF19 730 22 | #define $OFF20 636 23 | #define $OFF21 783 24 | #define $OFF22 624 25 | #define $OFF23 595 26 | #define $OFF24 712 27 | #define $OFF25 573 28 | #define $OFF26 524 29 | #define $OFF27 573 30 | #define $OFF28 639 31 | #define $OFF29 684 32 | #define $OFF30 659 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_06.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v6 2 | 3 | #define $OFF01 1678 4 | #define $OFF02 1928 5 | #define $OFF03 1344 6 | #define $OFF04 1233 7 | #define $OFF05 757 8 | #define $OFF06 677 9 | #define $OFF07 566 10 | #define $OFF08 921 11 | #define $OFF09 803 12 | #define $OFF10 971 13 | #define $OFF11 746 14 | #define $OFF12 867 15 | #define $OFF13 661 16 | #define $OFF14 786 17 | #define $OFF15 670 18 | #define $OFF16 669 19 | #define $OFF17 645 20 | #define $OFF18 676 21 | #define $OFF19 745 22 | #define $OFF20 664 23 | #define $OFF21 1065 24 | #define $OFF22 758 25 | #define $OFF23 604 26 | #define $OFF24 647 27 | #define $OFF25 668 28 | #define $OFF26 709 29 | #define $OFF27 461 30 | #define $OFF28 721 31 | #define $OFF29 632 32 | #define $OFF30 663 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_07.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v7 2 | 3 | #define $OFF01 866 4 | #define $OFF02 1825 5 | #define $OFF03 1233 6 | #define $OFF04 1246 7 | #define $OFF05 774 8 | #define $OFF06 813 9 | #define $OFF07 554 10 | #define $OFF08 709 11 | #define $OFF09 748 12 | #define $OFF10 895 13 | #define $OFF11 765 14 | #define $OFF12 767 15 | #define $OFF13 586 16 | #define $OFF14 798 17 | #define $OFF15 695 18 | #define $OFF16 687 19 | #define $OFF17 549 20 | #define $OFF18 668 21 | #define $OFF19 667 22 | #define $OFF20 690 23 | #define $OFF21 403 24 | #define $OFF22 598 25 | #define $OFF23 596 26 | #define $OFF24 633 27 | #define $OFF25 719 28 | #define $OFF26 595 29 | #define $OFF27 576 30 | #define $OFF28 686 31 | #define $OFF29 654 32 | #define $OFF30 608 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_08.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v8 2 | 3 | #define $OFF01 1206 4 | #define $OFF02 1771 5 | #define $OFF03 1268 6 | #define $OFF04 1281 7 | #define $OFF05 673 8 | #define $OFF06 761 9 | #define $OFF07 670 10 | #define $OFF08 618 11 | #define $OFF09 757 12 | #define $OFF10 796 13 | #define $OFF11 781 14 | #define $OFF12 814 15 | #define $OFF13 705 16 | #define $OFF14 723 17 | #define $OFF15 687 18 | #define $OFF16 725 19 | #define $OFF17 612 20 | #define $OFF18 498 21 | #define $OFF19 754 22 | #define $OFF20 712 23 | #define $OFF21 532 24 | #define $OFF22 780 25 | #define $OFF23 672 26 | #define $OFF24 669 27 | #define $OFF25 632 28 | #define $OFF26 608 29 | #define $OFF27 750 30 | #define $OFF28 727 31 | #define $OFF29 694 32 | #define $OFF30 708 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_09.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v9 2 | 3 | #define $OFF01 1191 4 | #define $OFF02 1794 5 | #define $OFF03 1237 6 | #define $OFF04 1390 7 | #define $OFF05 453 8 | #define $OFF06 751 9 | #define $OFF07 618 10 | #define $OFF08 832 11 | #define $OFF09 799 12 | #define $OFF10 935 13 | #define $OFF11 806 14 | #define $OFF12 815 15 | #define $OFF13 690 16 | #define $OFF14 754 17 | #define $OFF15 616 18 | #define $OFF16 732 19 | #define $OFF17 669 20 | #define $OFF18 677 21 | #define $OFF19 744 22 | #define $OFF20 733 23 | #define $OFF21 395 24 | #define $OFF22 524 25 | #define $OFF23 572 26 | #define $OFF24 625 27 | #define $OFF25 657 28 | #define $OFF26 631 29 | #define $OFF27 644 30 | #define $OFF28 569 31 | #define $OFF29 717 32 | #define $OFF30 579 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_10.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v10 2 | 3 | #define $OFF01 1788 4 | #define $OFF02 1382 5 | #define $OFF03 1152 6 | #define $OFF04 1008 7 | #define $OFF05 797 8 | #define $OFF06 811 9 | #define $OFF07 663 10 | #define $OFF08 813 11 | #define $OFF09 675 12 | #define $OFF10 775 13 | #define $OFF11 624 14 | #define $OFF12 658 15 | #define $OFF13 660 16 | #define $OFF14 822 17 | #define $OFF15 670 18 | #define $OFF16 571 19 | #define $OFF17 593 20 | #define $OFF18 702 21 | #define $OFF19 682 22 | #define $OFF20 680 23 | #define $OFF21 593 24 | #define $OFF22 542 25 | #define $OFF23 528 26 | #define $OFF24 773 27 | #define $OFF25 549 28 | #define $OFF26 616 29 | #define $OFF27 770 30 | #define $OFF28 591 31 | #define $OFF29 690 32 | #define $OFF30 632 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_11.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v11 2 | 3 | #define $OFF01 1231 4 | #define $OFF02 2351 5 | #define $OFF03 1221 6 | #define $OFF04 1315 7 | #define $OFF05 738 8 | #define $OFF06 813 9 | #define $OFF07 665 10 | #define $OFF08 712 11 | #define $OFF09 784 12 | #define $OFF10 857 13 | #define $OFF11 733 14 | #define $OFF12 748 15 | #define $OFF13 696 16 | #define $OFF14 671 17 | #define $OFF15 702 18 | #define $OFF16 619 19 | #define $OFF17 627 20 | #define $OFF18 815 21 | #define $OFF19 729 22 | #define $OFF20 754 23 | #define $OFF21 422 24 | #define $OFF22 644 25 | #define $OFF23 591 26 | #define $OFF24 567 27 | #define $OFF25 670 28 | #define $OFF26 616 29 | #define $OFF27 781 30 | #define $OFF28 838 31 | #define $OFF29 682 32 | #define $OFF30 616 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_12.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v12 2 | 3 | #define $OFF01 1127 4 | #define $OFF02 2135 5 | #define $OFF03 1151 6 | #define $OFF04 1248 7 | #define $OFF05 717 8 | #define $OFF06 648 9 | #define $OFF07 719 10 | #define $OFF08 812 11 | #define $OFF09 757 12 | #define $OFF10 856 13 | #define $OFF11 720 14 | #define $OFF12 743 15 | #define $OFF13 727 16 | #define $OFF14 691 17 | #define $OFF15 573 18 | #define $OFF16 654 19 | #define $OFF17 537 20 | #define $OFF18 814 21 | #define $OFF19 686 22 | #define $OFF20 709 23 | #define $OFF21 636 24 | #define $OFF22 614 25 | #define $OFF23 663 26 | #define $OFF24 632 27 | #define $OFF25 592 28 | #define $OFF26 655 29 | #define $OFF27 598 30 | #define $OFF28 650 31 | #define $OFF29 707 32 | #define $OFF30 579 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_13.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v13 2 | 3 | #define $OFF01 1861 4 | #define $OFF02 2402 5 | #define $OFF03 1320 6 | #define $OFF04 1187 7 | #define $OFF05 615 8 | #define $OFF06 716 9 | #define $OFF07 787 10 | #define $OFF08 931 11 | #define $OFF09 761 12 | #define $OFF10 849 13 | #define $OFF11 785 14 | #define $OFF12 752 15 | #define $OFF13 800 16 | #define $OFF14 783 17 | #define $OFF15 628 18 | #define $OFF16 474 19 | #define $OFF17 651 20 | #define $OFF18 600 21 | #define $OFF19 648 22 | #define $OFF20 644 23 | #define $OFF21 913 24 | #define $OFF22 635 25 | #define $OFF23 586 26 | #define $OFF24 573 27 | #define $OFF25 632 28 | #define $OFF26 722 29 | #define $OFF27 553 30 | #define $OFF28 599 31 | #define $OFF29 601 32 | #define $OFF30 661 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_14.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v14 2 | 3 | #define $OFF01 1361 4 | #define $OFF02 2418 5 | #define $OFF03 1264 6 | #define $OFF04 1217 7 | #define $OFF05 800 8 | #define $OFF06 630 9 | #define $OFF07 818 10 | #define $OFF08 1045 11 | #define $OFF09 838 12 | #define $OFF10 1041 13 | #define $OFF11 853 14 | #define $OFF12 820 15 | #define $OFF13 802 16 | #define $OFF14 662 17 | #define $OFF15 657 18 | #define $OFF16 570 19 | #define $OFF17 730 20 | #define $OFF18 732 21 | #define $OFF19 648 22 | #define $OFF20 767 23 | #define $OFF21 729 24 | #define $OFF22 524 25 | #define $OFF23 646 26 | #define $OFF24 601 27 | #define $OFF25 737 28 | #define $OFF26 597 29 | #define $OFF27 613 30 | #define $OFF28 634 31 | #define $OFF29 697 32 | #define $OFF30 596 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_15.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v15 2 | 3 | #define $OFF01 870 4 | #define $OFF02 2168 5 | #define $OFF03 1287 6 | #define $OFF04 1439 7 | #define $OFF05 743 8 | #define $OFF06 661 9 | #define $OFF07 793 10 | #define $OFF08 1067 11 | #define $OFF09 731 12 | #define $OFF10 908 13 | #define $OFF11 801 14 | #define $OFF12 638 15 | #define $OFF13 689 16 | #define $OFF14 796 17 | #define $OFF15 644 18 | #define $OFF16 643 19 | #define $OFF17 592 20 | #define $OFF18 720 21 | #define $OFF19 707 22 | #define $OFF20 695 23 | #define $OFF21 394 24 | #define $OFF22 636 25 | #define $OFF23 594 26 | #define $OFF24 578 27 | #define $OFF25 636 28 | #define $OFF26 572 29 | #define $OFF27 524 30 | #define $OFF28 534 31 | #define $OFF29 688 32 | #define $OFF30 679 -------------------------------------------------------------------------------- /src/test/sglib/lib/sfz/Data/vel_16.txt: -------------------------------------------------------------------------------- 1 | #define $VEL v16 2 | 3 | #define $OFF01 1754 4 | #define $OFF02 2163 5 | #define $OFF03 1318 6 | #define $OFF04 1134 7 | #define $OFF05 699 8 | #define $OFF06 820 9 | #define $OFF07 788 10 | #define $OFF08 975 11 | #define $OFF09 917 12 | #define $OFF10 935 13 | #define $OFF11 870 14 | #define $OFF12 879 15 | #define $OFF13 839 16 | #define $OFF14 727 17 | #define $OFF15 690 18 | #define $OFF16 602 19 | #define $OFF17 664 20 | #define $OFF18 720 21 | #define $OFF19 707 22 | #define $OFF20 693 23 | #define $OFF21 1522 24 | #define $OFF22 626 25 | #define $OFF23 621 26 | #define $OFF24 620 27 | #define $OFF25 635 28 | #define $OFF26 554 29 | #define $OFF27 524 30 | #define $OFF28 771 31 | #define $OFF29 688 32 | #define $OFF30 716 -------------------------------------------------------------------------------- /src/test/sglib/lib/test_ctypes.py: -------------------------------------------------------------------------------- 1 | from sglib.lib._ctypes import * 2 | import ctypes 3 | import os 4 | import pytest 5 | 6 | 7 | def test_patch_ctypes(): 8 | try: 9 | patch_ctypes(env_vars=('SG_TEST_CTYPES',)) 10 | os.environ['SG_TEST_CTYPES'] = '/sg/test/path;/sg/test/path2/lib' 11 | ctypes.CDLL(("libportaudio.so", "libportaudio.so.2")) 12 | revert_patch_ctypes() 13 | patch_ctypes(True, env_vars=('SG_TEST_CTYPES',)) 14 | ctypes.CDLL(("libportaudio.so", "libportaudio.so.2")) 15 | finally: 16 | revert_patch_ctypes() 17 | 18 | def test_patch_ctypes_raises(): 19 | try: 20 | patch_ctypes(env_vars=('SG_TEST_CTYPES',)) 21 | os.environ['SG_TEST_CTYPES'] = '/sg/test/path;/sg/test/path2/lib' 22 | with pytest.raises(ImportError): 23 | ctypes.CDLL(("portmidiiiii.so", "portmidi.*")) 24 | finally: 25 | revert_patch_ctypes() 26 | 27 | -------------------------------------------------------------------------------- /src/test/sglib/lib/test_pidfile.py: -------------------------------------------------------------------------------- 1 | from sglib.lib.pidfile import check_pidfile, create_pidfile 2 | import os 3 | import tempfile 4 | 5 | def test_create_check_reclaimed(): 6 | with tempfile.NamedTemporaryFile() as f: 7 | pidfile = f.name 8 | pid = check_pidfile(pidfile) 9 | assert pid is None, (pid, pidfile) 10 | create_pidfile(pidfile) 11 | check_pidfile(pidfile) 12 | 13 | def test_malformed(): 14 | with tempfile.NamedTemporaryFile() as f: 15 | pidfile = f.name 16 | with open(pidfile, 'w') as f: 17 | f.write("invalidpid") 18 | pid = check_pidfile(pidfile) 19 | assert pid is None, (pid, pidfile) 20 | 21 | def test_pid_does_not_exist(): 22 | # Assumes the tests are running on a 64 bit system, and hopefully nothing 23 | # has claimed this pid 24 | pid = "2000001" 25 | with tempfile.NamedTemporaryFile() as f: 26 | pidfile = f.name 27 | with open(pidfile, 'w') as f: 28 | f.write(pid) 29 | pid = check_pidfile(pidfile) 30 | assert pid is None, (pid, pidfile) 31 | 32 | -------------------------------------------------------------------------------- /src/test/sglib/lib/test_sfz.py: -------------------------------------------------------------------------------- 1 | from sglib.lib import sfz 2 | 3 | import glob 4 | import os 5 | 6 | def test_parse(): 7 | path = os.path.join( 8 | os.path.dirname(__file__), 9 | 'sfz', 10 | '*.sfz', 11 | ) 12 | 13 | for path in glob.glob(path): 14 | f = sfz.sfz_file(path) 15 | assert f.samples, path 16 | 17 | -------------------------------------------------------------------------------- /src/test/sglib/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/models/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/models/daw/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/models/daw/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/models/daw/routing/test_midi.py: -------------------------------------------------------------------------------- 1 | from sglib.models.daw.routing import MIDIRoute, MIDIRoutes 2 | 3 | 4 | def test_to_from_str_reorder(): 5 | routes = MIDIRoutes([ 6 | MIDIRoute(1, 1, "name"), 7 | ]) 8 | _str = str(routes) 9 | from_str = MIDIRoutes.from_str(_str) 10 | assert from_str.routings[0].__dict__ == { 11 | "on": 1, 12 | "track_num": 1, 13 | "device_name": "name", 14 | }, from_str.routings[0].__dict__ 15 | from_str.reorder({1: 2}) 16 | assert from_str.routings[0].__dict__ == { 17 | "on": 1, 18 | "track_num": 2, 19 | "device_name": "name", 20 | }, from_str.routings[0].__dict__ 21 | 22 | -------------------------------------------------------------------------------- /src/test/sglib/models/daw/routing/test_track.py: -------------------------------------------------------------------------------- 1 | from sglib.models.daw.routing import TrackSend 2 | 3 | 4 | def test_lt(): 5 | ts1 = TrackSend(1, 0, 0, 0) 6 | ts2 = TrackSend(1, 2, 0, 0) 7 | assert ts1 < ts2 8 | 9 | -------------------------------------------------------------------------------- /src/test/sglib/models/plugin/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/models/plugin/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/models/plugin/test_plugin.py: -------------------------------------------------------------------------------- 1 | from sglib.models.plugin.plugin import ( 2 | Plugin, 3 | PluginCCMapping, 4 | PluginControl, 5 | PluginCustomControl, 6 | PluginMeta, 7 | ) 8 | 9 | 10 | def test_lookups_to_list(): 11 | plugin = Plugin( 12 | PluginMeta( 13 | 0, 14 | 12, 15 | 1, 16 | ), 17 | [ 18 | PluginControl(0, 0), 19 | ], 20 | [ 21 | PluginCustomControl('name', 'value'), 22 | ], 23 | [ 24 | PluginCCMapping(21, 51, 100, 200), 25 | ], 26 | ) 27 | control, custom = plugin.control_lookups() 28 | control[0].value = 120 29 | assert plugin.controls[0].value == 120, plugin.controls[0].value 30 | ccs_by_cc = plugin.ccs_by_cc() 31 | assert 21 in ccs_by_cc, ccs_by_cc 32 | ccs_by_port_num = plugin.ccs_by_port_num() 33 | assert 51 in ccs_by_port_num, ccs_by_port_num 34 | _list = list(plugin) 35 | assert len(_list) == 4, _list 36 | 37 | -------------------------------------------------------------------------------- /src/test/sglib/models/plugin/test_preset.py: -------------------------------------------------------------------------------- 1 | from sglib.models.plugin.preset import * 2 | 3 | 4 | def test_preset_bank(): 5 | PresetBank( 6 | 0, 7 | [ 8 | Preset( 9 | "test", 10 | {0: 123, 1: 45}, 11 | {"custom": "control"} 12 | ), 13 | ], 14 | ) 15 | -------------------------------------------------------------------------------- /src/test/sglib/models/plugin/test_rack.py: -------------------------------------------------------------------------------- 1 | from sglib.models.plugin.rack import PluginRack 2 | 3 | def test_init(): 4 | PluginRack( 5 | 0, 6 | "name", 7 | [1, 2, 4], 8 | ) 9 | 10 | -------------------------------------------------------------------------------- /src/test/sglib/models/stargate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stargatedaw/stargate/3b7e1d9b00128e90ed60b8964dd948a91f29e5c6/src/test/sglib/models/stargate/__init__.py -------------------------------------------------------------------------------- /src/test/sglib/models/test_project.py: -------------------------------------------------------------------------------- 1 | from sglib.models.project import GlobalProject 2 | 3 | 4 | def test_new(): 5 | GlobalProject.new() 6 | 7 | -------------------------------------------------------------------------------- /src/test/sglib/models/test_theme.py: -------------------------------------------------------------------------------- 1 | from sglib.models import theme 2 | import pytest 3 | 4 | SCALER = theme.UIScaler( 5 | 2000., 6 | 1000., 7 | 2000., 8 | 1000., 9 | ) 10 | 11 | def test_ui_scaler_pct_to_px(): 12 | for args, expected in ( 13 | ((10.,), 100), 14 | ((50., 'w'), 1000), 15 | ): 16 | result = SCALER.pct_to_px(*args) 17 | assert result == expected, (result, expected) 18 | 19 | def test_hex_color(): 20 | for color in ( 21 | '#ccc', 22 | '#cccccc', 23 | '#cccccccc', 24 | '#000000', 25 | '#FFFFFF', 26 | '#ffffff', 27 | ): 28 | theme.hex_color_assert(color) 29 | 30 | def test_hex_color_raises(): 31 | for color in ( 32 | '#33333g', 33 | '#11cccccccc', 34 | '#ZZZZZZ', 35 | ): 36 | with pytest.raises(ValueError): 37 | theme.hex_color_assert(color) 38 | 39 | -------------------------------------------------------------------------------- /src/test/sglib/test_log.py: -------------------------------------------------------------------------------- 1 | from sglib.log import LOG, setup_logging 2 | 3 | 4 | def test_setup_logging(): 5 | setup_logging() 6 | LOG.info('test_setup_logging') 7 | 8 | -------------------------------------------------------------------------------- /src/test_parse.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -xe 2 | 3 | # Test that various files can be parsed 4 | 5 | for fname in $(find files/ -name '*.yaml' -or -name '*.sgtheme'); do 6 | yq . $fname 1>/dev/null 7 | done 8 | 9 | python -c 'from sgui import main' 10 | python -c 'from sgui.widgets import *' 11 | # sglib has unit tests, no need to check that it parses 12 | -------------------------------------------------------------------------------- /src/vendor/.gitignore: -------------------------------------------------------------------------------- 1 | stargate-soundstretch 2 | -------------------------------------------------------------------------------- /src/windows/LaunchStargate.cmd: -------------------------------------------------------------------------------- 1 | if not DEFINED IS_MINIMIZED set IS_MINIMIZED=1 && start "" /min "%~dpnx0" %* && exit 2 | @"%~dp0program\stargate.exe" %* 3 | exit 4 | -------------------------------------------------------------------------------- /src/windows/msys2_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | pacman -S \ 4 | make \ 5 | mingw-w64-x86_64-clang \ 6 | mingw-w64-x86_64-ffmpeg \ 7 | mingw-w64-x86_64-fftw \ 8 | mingw-w64-x86_64-flac \ 9 | mingw-w64-x86_64-gcc \ 10 | mingw-w64-x86_64-jq \ 11 | mingw-w64-x86_64-lame \ 12 | mingw-w64-x86_64-libogg \ 13 | mingw-w64-x86_64-libsndfile \ 14 | mingw-w64-x86_64-libvorbis \ 15 | mingw-w64-x86_64-lldb \ 16 | mingw-w64-x86_64-opus \ 17 | mingw-w64-x86_64-portaudio \ 18 | mingw-w64-x86_64-portmidi \ 19 | mingw-w64-x86_64-python \ 20 | mingw-w64-x86_64-rubberband 21 | 22 | -------------------------------------------------------------------------------- /src/windows/requirements.txt: -------------------------------------------------------------------------------- 1 | Nuitka 2 | PyQt6-Qt6==6.5.2 3 | PyQt6==6.5.2 4 | PyYAML 5 | jinja2 6 | mido 7 | mutagen 8 | numpy 9 | psutil 10 | pyinstaller 11 | pymarshal 12 | wavefile 13 | --------------------------------------------------------------------------------