a landline imagining a line probe during a storm

score · Xyh Tamura, 2026

Terms

GRID        = 150 Hz
POSITIONS   = 150, 300, 450, … 3750 Hz
OMITTED     = 900, 1200, 1800, 2400 Hz
PROBE       = POSITIONS without OMITTED
ANNOUNCE    = 2100 Hz, amplitude-modulated at 15 Hz,
              reversing phase every 450 ms
CAPABILITY  = frequency-shift keying at 300 bit/s

RATES       = an ordered list, fastest first, with a minimum
              bandwidth and signal-to-noise ratio for each rate.
900 1200 1800 2400 150 3750

Score / Pseudocode

choose the total duration and every value in brackets.

sound a telephone line for the whole duration,
at the edge of audibility.

its noise consists of band-limited hiss, mains hum,
and [ occasional ] impulses.

as the piece progresses, with fluctuations:
    attenuate the line until it carries nothing
    attenuate high frequencies more than low frequencies
    raise the noise, then hold its level
    move a narrow null down through the band
from each attempt, sound only [ a few ] fragments.
for each fragment:

    length    drawn so short ones dominate,
              none longer than [ about a second ]
    source    any available one of: announce, probe,
              capability, or data
    time      anywhere within a window [ wider than the
              interval between attempts ]
    position  between the two ends of the call
    level     at or below the level of its source

as the piece nears its end: sound fewer, shorter fragments.

Each attempt

repeat every [ a few seconds to half a minute ]
for the whole duration:
1  announce

   emit ANNOUNCE for [ one to four seconds ].
2  probe

   emit PROBE at equal amplitude.
   set its phases to minimise the combined peak.
   first [ briefly, raised ], then [ longer, nominal ].
3  measure

   let RECEIVED = the probe, through the line, plus its noise.

   for each f in OMITTED and each midpoint between positions:
       noise[f] = power of RECEIVED at f

   for each t in PROBE:
       snr[t] = power of RECEIVED at t,
                against noise interpolated to t
4  decide

   USABLE = { t in PROBE : snr[t] ≥ [ a threshold ] }

   if |USABLE| < 2:
       RATE = NONE
   else:
       BANDWIDTH = |USABLE| × GRID
       QUALITY   = mean of snr over USABLE

       RATE = the first r in RATES with
                  BANDWIDTH ≥ r.least_bandwidth and
                  QUALITY   ≥ r.least_snr,
              or NONE
5  speak

   emit CAPABILITY from both ends, overlapping,
   carrying the measurement.

   if RATE is not NONE:
       emit data at RATE, shaped to the chosen band,
       for a time [ increasing with RATE ].

← back