Spectrogram Text Art ==================== Synthesise audio that displays **readable text** when viewed as a spectrogram — time runs horizontally, frequency vertically. How it works ------------ 1. Each ASCII character (32–126) is rasterised with a built-in 5 × 7 bitmap font, spaced 3 columns apart. 2. Each bitmap column becomes a time slice. 3. Each "on" pixel becomes a sine wave at the corresponding frequency between *freq_lo* and *freq_hi* (top row → highest frequency, bottom row → lowest, linearly interpolated). 4. A 3 ms raised-cosine crossfade at column boundaries suppresses clicks. 5. The output is normalised to 0.9 peak amplitude. Example ------- .. code-block:: python import pyminidsp as md sig = md.spectrogram_text("HELLO", freq_lo=200.0, freq_hi=7500.0, duration_sec=2.0, sample_rate=16000.0) # View the spectrogram of `sig` to see "HELLO" spelled out # in the frequency domain. **Listen** — "HELLO" encoded in the spectrogram: .. raw:: html The result sounds like a buzzy chord, but when analysed with a spectrogram viewer (1024-point FFT at 16 kHz), the text is clearly visible. .. raw:: html Tips ---- - Use a sample rate of at least 16 kHz and keep *freq_hi* below Nyquist. - Longer *duration_sec* stretches the text horizontally — easier to read in spectrograms. - Short strings work best (the 5 × 7 font has limited resolution). .. code-block:: python md.shutdown()