Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SPKR(4) 		     Kernel Interfaces Manual			 SPKR(4)

NAME
     speaker, spkr -- console speaker device driver

SYNOPSIS
     device speaker
     #include <dev/speaker/speaker.h>

DESCRIPTION
     The  speaker  device  driver  allows applications to control the PC console
     speaker on an IBM-PC--compatible machine running FreeBSD.

     Only one process may have this device open at any given time;  open(2)  and
     close(2)  are  used to lock and relinquish it.  An attempt to open when an-
     other process has the device locked will return -1 with an EBUSY error  in-
     dication.	Writes to the device are interpreted as `play strings' in a sim-
     ple  ASCII melody notation.  An ioctl(2) request for tone generation at ar-
     bitrary frequencies is also supported.

     Sound-generation does not monopolize the processor;  in  fact,  the  driver
     spends  most  of its time sleeping while the PC hardware is emitting tones.
     Other processes may emit beeps while the driver is running.

     Applications may call ioctl(2) on a speaker file descriptor to control  the
     speaker  driver  directly;  definitions  for  the ioctl(2) interface are in
     <dev/speaker/speaker.h>.  The tone_t structure used in these calls has  two
     fields,  specifying  a  frequency	(in Hz) and a duration (in 1/100ths of a
     second).  A frequency of zero is interpreted as a rest.

     At present there are two such ioctl(2) calls.  SPKRTONE accepts  a  pointer
     to  a  single  tone structure as third argument and plays it.  SPKRTUNE ac-
     cepts a 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.

     The play-string language is modeled on the PLAY  statement  conventions  of
     IBM  Advanced BASIC 2.0.  The MB, MF, and X primitives of PLAY are not use-
     ful in a timesharing environment and are  omitted.   The  `octave-tracking'
     feature and the slur mark are new.

     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
     with middle C.  By default, the play function emits half-second notes  with
     the last 1/16th second being `rest time'.

     Play  strings  are  interpreted  left  to right as a series of play command
     groups; letter case is ignored.  Play command groups are as follows:

     CDEFGAB	Letters A through G cause the corresponding note to be played in
		the current octave.  A note letter may optionally be followed by
		an "accidental sign", one of # + or -; the first  two  of  these
		cause  it  to be sharped one half-tone, the last causes it to be
		flatted one half-tone.	It may also be followed by a time  value
		number	and by sustain dots (see below).  Time values are inter-
		preted as for the L command below.

     O n	If n is numeric, this sets the current octave.	n  may	also  be
		one  of  L or N to enable or disable octave-tracking (it is dis-
		abled by default).  When octave-tracking is  on,  interpretation
		of  a  pair  of letter notes will change octaves if necessary in
		order to make the smallest possible jump  between  notes.   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
		IBM BASIC.)

     >		Bump the current octave up one.

     <		Drop the current octave down one.

     N n	Play note n, n being 1 to 84 or 0 for a  rest  of  current  time
		value.	May be followed by sustain dots.

     L n	Sets the current time value for notes.	The default is L4, quar-
		ter  or  crotchet notes.  The lowest possible value is 1; values
		up to 64 are accepted.	L1 sets whole notes, L2 sets half notes,
		L4 sets quarter notes, etc.

     P n	Pause (rest), with n interpreted as for L n.  May be followed by
		sustain dots.  May also be written ~.

     T n	Sets the number of quarter notes per  minute;  default	is  120.
		Musical names for common tempi are:

				      Tempo	      Beats Per Minute
		      very slow       Larghissimo
				      Largo	      40-60
				      Larghetto       60-66
				      Grave
				      Lento
				      Adagio	      66-76
		      slow	      Adagietto
				      Andante	      76-108
		      medium	      Andantino
				      Moderato	      108-120
		      fast	      Allegretto
				      Allegro	      120-168
				      Vivace
				      Veloce
				      Presto	      168-208
		      very fast       Prestissimo

     M[LNS]	Set  articulation.   MN  (N for normal) is the default; the last
		1/8th of the note's value is rest time.   You  can  set  ML  for
		legato (no rest space) or MS for staccato (1/4 rest space).

     Notes  (that  is, CDEFGAB or N command character groups) may be followed by
     sustain dots.  Each dot causes the note's value to be  lengthened	by  one-
     half  for each one.  Thus, a note dotted once is held for 3/2 of its undot-
     ted value; 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  (under-
     score).   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 IBM BA-
     SIC.)

     Whitespace in play strings is simply skipped and may be  used  to	separate
     melody sections.

FILES
     /dev/speaker    speaker device file

SEE ALSO
     spkrtest(8)

HISTORY
     The speaker device appeared in FreeBSD 1.0.

AUTHORS
     Eric S. Raymond <esr@snark.thyrsus.com>, June 1990

PORTED BY
     Andrew A. Chernov <ache@astral.msk.su>

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 nor timings will be mathematically exact.  There is no volume con-
     trol.

     The action of two or more sustain dots does not  reflect  standard  musical
     notation,	in  which each dot adds half the value of the previous dot modi-
     fier, not half the value of the note as modified.	Thus, a note dotted once
     is held for 3/2 of its undotted value; dotted twice, it is  held  7/4,  and
     three  times would give 15/8.  The multiply-by-3/2 interpretation, however,
     is specified in the IBM BASIC manual and has been retained for  compatibil-
     ity.

     In play strings which are very long (longer than your system's physical I/O
     blocks) note suffixes or numbers may occasionally be parsed incorrectly due
     to crossing a block boundary.

FreeBSD ports 15.quarterly	November 10, 2005			 SPKR(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=speaker&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help