ODETE.SYS — Formant Voice & Singing Lab

Odete is a playful electronic mouth: a retro laboratory that turns text and musical notes into a synthetic voice. Its sound is built with formant synthesis, inspired by the early days of computer speech and singing.

From a buzz to a voice

The engine follows a source–filter model. A train of synthetic glottal pulses provides the voiced excitation, while noise contributes breath and friction to consonants. The pulse repetition rate sets the fundamental frequency, F0: the pitch you hear. The signal then passes through three resonant filters that approximate the vocal tract. Their resonances, called formants (F1, F2 and F3), shape the vowel. Change the formants while keeping F0 fixed, and the same note can sound like “ah”, “ee” or “oo”.

PULSES + NOISEF1 · F2 · F3VOICE

Making the mouth sing

Text is mapped to a sequence of speech sounds. In singing mode, each syllable is paired with a note and a duration: the note sets F0, and the tempo turns beats into seconds. Consonants stay short while vowels carry the sustained notes. Smooth transitions between sounds help join the phrase. You can edit syllables, pronunciation, notes and rhythm, import a monophonic MIDI melody, and export the result as WAV audio or MIDI note data.

Synthesis runs locally in your browser. The phonetic rules are deliberately simple, so pronunciation remains experimental. Explore the source–filter idea in the Praat documentation.

ODETE.SYS OPEN THE VOICE LAB

Multi-Timbre Synthesizer

This synthesizer was built as a Program Exercise (EP) to Computer Music class, from the Institute of Mathematics and Statistics of the University of São Paulo / BR, by professor Dr. Marcelo Queiroz.

How do I download Pure Data?

Miller S. Puckette's "vanilla" distribution of Pd
Last release: Pure Data 0.51-3
Released 20/11/2020
Required extensions: Zexy
Download

If you have a synth keyboard, plug it into you computer and follow this steps.
Else if, you don't have a keyboard, see this instructions.
Else if, you want to build a QWERTY synth keybord, see this Youtube video from LWM Music channel.


Source code

Musicam - Webcam based digital instrument

Digital instrument based on oscilator's frequency manipulation using Webcam images

Source code

Required extensions

Windows and MAC users: If you want to run this patch quickly, you can download the DMG packages or the EXE installer of Purr-Data HERE.

Performances
By Claudinei Sevegnani (click on images to see)

Mandelbrot Fractal

Performance test using different parallel configurations.

Source code

This work contains some of programs-exercises of class MAC5742 - Introduction to Concurrent, Parallel and Distributed Programming (2020) - Institute of Mathematics and Statistics, São Paulo University (IME-USP).

Authors

Carlos Eduardo Leal de Castro (me)
Felipe de Lima Peressim
José Luiz Maciel Pimenta
Luis Ricardo Manrique
Rafael Fernandes Alencar

Description

The Mandelbrot Set is the set of all complex points \(\mathbb{C}\) such that the sequence \( \{z_n\}_{n\in(\mathbb{N}\cup\{0\})} \), given by \(z_{n+1}=z_n^2+c\), with \(z_0=c\in\mathbb{C}\), where this sequence remains bounded. That is, for any \(z\in\mathbb{C}\) that remains on this set, there \( \exists R_{max} \) such that \(\vert z \vert \leq R_{max}\).

Performance tests

We did performance tests to compare all the methods used here: sequential, pthreads, openmp, openmpi, cuda, openmpi+openmp and openmpi+cuda. In these experiments, we measure the average time of 15 executions on each method, varying 3 different parameters:

  • Dimensions (x,y) of grid and blocks (CUDA);
  • Number of Threads (Pthreads and OMP);
  • Number of processes (OMPI).
Algorithm Executions
Sequential ---
OpenMP 1 to \(2^{10}\) threads
Pthreads 1 to \(2^{10}\) threads
CUDA \(2^2\) a \(2^{6}\) clock size
CUDA+OpenMPI (one node) Block size \(n = (2,4,...,32)\), for each \(n, \ 2^2\) to \(2^6\) clock size
CUDA+OpenMPI (two nodes) Block size \(n = (2,4,...,64)\) in two nodes, each one with \(\frac{n}{2}\) processes, for each \(n, \ 2^2\) to \(2^6\) block size
OpenMPI (two nodes) Block size \(n = (2,4,...,32)\)
OpenMPI (two nodes) Block size \(n = (2,4,...,64)\) in two nodes, with \(\frac{n}{2}\) processes each
OpenMPI+OpenMP (one node) Block size \(n = (2,4,...,32)\), for each \(n, \ 2^2\) to \(2^6\) threads
OpenMPI+OpenMP (two nodes) Block size \(n = (2,4,...,64)\) in two nodes, with \(\frac{n}{2}\) processes each and, for each \(n\) we have \(2^2\) to \(2^6\) threads