{"id":17289313,"url":"https://github.com/x42/phaserotate.lv2","last_synced_at":"2025-04-14T11:20:24.526Z","repository":{"id":66529756,"uuid":"398931392","full_name":"x42/phaserotate.lv2","owner":"x42","description":"Phase Rotation LV2 plugin","archived":false,"fork":false,"pushed_at":"2024-09-04T16:03:43.000Z","size":298,"stargazers_count":21,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-28T00:41:10.575Z","etag":null,"topics":["audio","lv2-plugin","phase-rotation"],"latest_commit_sha":null,"homepage":"https://x42-plugins.com/x42/x42-phaserotate","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/x42.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":"2021-08-23T00:37:21.000Z","updated_at":"2025-03-09T20:49:05.000Z","dependencies_parsed_at":"2024-11-08T04:02:12.053Z","dependency_job_id":null,"html_url":"https://github.com/x42/phaserotate.lv2","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x42%2Fphaserotate.lv2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x42%2Fphaserotate.lv2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x42%2Fphaserotate.lv2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x42%2Fphaserotate.lv2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/x42","download_url":"https://codeload.github.com/x42/phaserotate.lv2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248868767,"owners_count":21174758,"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","lv2-plugin","phase-rotation"],"created_at":"2024-10-15T10:34:24.671Z","updated_at":"2025-04-14T11:20:24.476Z","avatar_url":"https://github.com/x42.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"phaserotate.lv2\n===============\n\nphaserotate.lv2 is an audio phase rotation plugin.\n\nPhase shift vs. time shift\n--------------------------\n\nTime shifting delays a signal by an **absolute** value in seconds (or samples).\nWhile phase shift uses a **relative** value, a fraction of the wave-length.\n\nWhen phase shifting a signal, different components of the signal are delayed\ndifferently depending on their frequency.\n\nThe following figure shows an oscilloscope display of two sine-waves with different\nfrequencies that play concurrently (green and blue) and respective shifted\nversions of each signal (red, violet).\n\nThe left images shows a phase shift by 90deg (1/4 wave-length).\nNote that the time-delay differs: The sine-wave with the lower frequency (top, red)\nis delayed further compared to the higher pitched sine-wave (bottom, violet).\n\nIn the right image both sine-waves are delayed by the same time. Note how this\nresults in a different phase shift, as both waves differ in their wavelength.\n\n![](https://github.com/x42/phaserotate.lv2/blob/master/img/time-vs-phase-delay.png \"Time vs Phase delay\")\n\nDue to the periodic nature of the signal, a phase shift of +180 deg is equivalent to\na shift of -180 deg. The signal is *rotated* around the unit circle on the complex plane.\n\nPhase rotation\n--------------\n\nThe interesting aspect is that phase rotation does not alter the sound of the signal\nnor the loudness. However changing the phase vs. frequency relationship between lower\nand upper harmonics changes the waveform and can affect where the digital peak occurs.\n\nFor this reason phase rotation is commonly used by radio stations to reduce\nthe signal peak and make the signal more symmetrical. Phase rotation circuits are\nalso used during mastering to increase headroom. This allows to increase gain and\nfurther compress the signal.\n\nCaveat\n------\n\nBy nature of the process phase-rotation affects transient response. Similar to a\nlinear-phase EQ, there is also pre-ringing. Use this effect with caution because\nyou are about to become a casualty in the *loudness-war* against quality.\nYou have been warned.\n\nCLI\n---\n\nIn addition to the plugin, there is a command-line tool that can analyze an\naudio file, and find the phase shift which will result in a minimum peak.\n\nThis is for offline analysis and offline processing only, and not installed\nby default.\n\nInstall\n-------\n\nCompiling phaserotate.lv2 requires the LV2 SDK, fftw, gnu-make, and a c-compiler.\n\n```bash\ngit clone https://github.com/x42/phaserotate.lv2.git\ncd phaserotate.lv2\nmake\n\nln -s `pwd`/build ~/.lv2/phaserotate.lv2\n#sudo make install PREFIX=/usr\n\ncd cli\nmake\n#sudo make install PREFIX=/usr\n./phase-rotate --help\n```\n\nNote to packagers: The Makefile honors `PREFIX` and `DESTDIR` variables as well\nas `CFLAGS`, `LDFLAGS` and `OPTIMIZATIONS` (additions to `CFLAGS`), also\nsee the first 10 lines of the Makefile.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx42%2Fphaserotate.lv2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fx42%2Fphaserotate.lv2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx42%2Fphaserotate.lv2/lists"}