spkr.4: Reflect latest changes and add history

- speaker(4) was recently modernized to lock the driver per-playback
  instead of per-open. Update the man page to explain this change.

- added a reference to MML and SMX in the historical context to make
  it easier for users to find additional documentation online.

Signed-off-by:	Raphael Poss <knz@thaumogen.net>
Reviewed by:	ziaee
Closes:		https://github.com/freebsd/freebsd-src/pull/2183
This commit is contained in:
Raphael 'kena' Poss
2026-05-08 15:10:29 +02:00
committed by Alexander Ziaee
parent a3036edd02
commit e26b5e0749
+78 -24
View File
@@ -16,16 +16,6 @@ speaker on an
machine running
.Fx .
.Pp
Only one process may have this device open at any given time;
.Xr open 2
and
.Xr close 2
are used to lock and relinquish it.
An attempt to open when
another process has the device locked will return -1 with an
.Er EBUSY
error
indication.
Writes to the device are interpreted as `play strings' in a
simple ASCII melody notation.
An
@@ -34,6 +24,13 @@ request
for tone generation at arbitrary
frequencies is also supported.
.Pp
Only one string can be playing at a time.
Concurrent
.Xr write 2
and
.Xr ioctl 2
calls from separate threads or processes are serialized per string.
.Pp
Sound-generation does not monopolize the processor; in fact, the driver
spends most of its time sleeping while the PC hardware is emitting
tones.
@@ -64,18 +61,25 @@ pointer to the first of an array of tone structures and plays them in
continuous sequence; this array must be terminated by a final member with
a zero duration.
.Pp
The play-string language is modeled on the PLAY statement conventions of
The play-string language is a dialect of the Music Markup Language
(MML) used in various computer and gaming systems since the 1970s.
It is a subset of the MML variant supported by the PLAY statement of
.Tn IBM
Advanced BASIC 2.0.
The
Advanced BASIC 2.0,
.Tn MS
BASICA and GW-BASIC,
as well as the Standard Musical Expression (SMX) supported in
.Tn MS
QBasic.
.Li MB ,
.Li MF ,
and
.Li X
primitives of PLAY are not
useful in a timesharing environment and are omitted.
primitives of MML/SMX are not supported.
The `octave-tracking'
feature and the slur mark are new.
feature and the slur mark are specific to the
.Fx
implementation.
.Pp
There are 84 accessible notes numbered 1-84 in 7 octaves, each running from
C to B, numbered 0-6; the scale is equal-tempered A440 and octave 3 starts
@@ -115,10 +119,11 @@ Thus ``olbc'' will be played as
``olb>c'', and ``olcb'' as ``olc<b''.
Octave locking is disabled for
one letter note following >, < and O[0123456].
(The octave-locking
feature is not supported in
The octave-locking feature is not supported in
.Tn IBM
BASIC.)
and
.Tn MS
BASIC dialects.
.It Li >
Bump the current octave up one.
.It Li <
@@ -201,9 +206,11 @@ dotted twice, it is held 9/4, and three times would give 27/8.
A note and its sustain dots may also be followed by a slur mark (underscore).
This causes the normal micro-rest after the note to be filled in, slurring it
to the next one.
(The slur feature is not supported in
The slur feature is not supported in
.Tn IBM
BASIC.)
and
.Tn MS
BASIC dialects.
.Pp
Whitespace in play strings is simply skipped and may be used to separate
melody sections.
@@ -214,16 +221,63 @@ speaker device file
.El
.Sh SEE ALSO
.Xr spkrtest 8
.Pp
Additional information about MML:
.Bl -dash -offset indent
.It
.Lk https://electronicmusic.fandom.com/wiki/Music_Macro_Language "The Electronic Music Wiki - Music Macro Language"
.It
.Rs
.%T "IBM Personal Computer BASIC manual"
.%I "IBM Corporation"
.%D "1982"
.Re
.It
.Rs
.%T "BASICA manual"
.%I "Microsoft Corporation"
.%D "1982"
.Re
.It
.Rs
.%T "GW-BASIC manual"
.%I "Microsoft Corporation"
.%D "1987"
.Re
.It
.Rs
.%T "QBasic manual"
.%I "Microsoft Corporation"
.%D "1991"
.Re
.It
.Rs
.%A "Eleanor Selfridge-Field"
.%T "Beyond MIDI: the handbook of musical codes"
.%I "MIT Press"
.%D "1997"
.Re
.El
.Sh HISTORY
The
.Nm
device appeared in
.Fx 1.0 .
.Pp
Prior to
.Fx 16 ,
only one file descriptor could hold the device open.
.Sh AUTHORS
.An Eric S. Raymond Aq Mt esr@snark.thyrsus.com ,
.An -nosplit
The
.Nm
driver was written by
.An Eric S. Raymond Aq Mt esr@snark.thyrsus.com in
June 1990
.Sh PORTED BY
.An Andrew A. Chernov Aq Mt ache@astral.msk.su
and ported by
.An Andrew A. Chernov Aq Mt ache@astral.msk.su .
Support for concurrent open was added by
.An Raphael Poss Aq Mt knz@thaumogen.net .
.Sh BUGS
Due to roundoff in the pitch tables and slop in the tone-generation and timer
hardware (neither of which was designed for precision), neither pitch accuracy