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

  
 
  

home | help
RAWREC(1)		     General Commands Manual		       RAWREC(1)

NAME
     rawrec - buffered raw audio recording/playing

SYNOPSIS
     rawrec [option]... [file]

     rawplay [option]... [file]

DESCRIPTION
     rawrec  reads  raw  audio	data  from  a digital signal processor (DSP) and
     writes it to the given file, or to standard output if no file is given.

     rawplay reads raw audio data from the given file, or from standard input if
     no file is given, and writes it to a DSP.

     The user of this program will almost certainly want some program to set the
     mixer device parameters for their sound card, rawrec/rawplay don't make any
     attempt to do so.

OPTIONS
     There are many options, but most users will probably only be interested  in
     -t,  -s, -f, -c, and possibly -v.	Options may appear multiple times; those
     without arguments act as toggles, those with arguments have the  values  of
     their arguments overwritten by successive occurences.  Any option requiring
     an  argument  may	be given the special argument 'dflt', which restores the
     default behavior (causes rawrec/rawplay to behave exactly as if that option
     had not yet appeared on the command line at all).	When  options  interact,
     the  interaction is between the final values arrived at after all overwrit-
     ing and toggling is finished.  This arrangement allows  full  customization
     via  alias  or shell variable mechanisms without any sacrifice in flexibil-
     ity.

     In the following discussion, unless otherwise noted, the term  "sample"  is
     taken to mean one full set of digitized bits_per_sample-bit values, one for
     each channel.  For example, when recording stereo (2 channel) sound in a 16
     bit format, one full sample is 32 bits long.

     SECS  arguments  can  have  fractional parts, all other numerical arguments
     need to be integral.

     -B SIZE, --ring-buffer-size=SIZE
	    explicitly sets the size of the big ring buffer to SIZE bytes.  This
	    may be useful if the machine is heavily loaded or doesn't have a lot
	    of physical memory.  If you don't know what this is about you should
	    probably not bother with this option.  The default is 2 megabytes.

     -c CHANNELS, --channels=CHANNELS
	    sets the number of channels.  Currently, only mono (1  channel)  and
	    stereo  (2	channel)  modes  are supported.  In 2 channel mode, left
	    channel data always precedes right channel data.  The default  is  2
	    channels.

     -d DEVICE, --audio-device=DEVICE
	    use  DEVICE  instead  of the default /dev/dsp to record from or play
	    to.

     -e SECS, --end-record-time=SECS
	    directs rawrec to put SECS seconds of silence  at  the  end  of  the
	    recording run.  Note that this silent padding is added virtually in-
	    stantaneously,  and  has  little or no impact on the wall clock time
	    rawrec takes to run.  If rawrec is interrupted by  a  signal  before
	    the  recording  run  is finished, this silence will never get added.
	    This option is only applicable to rawrec, and is ignored if given to
	    rawplay.  If both -e and -E are specified, the one which will result
	    in more silent data being recorded will be used.  The default is 0.

     -E SAMPS, --end-record-samples=SAMPS
	    directs rawrec to put SAMPS samples of silence at  the  end  of  the
	    recording  run.  A sample consists of bits_per_sample * channels / 8
	    bytes of data.  In other respects, this option works in the same way
	    as -e , above.  The default is 0.

     -f FMT, --sample-format=FMT
	    sets the format to be used for the samples for individual  channels.
	    FMT may be one of the following strings:

	       s16_le	   Signed 16 bit little endian.

	       s16_be	   Signed 16 bit big endian.

	       u16_le	   Unsigned 16 bit little endian.

	       u16_be	   Unsigned 16 bit big endian.

	       s8	   Signed eight bit.

	       u8	   Unsigned eight bit.

	    Not all format are supported by all sound cards.	     The default
     is s16_le.

     -g FRAG_SZ, --fragment-size=FRAG_SZ
	    explicity sets the kernel audio  buffer  fragment  size  to  FRAG_SZ
	    bytes.   Smaller fragment sizes will result in lower latency, larger
	    sizes will give better odds of getting smooth recording or	playback
	    under  load.  Note that the latency caused by the use of large block
	    sizes may cause the overall run time to increase  noticably,  though
	    the  actual amount of data recorded will not change.  Large fragment
	    sizes also increase signal response latency in some  cases.   Modern
	    kernel  audio  drivers do a fine job of picking a fragment size that
	    results in smooth, low-latency audio for a given set of sampling pa-
	    rameters (sampling speed, bits per sample, and number of  channels),
	    the  default behavior is to let it do so.  If you know that you must
	    set this option, it needs to be a power of two greater than or equal
	    to 16.

     -h     Hold the dsp device during the entire execution, even when it  isn't
	    strictly  necesary.   In particular, the audio device is held during
	    any silent pausing that may occur at the beginning ( -p or -P  )  or
	    end ( -z or -Z ) of execution.  This toggle starts off.

     -j SECS, --start-jump-time=SECS directs
	    rawplay  to  skip  the first SECS seconds worth of audio data in the
	    argument data file or standard input.  This option is only	applica-
	    ble  to  rawplay, and is ignored if given to rawrec.  If both -j and
	    -J are given, the one which will result in more data  being  skipped
	    is used.  The default is 0.

     -J SAMPS, --start-jump-samples=SAMPS
	    directs rawplay to skip the first SAMPS samples of data it sees.  In
	    other  respects,  this  option  works in the same way as -j , above.
	    The default is 0.

     -p SECS, --start-pause-time=SECS
	    directs rawrec/rawplay to sleep for SECS seconds before recording or
	    playing as specified by the other options.	During	this  time,  the
	    audio  dsp	device is not held, unless the -h toggle is on.  If both
	    -p and -P are specified, the one which will result in a longer pause
	    will be used.  The default is 0.

     -P SAMPS, --start-pause-samples=SAMPS
	    directs rawrec/rawplay to sleep for the time that would be	required
	    to	play  SAMPS  samples  worth of data (at the sampling rate speci-
	    fied).  In other respects, this option works in the same way as -p ,
	    above.  The default is 0.

     -r SECS, --start-record-time=SECS directs
	    rawrec to put SECS seconds	of  silence  at  the  beginning  of  the
	    recording  run.   Note  that this silent padding is added as fast as
	    possible, and generally has little or no impact on	the  wall  clock
	    time rawrec takes to run.  This option is only applicable to rawrec,
	    and  is  ignored  if given to rawplay.  If both -r and -R are speci-
	    fied, the one which will result is more silent data  being	recorded
	    will be used.  The default is 0.

     -R SAMPS, --start-record-samples=SAMPS
	    directs  rawrec  to put SAMPS samples of silence at the beginning of
	    the recording run.	In other respects, this option works in the same
	    way as -r , above.	The default is 0.

     -s SPEED, --sampling-rate=SPEED
	    sets the sampling rate to SPEED samples per second.  Generally SPEED
	    will need to be a value between 8000 and 44100, but some  cards  may
	    be able to handle sampling rates as low as 4000 or as high as 96000.
	    Not  all frequencies between the limits will be available, small ad-
	    justments will be made for you.  If you want  to  determine  exactly
	    what frequency is being used when you request a given SPEED, use the
	    -v option.	The default is 44100.

     -t SECS, --time-limit=SECS
	    directs rawrec/rawplay to play or record SECS seconds worth of data.
	    If	neither -t nor -T are specified, rawrec will record until inter-
	    rupted or until its standard output breaks, and  rawplay  will  play
	    its entire argument file, or until its standard input ends.  If both
	    -t	and -T are specified, the one which will result in more data be-
	    ing recorded or played will be used.  If when playing  a  data  file
	    there is not enough data available to skip (with -j or -J ) and play
	    the  requested  amount  of data, the entire file will be played.  If
	    standard input ends without supplying sufficient data, an error will
	    pe printed when the input ends.  By default, there is no time limit,
	    and execution will proceed until one of the above occurs.

     -T SAMPS, --sample-limit=SAMPS
	    directs rawrec/rawplay to play or  record  SAMPS  samples  worth  of
	    data.  In all other respects this option works like -t , above.

     -v, --verbose
	    enables  verbose  errors  and warnings.  For example, when the exact
	    sampling frequency requested is unavailable, and a nearby  frequency
	    is	picked	instead, there is no warning given unless verbose is on.
	    This option is genally good to use when you need to know what's  go-
	    ing on under the hood.  This toggle starts off.

     -z SECS, --end-pause-time=SECS
	    directs  rawrec/rawplay to sleep for SECS seconds after recording or
	    playing as specified by the other options.	Note that  if  execution
	    was  interruped by a signal during the run, this pause will never be
	    performed.	During the pause, the audio dsp device is not held,  un-
	    less  the -h toggle is on.	If both -p and -P are specified, the one
	    which will result in a longer pause will be used.  The default is 0.

     -Z SAMPS, --end-pause-samples=SAMPS
	    directs rawrec/rawplay to sleep for the time that would be	required
	    to	play  SAMPS  samples  worth of data (at the sampling rate speci-
	    fied).  In other respects, this option works in the same way as -p ,
	    above.  The default is 0.

