{"id":13783475,"url":"https://github.com/sophiapoirier/destroyfx","last_synced_at":"2025-05-11T19:30:53.367Z","repository":{"id":40694481,"uuid":"295217582","full_name":"sophiapoirier/destroyfx","owner":"sophiapoirier","description":"Destroy FX is a music software project of Sophia Poirier and Tom Murphy 7.  Mostly we make audio effect plugins that destroy your sound.  Supported plugin APIs include Audio Unit and VST.  Includes the DfxPlugin and DFX GUI frameworks.","archived":false,"fork":false,"pushed_at":"2025-03-26T14:59:21.000Z","size":15589,"stargazers_count":223,"open_issues_count":7,"forks_count":8,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-03-26T15:47:32.623Z","etag":null,"topics":["audio","audiounit","dsp","noise","vst"],"latest_commit_sha":null,"homepage":"http://destroyfx.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sophiapoirier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-13T18:59:07.000Z","updated_at":"2025-03-26T14:59:26.000Z","dependencies_parsed_at":"2024-03-30T18:33:39.692Z","dependency_job_id":"d4bbcebd-4517-456f-9484-ae954d54f6d6","html_url":"https://github.com/sophiapoirier/destroyfx","commit_stats":null,"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sophiapoirier%2Fdestroyfx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sophiapoirier%2Fdestroyfx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sophiapoirier%2Fdestroyfx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sophiapoirier%2Fdestroyfx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sophiapoirier","download_url":"https://codeload.github.com/sophiapoirier/destroyfx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253620969,"owners_count":21937451,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audiounit","dsp","noise","vst"],"created_at":"2024-08-03T19:00:22.303Z","updated_at":"2025-05-11T19:30:52.163Z","avatar_url":"https://github.com/sophiapoirier.png","language":"C++","funding_links":[],"categories":["Miscellaneous open source audio code/projects"],"sub_categories":[],"readme":"# Super Destroy FX Plugin Sources\n\nThese are some of the plugins that are part of the Destroy FX plugin\npack. We support two plugin formats: VST and Audio Unit (AU).\nVST versions should be (nearly) source-portable to any platform which\nsupports that. Audio Unit is a format exclusive to macOS and iOS.\nSome advanced features may not work on all platforms or in all hosts.\n\nC++ is currently the only appropriate language for creating audio\nplugins, so all of these are written in C++. You will need a C++\ncompiler for your platform in order to compile them. You'll also need\nan appropriate version of the VST SDK (for VST) or Audio Unit SDK (for\nAudio Unit), and the VSTGUI library. Right now, this means that you'll\nbe able to easily compile Xcode for Mac, and that it may be more\ndifficult for any other platform. Warning: Our source code repository\noften drifts out of date so that builds do not work; sorry about this.\nTom doesn't use Visual Studio anymore and instead compiles with the\nfree mingw toolchain (GCC).\n\nThese plugins are Copyright (c) Tom Murphy 7 and Sophia Poirier. You\ncan use them in your music however you like, without royalties. You\ncan also modify them to your liking. However, if you distribute them\n(or derivative/modified versions of them) then you must also\ndistribute the source package in order to be in compliance with the\nlicense (see the file COPYING for full license terms).\n\nThis software comes with no warranty (see the file COPYING). In fact,\nit is likely that some of these unusual effects could crash hosts (by\nsending out-of-range samples or taking too much time to process), so\nyou should be careful to save your work when using them in important\nsongs. Tom uses Cakewalk on the PC, and Sophia uses Logic on the Mac,\nso the plugins are likely work properly in those programs, at least.\n\nPre-packaged versions of (some of) these with fancy GUIs are available\nat the Super Destroy FX website:\n\n[http://destroyfx.org](http://destroyfx.org)\n\nIf you are simply interested in making music, you should check there\nfirst. If instead you want to get your feet wet making your own effect\nplugins, this source code might be a good place to start. (You can\nalso see and play with our effects before they're finished!)\n\n---\n\nHere are descriptions of each of the plugins included. First, we have\nour \"finished\" plugins; these have been released, have fancy GUIs, and\nare pretty thoroughly tested:\n\n### transverb/\n\nSort of like a tape-loop with independently-moving read/write heads.\nCreates reverb-like effects with more variation over time.\nEnable Tomsound for extra glitches!\n\n### scrubby/\n\nZips around the audio buffer like a DJ (or robot DJ) scratching a\nrecord. Has the ability to constrain the scratch speeds using a\nMIDI keyboard, among other advanced features.\n\n### bufferoverride/\n\nReads data into a buffer that might be smaller or larger than the\nhost buffer size, and then keeps repeating that buffer over and over.\nGives a sort of robotic or stuttering effect to your sound, though\nmany twisted uses are possible.\n\n### skidder/\n\nTurns your sound on and off at regular or random intervals.\nPractically every facet is controllable by a parameter. Skidder also\nfeatures the possibility for extreme settings and MIDI control.\n\n### geometer/\n\nA laboratory for waveform geometry. All sorts of weird effects are\npossible with this thing, and sports a neat visual display of what's\nhappening to your sound.\n\n### rezsynth/\n\nAllows you to \"play\" resonant bandpass filters with MIDI notes.\n\n### rmsbuddy/\n\nRMS and peak audio monitoring utility.\n\n### monomaker/\n\nMonomaker is just a simple stereo utility.  It can do panning and\nmerge a stereo signal to mono.\n\n### midigater/\n\nA MIDI note controlled audio gate.\n\n### eqsync/\n\nTotal novelty effect that randomly retunes biquad filter coefficents\nat regular intervals synchronized to tempo.\n\n### polarizer/\n\nInverts the polarity of every Nth audio sample, resulting in a\ncrispy digital noisy effect.\n\n### freeverb/\n\nFreeverb is a public domain reverb algorithm by Jezar at Dreampoint.\nThere are several VST implementations of it, but no AU, so we ported\nit, and have made some improvements to it too.\n\n### fake-app/\n\nA fake macOS application that associates icons with Audio Units and\ntheir preset files.  Launching the app does nothing.\n\n### max-patches/\n\nVery very ancient [Max](https://cycling74.com) patches that we once\nupon a time exported and released as utility applications.\n\n### turntablist/\n\nTurntablist is a record scratching emulation instrument by\n[bioroid media development](http://www.bioroid.com/vst/),\nbut has since been abondaned. The author released the source code\nafter abandoning it, and we ported it to Audio Unit, and made\nseveral improvements along the way. We no longer maintain it.\n\n---\n\nThese plugins are somewhat mature, but are lacking GUIs and thorough\ntesting:\n\n### brokenfft/\n\nOne of Tom's favorite plugins; this converts to the frequency domain\nusing the FFT, and then does a number of unusual effects. It has an\nalmost limitless variety of sounds that will come out of it...\n\n\nThese plugins are experiments and may or may not work:\n\n### exemplar/\n\nTries to recreate your sound from a training set using\nnearest-neighbor techniques. I thought this was going to be awesome\nbut initial experiments were disappointing. Should be revisited now\nthat I know more about machine learning.\n\n### vardelay/\n\nAllows for short delays of each sample, but the amount of delay is\ndependent on the amplitude of the sample. (Several bands are\nindividually adjustable).\n\n### trans/\n\nConverts to and from other domains (sin, tan, derivative, e^x, FFT);\nthe idea is that you run this and its inverse with some other plugins\nin-between.\n\n### slowft/\n\nThe \"slow fourier transform.\" Not sure what this is about yet. ;)\n\n### firefly/\n\nThe idea was to provide a general-purpose finite impulse response\nfilter with a drawable model. Didn't get very far, except drawing a\nplaceholder GUI.\n\nThese plugins are not in development, perhaps because their\nfunctionality has been subsumed by another plugin:\n\n### decimate/\n\nReduces bit depth and sample rate in order to produce artifacting.\nExtreme settings. Also includes a bonus \"DESTROY\" effect. Geometer\nis much more flexible and beautiful than this oldie.\n\n### fonttest/\n\nnon-audio plugin for testing rendering of our custom fonts\n\n### intercom/\n\nAdds noise to your sound based on its RMS volume; can also swap\nsamples around. Again, Geometer probably has more flexible effects\nthat are similar in sound.\n\n### thrush/\n\nmodulatable and channel-splittable phase shifter (a collaboration\nwith [Keith Fullerton Whitman](https://keithfullertonwhitman.com))\n\n---\n\nIn the source package, each plugin has a corresponding directory, as\nwell as a win32 subdirectory containing Windows build files. In \nthese directories, a file called \"makefile\" can be used from the \ncommand line to build the plugin.\n\nMost of these plugins have mac subdirectories with stuff for \nbuilding Audio Unit versions of our plugins.  The plugin.xcodeproj \n\"files\" (well, they are bundles, thus technically directories \nappearing as files) are Xcode projects.  The plugin.exp files are \nthe entry point symbol files.  The InfoPlist.strings files are \nlocalized values for some Info.plist values and are located in \n\u003clanguage-code\u003e.lproj subdirectories accordingly.\n\nSome of the external libraries that we use are included in our\nrepository as submodules, and you will need to populate these any\ntime you clone our repository or fetch/pull and see updates made to\nthe submodules. Do so by running the following command:\n`git submodule update --init --recursive`\n\nIn order to build Audio Units, you need a Mac with Xcode installed. \nXcode is available in the Mac App Store.\n\nfor building 64-bit Windows DLLs:  \nTom is using mingw-x86\\_64 now, which is GCC targeting windows 64.\nIt's free software. I use it installed through cygwin (64), which is a\ncompatibility shim between unix and windows APIs. I recommend against\nthe cygwin compilers (e.g. \"g++\") unless you're trying to compile\nsoftware written for unix (Destroy FX plugins are not). mingw-x86\\_64\ninstead uses the native windows api (`#include \"windows.h\"` etc.) and\ngenerates native windows binaries that don't depend on cygwin. Cygwin\nhere just helps us install and update mingw-x86\\_64, and also provides\nuseful unix tools like bash, make, etc.\n\nFrom bash, you should be able to just run `make` from e.g.\ntransverb/win32 (or I run `make -j 30` to run 30 parallel processes)\nand produce dfx-transverb-64.dll. Because the build process has a\nbunch of `#defines`, you generally want to `make clean` before\nbuilding a plugin; otherwise you might end up combining something\nlike \"dfx-plugin.o built with Transverb flags like `HAS_GUI`\" with\n\"some-plugin.o that doesn't define `HAS_GUI`\" and get bad results.\n\nIt may also be possible to cross-compile windows DLLs from other\nplatforms. I think it is possible to install mingw on say, linux, and\nthe build process shouldn't need to run anything other than the\ncompiler, resource compiler, and linker. I haven't tried it, though.\n\nWe are using C++17 features in DFX now, so you might need a pretty\nnew compiler. This is known to work:\n\n\t$ x86_64-w64-mingw32-g++ --version\n\tx86_64-w64-mingw32-g++ (GCC) 10.2.0\n\n\n---\n\nHere is a description of each of the remaining directories in the\nsource distribution:\n\n### dfx-library/\n\nThis is the library of common code that we use as a shortcut for\ncreating new plugins and to generalize away all of the differences\nbetween the various plugin formats that we support.\n\n### dfxgui/\n\nThis is the library of common code that we use as a shortcut for\ncreating the GUIs for our plugins, with a lot of common features\nincluded and hooks into the special DFX sauces. The library leverages\nVSTGUI as a generalized foundation for platform-specific GUI APIs.\n\n### docs/\n\nThe documentation for users.  We include these in the binary\ndistributions of our plugins.\n\n### fonts/\n\nSome of our GUIs render text with custom fonts. Tom made these!  \n[Divide By Zero Fonts](http://fonts.tom7.com)\n\n### scripts/\n\nSome scripts that we utilize during development.\n\n### site/\n\nThe files that comprise our website.\n\n### stub-dfxplugin/\n\nSources for starting a new plugin using our DfxPlugin framework.\n\n### windowingstub/\n\nSources for starting a new plugin with buffering and windowing. This\nis important when discontinuities at the beginning and end of\nprocessing buffers translate into audible artifacts in the output.\n(For example, when doing FFT.) This adds certain overhead and extra\ncomplexity, and requires running twice as much effect processing.\nIn addition, some effects do not fit the model well (a memory-driven\ndelay plugin, for instance). If your plugin does not need this, use\nstub-plugin below instead.\n\n### AudioUnitSDK/\n\nApple's Audio Unit SDK, required for building the AU versions of our\nplugins.\n\n### vstgui/\n\nSteinberg's cross-platform and cross-plugin-format (despite the VST\nin its name) library for GUI creation.  DFX GUI is based atop this.\n\n### vstsdk/\n\nSDK from Steinberg for creating VST plugins. Required to build VST\nversions of the DFX plugins. There is no code in this directory;\nyou should get the headers and class stubs from\n[Steinberg's website](https://www.steinberg.net).\n\n### fftw/\n\n\"Fastest Fourier Transform in the West\", which actually comes from\nthe East at MIT. A very fast FFT routine (GPL).\n\n### fft-lib/\n\nFFT Library from Don Cross. Public Domain.\n\n### ann/\n\nThe \"Approximate Nearest Neighbors\" library, which can be used to do\npretty efficient nearest neighbor calculations as long as the set of\npoints is preprocessed (GPL).\n\n### notes/\n\nsecret diaries\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsophiapoirier%2Fdestroyfx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsophiapoirier%2Fdestroyfx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsophiapoirier%2Fdestroyfx/lists"}