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 several interactive web apps (see screenshots above). The synthesis functionality is intended for creating human and animal non-speech sounds with a limited number of acoustically meaningful parameters such as intensity, intonation, aspects of voice quality, etc. 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 Responses are often flagged as spam by automatic filters, so please check your spam folder.
Essential links
Online apps
Feb 2025: online versions of pitch_app and formant_app are temporarily shut down because of server overload, please install soundgen and run the apps locally!
- 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 (Firefox or Chrome), 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")
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!