USING RAWREC/RAWPLAY TO OR FROM STANDARD IO
     rawrec/rawplay can be used effectively in pipelines to  act  as  the  sound
     card  interface for a wide variety of other programs.  However, unlike many
     classical command line utilities, rawrec and rawplay place soft  real  time
     demands  on  the programs they connect to.  There is no way for rawrec/raw-
     play to ensure that these programs will behave well in  this  capacity,  or
     perform consistently if the system is heavily loaded.

SIGNAL HANDLING
     rawrec  and  rawplay respond to most signals by aborting immediately.  This
     means that anything that the command line invocation indicated should  hap-
     pen  at  the end of the run (silent padding with -e or -E, end pausing with
     -z or -Z) won't.  The job control signal SIGTSTP (normally associated  with
     terminal  input Ctrl-Z) is ignored, as there is no reasonable way to handle
     it until Linux Threads become fully POSIX conformant with respect to signal
     handling.	There can be a significant delay (like one second or  more)  be-
     tween  the  time  a  process-terminating signal is delivered to a rawrec or
     rawplay process and the time that the threads spawned by that  process  fi-
     nally  die.   This  would only be irritating if it wasn't for the fact that
     the process in which the initial thread runs reports itself as having  died
     immediatly, even though child threads are still happilly playing or record-
     ing  away and hogging the dsp device.  Special handling is in place for the
     SIGTERM and SIGINT signals which corrects this problem.

