Breathing Pitch Waves — User Guide
Pitch-contour modulation for voiced material using a compound breathing-wave controller, stochastic flutter and gasp components, an increasing drive envelope, and bounded semitone displacement.
What this does
Breathing Pitch Waves analyzes the source pitch contour, builds a new target contour at a fixed 100 Hz control rate, and resynthesizes the sound with Praat Manipulation. The generated semitone displacement combines several periodic components with stochastic amplitude variation, then passes the sum through a tanh limiter so the requested pitch depth is a true maximum displacement.
The generated displacement is applied to the detected source F0 at each control time. The original melody or intonation therefore remains the reference contour; the script does not replace the entire file with a contour around one median pitch.
To Pitch. If no usable pitch is detected, the script stops instead of creating an arbitrary target pitch.
randomUniform() while the control curve is built. There is no random-seed parameter, so repeated runs with the same settings can produce different modulation details.
Quick start
- Select exactly one Sound object.
- Run
Breathing_Pitch_Waves.praat. - Choose Manual or one of the seven built-in presets.
- For Manual mode, set Breath_rate, Pitch_depth_semitones, Micro_flutter, and Emotional_intensity.
- Set Time_step, Minimum_pitch, and Maximum_pitch for pitch analysis.
- Choose the Output_sample_rate and whether to draw the visualization and play the result.
- Click OK. The final Sound is named
<source>_breathing.
Presets
Presets override only the four modulation controls shown below. Pitch-analysis settings, output sample rate, visualization, and playback remain at the values entered in the form.
| Preset | Breath rate | Depth | Micro flutter | Emotional intensity |
|---|---|---|---|---|
| Gentle Breath | 0.20 Hz | 8 st | 1.0 | 1.2 |
| Emotional Swell | 0.25 Hz | 15 st | 2.0 | 2.0 |
| Dramatic Breath | 0.35 Hz | 24 st | 5.0 | 3.0 |
| Panic Breathing | 0.80 Hz | 36 st | 8.0 | 4.0 |
| Subtle Tremor | 0.15 Hz | 6 st | 3.0 | 0.8 |
| Deep Meditation | 0.10 Hz | 4 st | 0.5 | 0.5 |
| Intense Gasping | 0.50 Hz | 30 st | 6.0 | 3.5 |
Parameters
Modulation
| Parameter | Default | Behavior |
|---|---|---|
| Preset | Manual | Manual plus seven built-in modulation presets. |
| Breath_rate | 0.3 Hz | Base phase rate in cycles per second. It also scales the phase rates of the flutter, tremor, and gasp components. |
| Pitch_depth_semitones | 18 st | Maximum absolute semitone displacement. Values are clamped internally to 0–48. |
| Micro_flutter | 4 | Scales the two high-rate stochastic flutter components. Values are clamped to 0–20. |
| Emotional_intensity | 2.5 | Controls the time-varying drive applied before tanh. Values are clamped to 0–10. |
Pitch analysis
| Parameter | Default | Behavior |
|---|---|---|
| Time_step | 0.005 s | Time step passed to Praat To Pitch. This is separate from the fixed 10 ms modulation-control step. |
| Minimum_pitch | 50 Hz | Lower bound for pitch analysis and for the generated target F0. |
| Maximum_pitch | 900 Hz | Upper bound for pitch analysis and for the generated target F0. It must be greater than Minimum_pitch. |
Output
| Parameter | Default | Behavior |
|---|---|---|
| Output_sample_rate | 44100 Hz | If different from the source rate, the completed result is resampled with precision 50. |
| Draw_visualization | Yes | Draw the source/result waveforms, modulation curve, component description, run statistics, and summary strip. |
| Play_result | Yes | Play the final Sound after processing. |
Modulation controller
The controller is evaluated every 10 ms. For each control time t:
Because tanh() stays within −1…+1, Pitch_depth_semitones bounds the requested displacement. The subsequent F0 clamp can reduce the realized displacement when the shifted target would fall outside the selected pitch range.
Processing pipeline
- Pitch-analysis reference: a multichannel source is converted to mono for analysis only; a mono source is copied.
To Pitchuses the form's time step and pitch bounds. - Detection check: the median detected F0 is queried only to verify/report usable pitch. It is not used as the synthesis reference.
- Control grid: the modulation contour is evaluated at a fixed 0.01 s step across the full duration. The number of control points is
ceiling(duration / 0.01) + 1, with a minimum of two points. - Source-contour modulation: at each control time, the detected source F0 is read by linear interpolation and multiplied by
2^(total_shift/12). The target is then clipped to the minimum/maximum pitch range. - Per-channel resynthesis: each original channel receives its own Manipulation object. The same generated target PitchTier is inserted into every channel, and each channel is resynthesized with
Get resynthesis (overlap-add). - Rebuild: the resynthesized channels are written back into an N-channel Sound with the original time domain and original sampling rate.
- Optional resampling: if requested, the complete result is resampled to
Output_sample_ratewith precision 50. - Peak safety: if the final absolute peak exceeds 0.95,
Scale peak: 0.95attenuates it. Quieter results are not boosted.
Channels & output
- Output name:
<source>_breathing. - Channel count: preserved. The mono conversion is used only to obtain one shared pitch-analysis reference.
- Channel processing: channels are resynthesized independently, but all receive the same target pitch contour.
- Duration: processing modifies pitch only, so the output keeps the source time domain.
- Sample rate: equals
Output_sample_rateafter optional resampling; otherwise it remains the original rate. - Level handling: attenuation-only peak safety at 0.95; quieter results retain their level.
- Intermediate objects: analysis, Manipulation, channel-work, resynthesis, and PitchTier objects are removed automatically.
Visualization
When Draw_visualization is enabled, the script draws one Picture page with:
- Original waveform.
- Breathing result waveform.
- Pitch-shift control curve in semitones, with a zero reference line.
- Component strip describing the controller stages.
- Run statistics for rate, depth, flutter, and intensity.
- Summary strip identifying the transformation and directing detailed run parameters to the Info window.
Notes & troubleshooting
Minimum_pitch and Maximum_pitch so they bracket the source F0. The script stops if the analysis contains no usable pitch.