Tdpsola: an implementation of the tdpsola algorithm =================================================== TD-PSOLA (Time-Domain Pitch-Synchronous Overlap and Add) is an algorithm that allows to modify the pitch and the speed of a sound independently of each other. The algorithm ------------- The idea behind the algorithm on itself is quite simple, but hard to explain. I have found [this documentation](http://www.speech.zone/td-psola-the-hard-way/) the clearest. Advantages of TD-PSOLA: * Preserves the formants, i.e. if you increase the pitch of a human voice, it doesn't sound like the person has been breathing from a helium balloon * Performant algorithm for modest pitch/speed changes Disadvantages of TD-PSOLA: * Not robust against noise, only suitable for voiced sounds * Requires a-priori knowledge of the fundamental frequency of the source sound The implementation ------------------ This is an implementation in the Rust programming language. Advantages of this implementation: * `0` samples delay * separate analysis and synthesis, allowing you to re-use the analysis part * speed and pitch can be manipulated independently at any time * many tests * implemented in a memory-safe programming language, without "unsafe" features Disadvantages of this implementation: * The algorithm is extra complicated in order to guarantee `0` samples delay. Examples -------- A simple example can be found in the documentation or in the `src/lib.rs` file. A more worked-out example can be found in the `examples` folder in the source code. Planned features ---------------- * suitable for real-time analysis and synthesis * block-processing for extra speed (can currently only be used sample per sample) Contributing ------------ We welcome contributions, both in the form of issues and in the form of pull requests. Before opening a pull request, please open an issue first so that you know whether a subsequent pull request would likely be approved. If you don’t have a Codeberg account, alternatively, you can contribute via e-mail (an email address is in the Cargo.toml file). Just creating a Codeberg account is probably the easiest. Unless explicitly stated otherwise, you agree that your contributions are licensed as described below. License ------- This is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. The full license text can be found in the file [LICENSE-AGPL-3.0.md](LICENSE-AGPL-3.0.md) that should be distributed with this source code. If it is not there, see .