{"id":28901493,"url":"https://github.com/jurihock/robotone","last_synced_at":"2025-07-18T17:33:21.432Z","repository":{"id":295501475,"uuid":"990256206","full_name":"jurihock/robotone","owner":"jurihock","description":"MIDI-controlled polyphonic vocal harmonizer","archived":false,"fork":false,"pushed_at":"2025-06-16T17:32:19.000Z","size":100,"stargazers_count":7,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-16T17:37:48.584Z","etag":null,"topics":["au","audio","audio-effects","audio-plugins","dafx","dsp","effects","fourier","harmonization","juce","juce-plugins","lv2","pitch-shifter","pitch-shifting","plugin","sdft","sliding-dft","stft","voice","vst"],"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/jurihock.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-25T20:12:44.000Z","updated_at":"2025-06-16T17:32:23.000Z","dependencies_parsed_at":"2025-05-25T22:31:41.567Z","dependency_job_id":"a9cfaf4a-7fb0-4b8b-b08b-12e722965e45","html_url":"https://github.com/jurihock/robotone","commit_stats":null,"previous_names":["jurihock/robotone"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jurihock/robotone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jurihock%2Frobotone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jurihock%2Frobotone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jurihock%2Frobotone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jurihock%2Frobotone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jurihock","download_url":"https://codeload.github.com/jurihock/robotone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jurihock%2Frobotone/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265801934,"owners_count":23830504,"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":["au","audio","audio-effects","audio-plugins","dafx","dsp","effects","fourier","harmonization","juce","juce-plugins","lv2","pitch-shifter","pitch-shifting","plugin","sdft","sliding-dft","stft","voice","vst"],"created_at":"2025-06-21T10:09:40.612Z","updated_at":"2025-07-18T17:33:21.420Z","avatar_url":"https://github.com/jurihock.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Robotone\n\n![language](https://img.shields.io/badge/plugin-AU%20LV2%20VST3-blue)\n![license](https://img.shields.io/github/license/jurihock/robotone?color=blue)\n![build](https://img.shields.io/github/actions/workflow/status/jurihock/robotone/build.yml?branch=main\u0026label=build)\n![tag](https://img.shields.io/github/v/tag/jurihock/robotone?color=gold)\n\nThe experimental *Robotone* audio effect plugin applies a fixed pitch onto a sound controlled by a [MIDI](https://newt.phys.unsw.edu.au/jw/notes.html) note event. Originally this technique puts zero phase values on every [STFT](https://en.wikipedia.org/wiki/Short-time_Fourier_transform) frame before reconstruction [[1](#1),[2](#2),[3](#3)]. However, the phase zeroing effect is emulated in *Robotone* using the [Sliding DFT](https://www.dsprelated.com/showarticle/1396.php) as implemented in [SDFT](https://github.com/jurihock/sdft). This enables polyphonic usage in a single processing step.\n\nThe basic idea behind this effect is to reinterpret the frequency axis by replacing the DFT bin frequencies with overtone series as played on a MIDI keyboard. When applied to the vocal input, this particular modification produces a robotic sound at a fixed pitch. Additional phase vocoder based corrections result in pitch shifting. Unfortunately, the pitch shifted output does not preserve the formants. This issue might be resolved in a future version.\n\nHowever both effect variants can be used to add a harmonic touch to vocals in a musical way. I suppose so at least...\n\n## References\n\n1. \u003cspan id=\"1\"\u003eVincent Verfaille, Daniel Arfib (2001). Adaptive Digital Audio Effects. https://dafx.de/paper-archive/2001/papers/verfaille_a.pdf\u003c/span\u003e\n\n2. \u003cspan id=\"2\"\u003eVincent Verfaille, Udo Zölzer, Daniel Arfib (2006). Adaptive Digital Audio Effects. https://hal.science/hal-00095922/document\u003c/span\u003e\n\n3. \u003cspan id=\"3\"\u003eUdo Zölzer (2011). Digital Audio Effects. https://www.dafx.de/DAFX_Book_Page_2nd_edition/index.html\u003c/span\u003e\n\n## License\n\n*Robotone* is licensed under the terms of the GPL license.\nFor details please refer to the accompanying [LICENSE](LICENSE) file distributed with *Robotone*.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjurihock%2Frobotone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjurihock%2Frobotone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjurihock%2Frobotone/lists"}