{"id":15692310,"url":"https://github.com/olliv/diapro","last_synced_at":"2025-05-08T02:32:37.709Z","repository":{"id":145290358,"uuid":"350145723","full_name":"OlliV/DiaPro","owner":"OlliV","description":"Dialog/Vocal Processor VST","archived":false,"fork":false,"pushed_at":"2021-11-17T12:32:33.000Z","size":555,"stargazers_count":11,"open_issues_count":6,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-15T00:51:16.600Z","etag":null,"topics":["compressor","de-esser","exciter","vst3"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OlliV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-03-21T23:23:52.000Z","updated_at":"2025-01-02T02:57:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"aa9422d9-8e4f-4660-990a-98beed46814b","html_url":"https://github.com/OlliV/DiaPro","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlliV%2FDiaPro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlliV%2FDiaPro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlliV%2FDiaPro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OlliV%2FDiaPro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OlliV","download_url":"https://codeload.github.com/OlliV/DiaPro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252986979,"owners_count":21836271,"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":["compressor","de-esser","exciter","vst3"],"created_at":"2024-10-03T18:31:19.634Z","updated_at":"2025-05-08T02:32:37.681Z","avatar_url":"https://github.com/OlliV.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"DiaPro\n======\n\nDiaPro is VST a dialog/vocal processor supporting VST3 API. While the effect is\nmostly designed dialog and vocals in mind, there is absolutely no reason why it\ncouldn't be used for any purpose.\n\nEach unit of the processor is documented separately and at the beginning\nof each section there are some presets given as starting point. These\nvalues are determined by trial and error, and by stealing from other\nsources such as\n[Musician on a mission](https://www.musicianonamission.com/).\n\n![Screenshot showing the plugin](doc/screenshot.jpeg?raw=true \"DiaPro\")\n\nLicense\n-------\n\nSee [LICENSE](LICENSE).\n\n\nParameters\n----------\n\n### De-esser\n\nThe de-esser unit is intended to attenuate excess sibilant consonants in a\ndialog or vocals.\n\n```\n        +-----------+     +------------+        *\n        |           |----\u003e| Compressor |----\u003e*     *\nx(n) --\u003e| Crossover |     +------------+    *  SUM  *---\u003e y(n)\n        |           |-----------------------\u003e*     *\n        +-----------+                           *\n``` \n\n**Presets for lazy people**\n\n| Use case    | Threshold | Frequency [Hz] | Drive | \n|-------------|-----------|----------------|-------|\n| Female      |           |           7-8k |       |\n| Male        |           |           5-6k |       |\n\n**Enable**\n\nEnables the de-esser unit. \n\n**Threshold [dB]**\n\nDetermines the signal levels when the de-esser starts working.\n\n**Frequency [Hz]**\n\nThe center frequency of sibilances to be suppressed.\n\n**Drive [dB]**\n\nThe gain applied to the sibilances.\n\n### Compressor\n\nThe compressor unit attenuates loud sounds in the input signal and it's purpose\nin this plugin is to improve the clarity, readability and consistence of the\nspeaker's or singer's voice.\n\n```\n                                                               | \\\n                                    +-------------------------\u003e|1-m\u003e----\\     *\n                                    |                          | /        \u003e*     *\n                                    |   | \\        | \\          |         *  SUM  *---\u003e y(n)\n          +----------------------+  |   |    \\     |   \\       | \\        \u003e*     *\nx(n) -+--\u003e|         Z^-D         |--+--\u003e| DCA \u003e---\u003e|    \u003e-----\u003e| m \u003e----/     *\n      |   +----------------------+      |    /     |   /       | /  \n      |              |                  | /        | /          |\n      |          look-ahead              |          |           |\n      |                                  |          |           |\n      |   +-------+      +-------+       |          |           |\n      |   |  RMS  |      | Gain  |       |          |           |\n      +--\u003e|  Det  |-----\u003e| Calc  |-------+          |           |\n          | =det  |      | =gr   |                  |           |\n          +-------+      +-------+                  |           |\n            |   |          | | |                    |           |\n           att rel         t k n                 makeup        mix\n                           h n :                   \n                           r e 1\n```\n\n**Presets for lazy people**\n\n| Use case    | Ratio     | Knee | Attack [ms] | Release [ms] | Look-Ahead | Makeup | Mix |\n|-------------|-----------|------|-------------|--------------|------------|--------|-----|\n| Dialog      | 1.5 - 2.0 | 1.00 |      0 - 10 |     80 - 150 |      1 - 5 |    2.0 | 1.0 |\n| Vocals      |      1.5  | 0.95 |      2 - 10 |           40 |        \u003e=1 |    2.0 | 1.0 |\n| Instruments |           |      |          40 |           60 |          0 |        |     |\n| Drums       |           |    0 |             |              |          0 |        | 0.5 |\n\n**Enable**\n\nEnables the compressor unit.\n\n**Stereo Link**\n\nCompute the gain reduction from a mix of the left and right channels and then\ncontrol the gain of both channels using the same gain reduction value. The\ndefault is to compute the gain reduction separately for each channel.\n\n**Threshold [dB]**\n\nDetermines the level that the compressor kicks in. A lower threshold, compresses\nthe audio more.\n\n**Ratio [n:1]**\n\nThe compression ration determines how much the volume is reduced. The ratio of n:1 \nmeans that for every dB that goes above the threshold a 1:n of the dB comes out\nfrom the compressor.\n\n**Knee**\n\nIncreasing the knee parameter widens the soft transition range from 1:1 gain to\n1:n gain reduction when the input audio is close to the threshold. 0 means there\nis no smoothening before the compression kicks in and 1 means that it's set to\nthe widest setting. Generally making the knee a bit softer makes the compression\nsound more subtle.\n\n**Attack time [ms]**\n\nDetermines how fast the compressor reacts to a rising signal level.\n\n**Release time [ms]**\n\nDetermines how fast the compressor backs off when the signal level goes down.\n\n**Makup gain [ms]**\n\nIncreases the output level to compensate the overall signal level reduction.\nTypically makeup gain should be adjust the so that the output level is\napproximately the same as the input level.\n\n**Look-Ahead [ms]**\n\nThe compressor look-ahead delay line length in ms. The delay line allows to\ncompensate the lag of the detector and thus adjusting the gain reduction of the\noutput at the right time and not just after the signal already has hit the\nthreshold.\n\n**Mix [1:m]**\n\nAlso known as dry/wet control, allows mixing some of the original audio to the\noutput.\n\n### Exciter\n\nThe exciter unit amplifies the higher frequencies of the incoming audio and\nadds harmonics to it by soft-clipping the signal with a waveshaper function.\nThe soft-clipped signal is finally combined with the original audio.\n\n```\n                                                             | \\\nx(n) -+-----------------------------------------------------\u003e|1-n\u003e----\\     *\n      |                                                      | /        \u003e*     *\n      |                                                       |         *  SUM  *---\u003e y(n)\n      | | \\    +-----+    +-----+  +---+  +-----+  +-----+   | \\        \u003e*     *\n      +-|   \u003e-\u003e| HPF |-\u003e-\u003e| 4/\\ |-\u003e| S |-\u003e| LPF |-\u003e| 4\\/ |--\u003e| n \u003e----/     *\n        | /    +-----+    +-----+  +---+  +-----+  +-----+   | /\n         |        |                  |                        |\n         |        |                  |                        |\n        drive    fc              saturation                  mix\n```\n\n**Presets for lazy people**\n\n| Use case    | Drive | Freq [Hz] | Saturation |    Mix    |\n|-------------|-------|-----------|------------|-----------|\n| Dialog      |     6 |      2-5k |       3.20 | 0.2 - 0.5 |\n\n**Enable**\n\nEnables the exciter unit.\n\n**Drive [dB]**\n\nGain before the high-pass filter, but it doesn't affect the dry signal used\nfor the *blend* at the end of the signal chain.\n\n**Freq [Hz]**\n\nHigh-pass cutoff frequency before the waveshaper.\n\n**Saturation [dB]**\n\nAmplifies the signal after the high pass filter and just before the signal is\nfeeded into the waveshaper.\n\n**Blend [1:n]**\n\nThe function of the blend knob is the same as mix in the compressor. However,\nin the case of an exciter it should be kept at minimum, or otherwise only\nthe frequencies higher than *fc* can be heard in the output.\n\n### Output\n\n**Gain**\n\nAllows adding a final gain to the output.\n\n### MIDI Control\n\nIt's possible to control the numeric parameters of this effect with\nMIDI Control Commands but it's not possible to toggle the switches\nat the moment. All commands must be sent to the MIDI channel 2.\n\nThe MIDI control number mapping is as follows:\n\n| Parameters              | MIDI Control Name               | Control no |\n|-------------------------|---------------------------------|------------|\n| De-esser Threshold      | General Purpose Controller #1   |         16 |\n| De-esser Freq           | Effect Control 1                |         12 |\n| De-esser Drive          | Effect Control 2                |         13 |\n| Compressor Threshold    | General Purpose Controller #2   |         17 |\n| Compressor Attack time  | Attack Time                     |         73 |\n| Compressor Release time | Release Time                    |         72 |\n| Compressor Ratio        | General Purpose Controller #3   |         18 |\n| Compressor Knee         | General Purpose Controller #4   |         19 |\n| Compressor Makeup       | General Purpose Controller #5   |         80 |\n| Compressor Mix          | Pan                             |         10 |\n| Compressor Lookahead    | General Purpose Controller #6   |         81 |\n| Exciter Drive           | Expression                      |         11 |\n| Exciter fc              | Filter Cutoff                   |         71 |\n| Exciter Saturation      | General Purpose Controller #7   |         82 |\n| Exciter Blend           | Balance                         |          8 |\n| Gain                    | Channel Volume                  |          7 |\n\nBuilding\n--------\n\n### Prerequisites\n\n**VST3 SDK**\n\nDownload [VST 3 Audio Plug-Ins SDK](https://www.steinberg.net/en/company/developers.html)\nand extract it anywhere you wish, but remember that the directory you choose\nwill be the \"installation path\" for the SDK.\n\n**fftw**\n\n`fftw` is required by the exciter unit of this plugin effect.\n\nOn MacOS you can download `fftw` using the script in the `fftw` directory. This\nwill download and extract `fftw` for both x86-64 and ARM64 targets.\n\n```\ncd fftw\n./runme.sh\n```\n\n### Running the build\n\nNow you are ready to build the actual plugin.\n\n```\nmkdir build\ncd build\ncmake -DSMTG_RUN_VST_VALIDATOR=OFF -DSMTG_ADD_VSTGUI=ON -G\"Xcode\" -DCMAKE_BUILD_TYPE=Debug ..\ncmake --build .\n```\n\nor make a release build by running:\n\n```\nmkdir build\ncd build\ncmake -DSMTG_RUN_VST_VALIDATOR=OFF -DSMTG_ADD_VSTGUI=ON -G\"Xcode\" -DCMAKE_BUILD_TYPE=Release ..\ncmake --build . --config Release\n```\n\nIf everything went fine the build script should make a symlink in the system VST\nplugin path, pointing to the build result of the build. Meaning that you can now\nstart your DAW/VST host and it should be able to discover the plugin. The\nresulting bundle should work on both x86-64 and ARM64 (M1) Macs.\n\n#### Code signing\n\nIf you want to sign the binary for distribution the easiest way to sign and\nstaple the VST3 plugin is shown here.\n\nFirst you should create an Application Specific Password for the project as\nexplained [here](https://support.apple.com/en-us/HT204397).\nThen run the following command to store the credentials:\n\n```\nxcrun notarytool store-credentials --apple-id \"youremail\" --team-id \"team-id\"\n```\n\nThis step needs to be done only once.\n\nNext you need to sign the VST3 plugin:\n\n```\ncodesign --force -s \"Developer ID Application\" VST3/Release/DiaPro.vst3\n```\n\nThen zip the plugin and run `notarytool` for the zip file:\n\n```\n/usr/bin/ditto -c -k --keepParent VST3/Release/DiaPro.vst3 DiaPro.zip\nxcrun notarytool submit DiaPro.zip --keychain-profile \"DiaPro\" --wait\n```\n\nIf that step passed then you can staple the plugin:\n\n```\n xcrun stapler staple VST3/Release/DiaPro.vst3\n```\n\nand remove the intermediate zip:\n\n```\nrm DiaPro.zip\n```\n\n\n### Troubleshooting\n\nSome pointers:\n\n**I can't see the plugin in my DAW**\n\nSome DAWs don't look from all possible \"legal\" VST paths nor it's configurable\nYou might need to copy the symlink or the bundle/binary to a path that your DAW\nsupports.\n\nEditing the Interface\n---------------------\n\n```\n../../VST_SDK/VST3_SDK/build/bin/Debug/editorhost.app/Contents/MacOS/editorhost VST3/Debug/DiaPro.vst3\n```\n\nFinally *Save As* on top of `resource/editor.uidesc`. (*Save* should work too,\non the latest SDK version).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folliv%2Fdiapro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folliv%2Fdiapro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folliv%2Fdiapro/lists"}