RESOURCES
     rawrec/rawplay obviously needs access to a dsp device.  It is best  if  the
     rawrec executable is installed setuid root; if it isn't, it can't lock down
     important	parts  of  its memory space or modify the priority or scheduling
     policy of time critical threads, in other words, it can't provide any  good
     gaurantee	of  decent performance if the system load is high or fluctuates.
     rawrec uses root authority only while doing the  above  things,  and  never
     uses strcpy at all.

DIAGNOSTICS
     rawrec/rawplay  will  complain and die on a variety of resource errors.  If
     the -v option is used, warnings will also be issued for a variety	of  non-
     fatal conditions of potential interest.

     If when playing the ring buffer used to move data between the argument file
     or  stdio and the audio device becomes empty, the audio output may halt mo-
     mentarily, but this is not considered a fatal error.

     rawrec always aborts immediately with a diagnostic if  it	finds  that  the
     ring buffer has become full.

     If  you  are trying to play data from standard input, and rawplay dies com-
     plaining about 'too many empty ring buffer segments',  it	means  that  the
     standard  input  didn't provide enough data fast enough for rawplay to play
     at the requested rate, sample resolution, and  number  of	channels.   This
     could  for  example  happen if you try to run some really expensive (normal
     gunzip works fine) decompression algorithm as the input to rawplay,  or  if
     the  system  load	got heavy and caused a normally affordable decompression
     algorithm to get slow (since the decompression probably  isn't  running  at
     elevated priority).

EXAMPLES
     These  examples  assume  that you have your mixer channels set up correctly
     (i.e. set up so that you can record from some live source and  can  audibly
     play back sampled streams).

     Record  CD quality (44100 sample per second, 2 channel signed 16 bit little
     endian) audio into foo.raw until interrupted:

	  rawrec foo.raw

     Record 100 seconds of half speed unsigned 8 bit  mono  data,  and	issue  a
     warning  if the sampling rate can't be set exactly as desired or some other
     unexpected thing happens:

	  rawrec -t 100 -s 22050 -f u8 -c 1 -v bar.raw

     Play back the data just recorded, at a speed that will make us  sound  like
     maniacal  chipmunks  (the	point here being that rawrec and rawplay deal in
     raw data, its up to the user to make it make sense):

	  rawplay -s 44100 -f u8 -c 1 -v bar.raw

     Record some CD quality sound, then have the sox program pack  it  up  as  a
     .cdr file, ready for CD mastering with cdrecord or the like:

	  rawrec -t 100 | sox -t sw -r 44100 -c 2 - -t cdr foobar.cdr

     Play back the .cdr file:

	  sox -t cdr foobar.cdr -t sw -r 44100 -c 2 - | rawplay -t 100

SEE ALSO
     aumix(1), cdrecord(1), sox(1)

COPYRIGHT
     rawrec/rawplay are Copyright (C) 2006  Britton Leo Kerin

     This program is free software; you can redistribute it and/or modify it un-
     der  the  terms  of the GNU General Public License as published by the Free
     Software Foundation; either version 2 of the License, or (at  your  option)
     any later version.

     This program is distributed in the hope that it will be useful, but WITHOUT
     ANY  WARRANTY; without even the implied warranty of MERCHANTABILITY or FIT-
     NESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
     details.

     You should have received a copy of the GNU  General  Public  License  along
     with  this program; if not, write to the Free Software Foundation, Inc., 59
     Temple Place - Suite 330, Boston, MA 02111-1307, USA.

BUGS
     When playing, if the exact sample rate can't be set as  desired,  the  rate
     may  get adjusted up, possibly causing there to suddenly not be enough data
     in the data file to play for the length of  time  and  with  the  jump  re-
     quested,  even if the math on the command line is correct.  This is not re-
     ally a bug so much as an unfortunate consequence of  sound  card  inconsis-
     tency.  The use of -v can help explain this behavior.

     The  situation  where  the  standard output of rawrec gets connected to the
     standard input of some really slow process has not been investigated  prop-
     erly.

AUTHOR
     Britton Leo Kerin (fsblk@aurora.alaska.edu)

				   04 Jan 2006			       RAWREC(1)

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

home | help