Sound as Form
Sing a gesture. Shape a synthetic composition. Read its form. A native Praat instrument that turns one vocal performance into four continuously mixed synthesis identities, gesture-derived spatial motion and an electroacoustic graphic listening score.
What this does
Sound as Form is a voice-controlled synthesis instrument, not a voice effect. You sing a single phrase into a microphone; Praat extracts the phrase's pitch movement, intensity, resonance, articulation and spectral character. The script then synthesizes four new sounds, mixes their contributions continuously through a gesture-controlled vector and organizes them in stereo, four-channel or eight-channel space.
The original recording is a source of control information only. Its recorded samples do not become part of the finished music. What the output retains is the shape of the performance: for example, an upward glide, a dynamic swell, a sustained vowel, a sequence of articulations or a breathy ending.
When Show_graphic_score is enabled, the script also draws a Spectromorphological Listening Score in the Praat Demo window. Its notation combines tonal ribbons, resonant ellipses, pluck strokes, noise textures and spatial trajectories, all derived from actual synthesis events and control data rather than decorative animation.
Key features:
- One-phrase microphone workflow: record once, analyse, synthesize, listen and retain the result in Praat.
- Four native synthesis methods: FM, artificial formant voice, modal/Karplus–Strong, and stochastic textures.
- Gesture-driven vector synthesis: all four engines can contribute simultaneously; their balance changes during the phrase.
- Multichannel spatial composition: continuous individual engine positions in Stereo, Quad or Octophonic formats.
- Graphic listening score: a score-like notation of frequency, resonance, attacks, stochastic activity and spatial motion.
- Immediate audition: the completed result is played automatically with the existing
Playcommand. - Memory-only operation: no temporary audio files, saved analyses, project files or exported graphics.
- One final object: only the new multichannel Sound remains in Praat Objects; temporary objects and the microphone recording are removed.
Quick start
- Connect a microphone and confirm that Praat can record from it. In the Praat Objects window, launch
Sound_as_Form.praatfrom your AudioTools installation. You do not need to select a Sound: ordinary operation records a new phrase. - Keep the initial settings for a first trial: 6 seconds, 44,100 Hz, Stereo (2), full pitch following and full envelope influence.
- Leave Show_graphic_score enabled to generate the listening score, or untick it if you only want the synthesized audio.
- Confirm the settings. At the Sound as Form – ready prompt, choose Record and sing one phrase. The recording runs for the selected fixed duration; the script does not listen continuously.
- Allow Praat to analyse the gesture and render the four synthesis engines, their evolving vector mix and the output channels.
- The result appears as a new Sound in Praat Objects. The script opens the Demo score if requested and then calls Play on the finished Sound.
- Keep working with the output in Praat. Save or export it manually only if you want to preserve it outside the current Praat session.
Core concept: the voice becomes the form
The process is offline and phrase-based. The input recording is completed before synthesis begins; this is not a low-latency voice-to-sound live instrument or a continuous microphone effect. The control information is sampled on a common 10 ms timeline, with the resulting sound synthesized at the chosen audio sampling rate.
The four sound generators are implemented inside the same Praat script. They are not launched as four external AudioTools scripts and do not require Python. The microphone waveform is analysed but never mixed as a dry component into the output.
How the voice is analysed
The script calculates several complementary descriptors. These describe what changes during the performance, not merely a single average pitch or loudness value. The trajectories are aligned on one timing grid so that events in the voice can affect multiple synthesis and spatial processes coherently.
| Vocal information | How it is used |
|---|---|
| Fundamental frequency (F0) | A pitch trajectory drives pitched synthesis. A two-pass pitch analysis, octave-jump correction and smoothing help preserve melodic movement, including glissando and vibrato. |
| Amplitude envelope | A fast attack/longer release follower extracts dynamics and silences. Its normalized shape can control the final synthetic amplitude. |
| Spectral brightness and variability | Centroid, spectral-band changes and local variability affect FM complexity, stochastic frequency spread, modal character and vector motion. Brightness is considered relative to tracked F0. |
| Vocal formants | Valid, smoothed estimates of the first three formants steer the artificial resonant voice. Invalid estimates are not allowed to create abrupt jumps. |
| Voicing and harmonicity | Help distinguish sustained pitched singing from breathy or noisy regions, and influence periodic/noisy excitation and the vector's vertical coordinate. |
| Onsets, novelty and density | Identify articulations, trigger modal excitations and influence stochastic event rate and spatial separation. |
| Melodic movement and vibrato | Contribute to the spatial rotation of the synthetic sound field without simply copying the timbral-vector motion. |
When pitch is uncertain: unvoiced and noisy portions do not receive an invented sung melody. The synthesis engine uses a slowly smoothed centroid-derived tonal reference where necessary; the listening score distinguishes reliable pitched regions from inferred or bridged pitch. Long or brief unvoiced gaps may be held or interpolated for control continuity.
Four native synthesis engines
Each engine generates new audio from the same vocal analysis, but uses a different synthesis method. The vector mixer then controls how strongly each contributes throughout the composition. All four operate on the same duration and time base.
A · FM synthesis
A phase-continuous frequency-modulated sound follows the controlled pitch trajectory. Relative spectral brightness and vocal dynamics influence modulation depth, while spectral variability changes the balance between harmonic and inharmonic modulation. It tends toward sustained, moving pitched textures.
B · Formant synthesis
A newly generated glottal-type excitation, blended with synthesized noise according to voicing, passes through a moving FormantGrid. Resonances are deliberately shifted and narrowed to create an artificial vocal-like instrument rather than replay the recorded voice.
C · Modal / Karplus–Strong
Vocal attacks trigger resonant, string-like excitations. A changing-delay Karplus–Strong component is combined with two inharmonic modal resonators. Sustained vowels can also keep the system sounding through gentle repeated excitation and continuous low-level noise.
D · Stochastic synthesis
Ten drifting oscillators, short synthesized sine particles and a noise field generate changing clouds and textures. Articulation influences particle density, spectral brightness affects frequency distribution and voicing influences tonal-versus-noisy balance. No grains from the microphone recording are reused.
Gesture-driven vector synthesis
Sound as Form uses one vector mode only: Gesture-Driven Vector. There is no manual XY joystick, drawn trajectory or preset vector sequence. The singing controls a point (X(t), Y(t)) that moves continuously among the four synthesis identities.
X primarily reflects pitch-corrected spectral brightness and movement of the second formant. Y combines voicing, continuity, novelty and pitch stability. Descriptors are robustly normalized per performance and smoothed before mixing; silent regions hold the most recent active vector rather than jumping to an arbitrary position.
| Synthesis corner | Contribution weight |
|---|---|
| FM, upper-left | (1 − X) × Y |
| Formant, upper-right | X × Y |
| Modal, lower-left | (1 − X) × (1 − Y) |
| Stochastic, lower-right | X × (1 − Y) |
These four nonnegative weights always add up to one. The engines are first brought to comparable working RMS levels, then mixed with gains related to the square roots of their weights, so the weights function as intended energy shares. The result is a continuously changing combination of sound generators—not a series of hard switches.
Vector_motion_depth determines how far the singing can move away from the performance's automatically estimated reference vector. At 0% the reference mix is held; near 100% the measured trajectory moves naturally, and values above 100% can exaggerate the movement subject to bounded coordinates.
Gesture-driven spatial composition
The spatial engine is not simply a final pan applied to a mono synthesis mix. Each of the four synthesis engines has its own spatial position, and each output channel receives a changing combination of the engines.
| Vocal feature | Spatial tendency |
|---|---|
| Melodic position | Moves the shared rotation of the four-engine field. A rise and a fall can turn the field in opposite directions; the mapping is relative to the performance's median pitch. |
| Vibrato residual | Adds subtle spatial oscillation after the slower trajectory is smoothed. |
| Articulation density and spectral variability | Change the angular separation of the four engines. Articulated and variable phrases can create more widely separated identities. |
| Dynamic envelope | Controls spatial spread: stronger passages can expand the diffuse distribution and quieter passages can concentrate it. |
The four engines occupy distinct reference directions around a moving centre. Their actual positions combine that reference layout with a shared gesture-derived rotation and a changing separation. The spatial motion is related to, but distinct from, the sonic XY vector: a change of timbre does not automatically mean an identical move in space.
For multichannel rings, speaker contributions follow a circularly distributed, smooth gain function rather than hard channel switching. The gains for a given engine are normalized in squared sum, helping preserve its energy through spatial movement. Stereo uses an equal-power pan with controllable spread.
Stereo, Quad and Octophonic output
The Output_channels setting chooses one finished Praat Sound with exactly 2, 4 or 8 channels. A multichannel result is not an export file or a collection of separate mono objects; it is an ordinary Sound object that the user can subsequently inspect, transform or export.
| Mode | Channel order / intended speaker layout |
|---|---|
| Stereo (2) | 1: Left; 2: Right. A circular azimuth is mapped to a left–right position rather than physical rear speaker positions. |
| Quadraphonic (4) | 1: Front-left (−45°); 2: Front-right (+45°); 3: Rear-right (+135°); 4: Rear-left (−135°). |
| Octophonic (8) | 1: −22.5°; 2: +22.5°; 3: +67.5°; 4: +112.5°; 5: +157.5°; 6: −157.5°; 7: −112.5°; 8: −67.5°. |
Angles are measured clockwise from the front of the listening field, with the listener conceptually at the centre. The specified channel order is important if you later route the Sound to a physical loudspeaker array in another application.
Spectromorphological Listening Score
The optional Demo-window display is a graphic listening score of the resulting electroacoustic work. Its visual language is inspired by graphic notation and spectromorphological thinking: the important objects are moving sonic gestures, resonances, attacks, textures and spatial relationships—not staves, note names or conventional audio-editor waveforms.
The score combines a broad main time–frequency field with a smaller spatial notation strip beneath it. Both read from left to right. The main field's vertical axis is logarithmic frequency, from approximately 60 Hz to 8 kHz (or the available upper frequency limit). Light grid lines give temporal and frequency references without becoming the principal image.
Read horizontally
Time moves from the beginning of the vocal gesture to its end. Left-to-right continuities show sustained processes; discrete marks identify events such as modal excitations and generated particles.
Read vertically
Higher positions correspond to higher frequency regions on a logarithmic axis. Pitch-following ribbons, formant resonances, modal frequencies and particle positions share a common frequency reference.
Read colour as identity
Each synthesis family retains one consistent colour. Mixing happens visually through the changing prominence and overlap of different kinds of marks, not by assigning new colours to loudness or space.
Read density and opacity as contribution
The prominence of graphic material is influenced by each engine's actual sound level, its vector weight and the final performance envelope. Crescendos and pauses therefore affect how strongly the notation appears.
The score is constructed using measured envelope-like activity from the actual synthesized engines; the spatial strip additionally uses energy measured in the completed multichannel result. This makes it more informative than a decorative animation.
How to read the four graphic vocabularies
The drawing uses four distinct visual families. Unlike a conventional timeline with one separate lane per algorithm, they can overlap in the same score space as the vector mixer combines the sounds.
| Family and colour | What its graphic symbols mean | What to listen for |
|---|---|---|
| FM · violet | Continuous ribbons follow the controlled pitch trajectory. Additional thin strands indicate modulation complexity; a dashed strand indicates an inharmonic modulation component. A dotted trace distinguishes bridged or inferred pitch from confidently voiced melody. | Glissandi, sustained pitched material and changing harmonic/inharmonic colour. |
| Formant · amber | Nested ellipses occupy the synthetic formant-frequency regions; their vertical extent is related to resonance bandwidth. A connected line follows the second-formant region, giving a vowel-like continuity. | Moving vocal-type resonances and transitions between artificial vowel colours. |
| Modal · teal | Vertical strokes identify actual detected attacks and generated re-plucks. Tapered lines follow the string frequency and two inharmonic modal frequencies, suggesting decays. A faint dotted trace represents sustained excitation. | Plucked or struck events, ringing modes, sustained string-like resonance. |
| Stochastic · grey | Dots correspond to the generated particles at their creation times and frequencies. Fine hatching represents the oscillator-bank range; regularly arranged stipple represents the changing noise contribution. | Grains, swarms of oscillators, breath-like noise and diffuse textures. |
Meaning of graphic intensity
Thicker or more visible marks generally indicate a stronger engine contribution at that moment, taking into account its synthesized level, vector weight and the final envelope. A quiet passage may contain the same synthesis family as a loud passage but show it much more faintly. Where an engine is nearly inaudible, its marks can disappear entirely.
Events versus textures: a teal attack stroke corresponds to an actual excitation event; a grey particle dot corresponds to a synthesized grain. In contrast, the noise stipple is a controlled graphic texture that summarizes noise presence rather than depicting every individual noise sample.
One example of reading a phrase
Imagine singing a rising vowel with a gradual crescendo and ending on a breathy consonant. The pitch-following violet ribbon may rise across the score, amber resonance forms may shift with the vowel, teal excitation strokes may punctuate new articulations and the grey texture may become more apparent as voicing weakens. The exact balance depends on the acoustic analysis; the example describes how to interpret the score, not a guaranteed graphic pattern.
Reading the spatial notation strip
The narrow strip below the main score describes the spatial organization of the same phrase. It is not an unrelated XY display; it shares the score's horizontal time axis and is informed by both the gesture-derived spatial controls and the measured output-channel energy.
| Visual element | Interpretation |
|---|---|
| Four coloured trajectories | The actual angular positions of the FM, Formant, Modal and Stochastic engines, following the same colour key used in the main score. |
| Dashed dark trajectory | An overall direction estimated from the energy distribution in the rendered multichannel audio. It is not the position of any one engine. |
| Grey surrounding band | A summary of spatial diffuseness or lack of directional concentration in the rendered channel energies; a broader band suggests a less focused spatial image. |
| Speaker references | In Quad and Octophonic modes, speaker-number guide lines refer to the script's documented circular channel order. |
| Stereo labels | In Stereo mode, the strip becomes a left–centre–right scale rather than a full-circle azimuth plot. |
Important distinction: the coloured lines represent where the internal engines are directed. The dashed line and grey band are derived from the finished multichannel mixture. These can differ because the four engines contribute different amounts of energy at any moment.
Channel and angular values in the strip are references for a multichannel sound object; the score is not a substitute for testing a finished work in a physical loudspeaker installation.
Main Praat interface and controls
The user dialog is intentionally compact. It does not ask you to select one of the four engines or to move a vector manually. The voice always drives the synthesis vector and spatial behavior.
| Control | Default | What it changes |
|---|---|---|
| Recording_duration_s | 6 s | Fixed duration of the single microphone recording. Accepted range: 0.5–120 seconds. |
| Sampling_frequency | 44,100 Hz | Select 32,000, 44,100 or 48,000 Hz for capture and synthesis. |
| Output_channels | Stereo (2) | Create one Sound in Stereo (2), Quadraphonic (4) or Octophonic (8). |
| Pitch_following_strength | 100% | How closely the controlled pitch follows the performed melodic movement. Lower settings move the pitched synthesis toward a stable reference pitch. |
| Envelope_influence | 100% | How strongly the original performance envelope shapes the final synthetic audio. At zero the final gate/envelope influence is removed, though individual engines still respond to performance descriptors. |
| Vector_motion_depth | 100% | How far the analysis-derived vector can travel from its own reference position. Zero holds a fixed automatically determined blend. |
| Vector_smoothing_ms | 120 ms | Controls the temporal smoothness of the timbral-vector motion. Higher values give slower transitions between synthesis identities. |
| Spatial_motion_depth | 70% | Controls the amount of gesture-derived field rotation and change of engine separation. |
| Spatial_spread | 60% | Controls how broadly the engines are distributed to the output channels, with a contribution from vocal dynamics. |
| Spatial_smoothing_ms | 250 ms | Smooths spatial rotation, separation and spread. A longer time produces less abrupt motion. |
| Peak_ceiling | 0.99 | Target sample-peak magnitude for common final scaling of the complete multichannel Sound. |
| Show_graphic_score | On | Draw the integrated listening score in the Demo window after synthesis. Turning it off leaves sound synthesis and output unchanged. |
Playback and graphic-score display
After the multichannel Sound has been rendered and all intermediate objects have been removed, the script selects the result and calls the existing Play command. The completed Sound is therefore auditioned automatically; a separate playback setting is not needed.
When Show_graphic_score is on, the Demo-window listening score is drawn after the temporary-object cleanup and before the final Play call. The score remains visible without a blocking event loop, while the resulting Sound stays selected in Praat Objects.
| Setting | Behavior |
|---|---|
| Show_graphic_score: On | Generate the score from internal control and sound measurements, clean up intermediate objects, draw the Demo score and play the new Sound. |
| Show_graphic_score: Off | Generate, clean up and play the new Sound without drawing the graphic score. |
The Demo image is a temporary, on-screen listening aid. The script does not automatically export it as an image or create a graphics file. It does not add any score-specific objects to the Praat Objects list.
Compositional explorations
| Study | How to explore it |
|---|---|
| A · Singing becomes synthesis | Sing one relatively steady vowel with a clearly defined F0 and smooth dynamics. Use Stereo and default settings. Follow the violet ribbon and the amber resonance shapes as you listen to the synthetic result. |
| B · Glissando as form | Sing a slow continuous glide. Compare full pitch following with a lower value. Listen for differences in synthetic pitch movement and examine how the ribbon and spatial motion respond. |
| C · Articulation and resonance | Sing a phrase of separated syllables, with clear beginnings and internal pauses. Look for teal excitation strokes and resulting decay trails, as well as changes in grey particle density. |
| D · Vector as timbral dramaturgy | Perform a phrase that begins harmonically and becomes increasingly breathy. Compare a normal vector depth with a reduced depth on comparable performances. Listen for how much the four synthetic identities move in and out of prominence. |
| E · Spatial counterpoint | Create a Quad or Octophonic result and examine the coloured trajectories in the spatial strip. Compare spatial motion depth near zero with a higher value, leaving the synthetic engine balance unchanged. |
| F · Reading the electronic score | Perform several contrasting short phrases separately. For each finished Sound, interpret its dominant graphic marks before listening again. Compare what the score suggests with the details you hear. |
Listening-score study · One gesture, four identities
Sing a phrase that begins on a sustained pitched vowel, introduces two or three articulate attacks, then fades into a breathy ending. The resulting graphic score can show continuity, resonant motion, excitation strokes and distributed noise texture in one common temporal field. Observe which layers actually appear and how their thickness and spatial trajectories relate to what you hear. Repeat the gesture with a different articulation or dynamic shape instead of choosing a synthesis preset.
Output, object management and privacy
On a successful run the script creates exactly one new multichannel Sound object. The names follow the chosen output arrangement; if a name already exists, a collision-safe numeric suffix is added.
| Output configuration | Result in Praat Objects |
|---|---|
| Stereo | Sound_as_Form_Stereo |
| Quadraphonic | Sound_as_Form_Quad |
| Octophonic | Sound_as_Form_8ch |
Every original user object that was present in Praat before the script is intended to remain untouched. The newly recorded microphone Sound and all temporary analysis, synthesis and spatial-control objects are tracked and removed before the script completes. The listener score uses internal arrays and the Demo display; no persistent score objects or exported graphics are created.
Requirements and installation
| Component | Requirement |
|---|---|
| Praat | Praat 6.4 or newer, including native filtered-autocorrelation Pitch analysis and microphone recording commands. |
| Audio input | A connected, accessible microphone or audio input selected through the operating system/Praat recording environment. |
| Praat AudioTools | Place Sound_as_Form.praat within the plugin's Generative & Synthesis collection, or run it as a standalone Praat script. |
| Python and external packages | Not required. Analysis, all four synthesis methods, multichannel rendering and the Demo score are implemented natively in Praat. |
| Disk and network | No network service, external corpus or working directory required for sound generation. The script intentionally does not write files. |
Keep the script in the library's normal synthesis location. It does not depend on calling four separate synthesis scripts, nor does it need a Python helper beside it.
plugin_AudioTools/
Generative & Synthesis/
Sound_as_Form.praat
The recording begins only after the settings dialog and the subsequent Record confirmation. Praat's microphone and sound-device permissions must be configured on the target computer.
Limitations and interpretation
- One completed phrase: there is no continuous capture or real-time synthesis. Rendering begins after the requested recording duration has elapsed.
- Acoustic tracking is an estimate: soft vowels, noisy consonants, strong breathiness, extreme pitch motion and background noise may challenge Pitch, harmonicity and formant analysis. The script uses fallbacks but cannot infer an exact melody from a fully unvoiced phrase.
- One performed shape, not one fixed sound: the four synthesis engines are stochastic or nonlinear in different ways. Identically sung phrases are not guaranteed sample-for-sample identical, especially in randomized components.
- Graphic notation is interpretive: the score shows generated events, model frequencies, engine activity and rendered channel-energy relationships. It is not a complete spectral measurement of the finished multichannel waveform.
- FM strands are schematic: modulation-related graphic strands illustrate synthesis behaviour; they should not be read as exact measured FM sideband frequencies.
- Diffuseness weakens directionality: the spatial strip's rendered direction is less meaningful when channel energy is symmetrically distributed.
- Rendering time varies: long recordings, four full synthesis engines, sample-rate choices, higher channel counts and score rendering can increase computation time and memory use.
- Peak scaling, not loudness mastering: the complete result is scaled to a shared sample-peak ceiling. This does not guarantee a uniform perceived loudness across different performances, or a true-peak ceiling between samples.
- Playback routing is external: the multichannel Sound is constructed in Praat; monitoring it over a particular physical loudspeaker array depends on the user's audio configuration or subsequent export workflow.
- Temporary display: the Demo listening score is not automatically saved, and no permanent audio archive is created.
Practical troubleshooting
| Observation | What to check |
|---|---|
| Recording fails or no input arrives | Verify microphone permissions and the active audio input. Choose Record at the second prompt, not Cancel. |
| "Silent or extremely weak" message | Sing closer to the microphone or adjust input gain. The script deliberately rejects very low-level recordings. |
| Output pitch seems unrelated to the voice | Use a clear voiced vowel in the microphone. When reliable F0 is unavailable, a spectral-centroid-derived tonal reference is used instead. |
| The timbre changes very little | Try varying vowels, brightness and articulation. Check that Vector_motion_depth is above zero and Vector_smoothing_ms is not excessively high. |
| The sound seems too spatially stationary | Choose Quad or Octophonic output, increase Spatial_motion_depth, and perform a wider melodic contour. Inspect the spatial strip to distinguish the individual engine trajectories from the rendered direction. |
| The score appears crowded | Use a shorter phrase or listen for individual motifs in the notation rather than interpreting every mark as a separate musical note. The display reduces drawing density for long recordings. |
| No score appears | Verify that Show_graphic_score is checked. The score appears only after the synthesis has finished. |
| Direct playback is incomplete on 4/8 channels | The object can still contain all requested channels. Inspect the Sound in Praat or use an appropriate multichannel playback/export environment. |
Practical recommendation: begin with a six-second stereo phrase and leave the graphic score enabled. Once pitch tracking and the relationship between sung morphology and synthesized sound are clear, explore longer forms and Quad or Octophonic output. Change one musical parameter at a time to hear its contribution.