Sound synthesis
Acoustic analysis
Mission
Soundgen is an open-source toolbox for voice synthesis, manipulation, and analysis. It is published on CRAN as a library (package) for the R programming language and comes with two interactive apps (see screenshots above) for pitch tracking and voice synthesis. The synthesis functionality is intended for creating human and animal non-speech sounds in a user-friendly way, with a limited number of acoustically meaningful parameters. The functions for acoustic analysis and manipulation are more general and can be applied to speech as well as non-biological sounds.
Bug reports, criticisms and suggestions are all warmly welcome! Soundgen is written and maintained by Andrey Anikin. You can reach me at rty.anik / at / rambler.ru
Essential links
Online apps
- soundgen_app for sound synthesis (limited server time): the same as soundgen_app(), but it runs online in a browser, so you don't have to install anything
- pitch_app for manually corrected pitch tracking
- formant_app for manually corrected formant measurement
These apps run online in a browser (ideally Firefox), so you don't have to install anything or run R - good for a quick try. However, the server time is very limited, so please install the package and run the app locally for extended use.
Source code
- Released R package on CRAN
To install from R: install.packages("soundgen")
- Developmental version and source code on github
Documentation
Known bugs and issues
- soundgen(): the amount of high-frequency energy in the spectrum (slightly) varies depending on the sampling rate. The reason is that the number of extra formants added on top of the user-specified ones depends on the sampling rate (Nyquist frequency). Ideally, a generalized function summarizing the theoretical contribution of all formants above Nyquist should be used instead. If anyone knows how to do this, I'll greatly appreciate a tip!
- soundgen(): careful with the "glottis" argument! It falls back onto cycle-by-cycle synthesis, but these individual "glottal cycles" are currently not glued together very well, which produces spectral artifacts.
- Be careful with the function getLoudness(): it is experimental and not yet properly validated!
Noticed more bugs? Need some functionality that is not available at present? Don't hesitate to send me an email!