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

FreeBSD Manual Pages

  
 
  

home | help
AXFER-TRANSFER(1)	     General Commands Manual	       AXFER-TRANSFER(1)

NAME
     axfer-transfer  -	transferrer  of  audio	data frame for sound devices and
     nodes.

SYNOPSIS
     axfer transfer direction [ common-options ] [ backend-options ] [	filepath
     ]

     axfer transfer direction [ common-options ] [ backend-options ] -I | --sep-
     arate-channels filepath ...

     direction = capture | playback

     common-options = ( read OPTIONS section )

     backend-options = ( read OPTIONS section )

     filepaths = ( read OPTIONS section )

DESCRIPTION
     The transfer subcommand of axfer performs transmission of audio data frames
     for  devices  available  in supported backends. This program is essentially
     designed to use alsa-lib APIs (libasound backend) to handle  sound  devices
     supported by Linux sound subsystem (ALSA).

OPTIONS
   Direction
     capture
	    Operates for capture transmission.

     playback
	    Operates for playback transmission.

   Filepath
     Filepath  is handled as a path relative to current working directory of run
     time if it's not full path from root directory.

     The standard input or output is used if filepath is not specified or  given
     as '-' .

     For  playback  transmission, container format of given filepath is detected
     automatically and metadata is used for parameters of sample  format,  chan-
     nels,  rate,  duration.  If nothing detected, content of given file path is
     handled as raw data. In this case, the parameters should  be  indicated  as
     options.

     Multiple  filepaths  are  allowed	with -I | --separate-channels option. In
     this case, standard input and output is not available. The same filepath is
     not allowed except for paths listed below:
      - /dev/null
      - /dev/zero
      - /dev/full
      - /dev/random
      - /dev/urandom

   Common options
     -h, --help
	    Print help messages and finish run time.

     -q, --quiet
	    Quiet mode. Suppress messages (not sound :))

     -v, --verbose
	    Verbose mode. Runtime dumps supplemental  information  according  to
	    the number of this option given in command line.

     -d, --duration=#
	    Interrupt  after  # seconds. A value of zero means infinity. The de-
	    fault is zero, so if this option is omitted  then  the  transmission
	    process  will  run	until  it  is  killed. Either -d or -s option is
	    available exclusively.

     -s, --samples=#
	    Interrupt after transmission of # number of data frames. A value  of
	    zero  means  infinity.  The  default  is zero, so if this options is
	    omitted then the transmission process will run until it  is  killed.
	    Either -d or -s option is available exclusively.

     -f, --format=FORMAT
	    Indicate format of audio sample. This is required for capture trans-
	    mission,  or  playback  transmission  with files including raw audio
	    data.

	    Available sample format is listed below:
	     - [S8|U8|S16|U16|S32|U32][_LE|_BE]
	     - [S24|U24][_LE|_BE]
	     - FLOAT[_LE|_BE]
	     - FLOAT64[_LE|_BE]
	     - IEC958_SUBFRAME[_LE|_BE]
	     - MU_LAW
	     - A_LAW
	     - [S20|U20][_LE|_BE]
	     - [S24|U24][_3LE|_3BE]
	     - [S20|U20][_3LE|_3BE]
	     - [S18|U18][_3LE|_3BE]
	     - DSD_U8
	     - DSD_[U16|U32][_LE|_BE]

	    If endian-ness is omitted, host endian-ness is used.

	    Some special formats are available:
	     - cd (16 bit little endian, 44100, stereo) [= -f  S16_LE  -c  2  -r
	    44100]
	     -	cdr  (16  bit  big  endian,  44100, stereo) [= -f S16_BE -c 2 -f
	    44100]
	     - dat (16 bit little endian, 48000, stereo) [= -f S16_LE  -c  2  -r
	    48000]

	    If	omitted,  U8  is used as a default. Actual available formats are
	    restricted by each transmission backend.

	    Unavailable sample format is listed below. These format has size  of
	    data frame unaligned to byte unit.

	     - IMA_ADPCM
	     - MPEG
	     - GSM
	     - SPECIAL
	     - G723_24
	     - G723_24_1B
	     - G723_40
	     - G723_40_1B

     -c, --channels=#
	    Indicate  the  number  of  audio data samples per frame. This is re-
	    quired for capture transmission, or playback transmission with files
	    including raw audio data. The value should be between 1 to 256 .  If
	    omitted, 1 is used as a default.

     -r, --rate=#
	    Indicate the number of audio data frame per second. This is required
	    for  capture  transmission,  or playback transmission with files in-
	    cluding raw audio data. If the value is less than 1000 , it's inter-
	    preted by kHz unit. The value should be between 2000 and 192000 . If
	    omitted, 8000 is used as a default.

     -t, --file-type=TYPE
	    Indicate the type of file. This is required  for  capture  transmis-
	    sion. Available types are listed below:
	     - wav: Microsoft/IBM RIFF/Wave format
	     - au, sparc: Sparc AU format
	     - voc: Creative Tech. voice format
	     - raw: raw data

	    When nothing is indicated, for capture transmission, the type is de-
	    cided  according  to  suffix  of filepath , and raw type is used for
	    fallback.

     -I, --separate-channels
	    Indicate this option when several files are going to be handled. For
	    capture transmission, if one filepath is given as filepath , a  list
	    of	filepaths is generated in a formula '<filepath>-<sequential num-
	    ber>[.suffix]'.  The suffix is omitted when raw format of  container
	    is used.

     --dump-hw-params
	    Dump hardware parameters and finish run time if backend supports it.

     --xfer-backend=BACKEND
	    Select  backend  of  transmission  from a list below. The default is
	    libasound.
	     - libasound
	     - libffado (optional if compiled)

   Backend options for libasound
     -D, --device=NODE

	    This option is used to select PCM node  in	libasound  configuration
	    space.   Available nodes are listed by pcm operation of list subcom-
	    mand.

     -N, --nonblock

	    With this option, PCM substream is opened in non-blocking mode. When
	    audio data frame is not available in buffer of  the  PCM  substream,
	    I/O operation immediately returns without blocking process. This op-
	    tion  implicitly  uses --waiter-type option as well to prevent heavy
	    consumption of CPU time.

     -M, --mmap

	    With this option, audio data frame is processed directly  in  buffer
	    of	PCM  substream if selected node supports this operation. Without
	    the option, temporary buffers are used to copy audio data frame  for
	    buffer  of PCM substream.  This option implicitly uses --waiter-type
	    option as well to prevent heavy consumption of CPU time.

     -F, --period-size=#

	    This option configures given value to period_size hardware parameter
	    of PCM substream. The parameter indicates the number of  audio  data
	    frame  per	period	in buffer of the PCM substream. Actual number is
	    decided as a result of interaction between	each  implementation  of
	    PCM  plugin chained from the selected PCM node, and in-kernel driver
	    or PCM I/O plugins.

	    Ideally, the same amount of audio data frame as the value should  be
	    handled  in one I/O operation. Actually, it is not, depending on im-
	    plementation of the PCM plugins, in-kernel driver, PCM  I/O  plugins
	    and scheduling model. For 'hw' PCM plugin in 'irq' scheduling model,
	    the  value	is  used to decide intervals of hardware interrupt, thus
	    the same amount of audio data frame as the value is expected  to  be
	    available for one I/O operation.

     --period-time=#

	    This option configures given value to period_time hardware parameter
	    of	PCM  substream.  This option is similar to --period-size option,
	    however its unit is micro-second.

     -B, --buffer-size=#

	    This option configures given value to buffer_size hardware parameter
	    of PCM substream. The parameter indicates the number of  audio  data
	    frame  in buffer of PCM substream. Actual number is decided as a re-
	    sult of  interaction  between  each  implementation  of  PCM  plugin
	    chained  from the selected PCM node, and in-kernel driver or PCM I/O
	    plugins.

	    Ideally, this is multiples of the number of audio data frame per pe-
	    riod, thus the size of period. Actually, it is not, depending on im-
	    plementation of the PCM plugins, in-kernel driver and PCM I/O  plug-
	    ins.

     --buffer-time=#

	    This option configures given value to buffer_time hardware parameter
	    of	PCM  substream.  This option is similar to --buffer-size option,
	    however its unit is micro-second.

     --waiter-type=TYPE

	    This option indicates the type of waiter for event notification.  At
	    present, four types are available; default , select , poll and epoll
	    .  With  default  type,  'snd_pcm_wait()' is used. With select type,
	    'select(2)' system call is used. With poll	type,  'poll(2)'  system
	    call is used. With epoll type, Linux-specific 'epoll(7)' system call
	    is used.

	    This  option  should  correspond  to one of --nonblock or --mmap op-
	    tions, or timer value of --sched-model option.  Neither this  option
	    nor --test-nowait is available at the same time.

     --sched-model=MODEL

	    This  option  selects  scheduling model for process of this program.
	    One of irq or timer is available. In detail, please read 'SCHEDULING
	    MODEL' section.

	    When nothing specified, irq model is used.

     -A, --avail-min=#

	    This option configures given value to avail-min  software  parameter
	    of	PCM  substream. In blocking mode, the value is used as threshold
	    of the number of available audio data frames in buffer of  PCM  sub-
	    stream  to wake up process blocked by I/O operation. In non-blocking
	    mode, any I/O operation returns -EAGAIN until the  available  number
	    of audio data frame reaches the threshold.

	    This option has an effect in cases neither --mmap nor timer value of
	    --sched-model option is used.

     -R, --start-delay=#

	    This option configures given value to start_threshold software para-
	    meter  of PCM substream. The value is used as threshold to start PCM
	    substream automatically. At present, this option has  an  effect  in
	    cases  neither  --mmap  nor  timer	value of --sched-model option is
	    used.

	    For playback transmission, when the number of accumulated audio data
	    frame in buffer of PCM substream to which this  program  writes  out
	    reaches  the threshold, the PCM substream starts automatically with-
	    out an explicit call of snd_pcm_start() to the PCM substream.

	    For capture transmission, this option is useless. The number of  ac-
	    cumulated audio data frame is not increased without an explicit call
	    of snd_pcm_start() to the PCM substream.

	    This option has an effect in cases neither --mmap nor timer value of
	    --sched-model option is used.

     -T, --stop-delay=#

	    This  option configures given value to stop_threshold software para-
	    meter of PCM substream. The value is used as threshold to  stop  PCM
	    substream  automatically.  At  present, this option has an effect in
	    cases neither --mmap nor timer  value  of  --sched-model  option  is
	    used.

	    For  capture transmission, when the number of accumulated audio data
	    frame in buffer of PCM substream to which a driver or  alsa-lib  PCM
	    plugins  write  reaches the threshold, the PCM substream stops auto-
	    matically without an explicit call of snd_pcm_stop() to the PCM sub-
	    stream. This is a case that  this  program	leaves	the  audio  data
	    frames without reading for a while.

	    For  playback  transmission,  when	the  number available audio data
	    frame in buffer of PCM substream from which a driver or alsa-lib PCM
	    plugins read reaches the threshold, the PCM substream stops automat-
	    ically without an explicit call of snd_pcm_stop() to  the  PCM  sub-
	    stream.  This  is  a  case	that  this program leaves the audio data
	    frames without writing for a while.

	    This option has an effect in cases neither --mmap nor timer value of
	    --sched-model option is used.

     --disable-resample

	    This option has an effect for 'plug' plugin in alsa-lib to	suppress
	    conversion of sampling rate for audio data frame.

     --disable-channels

	    This  option has an effect for 'plug' plugin in alsa-lib to suppress
	    conversion of channels for audio data frame.

     --disable-format

	    This option has an effect for 'plug' plugin in alsa-lib to	suppress
	    conversion of sample format for audio data frame.

     --disable-softvol

	    This  option  has an effect for 'softvol' plugin in alsa-lib to sup-
	    press conversion of samples for audio data frame via additional con-
	    trol element.

     --fatal-errors

	    This option suppresses recovery operation from XRUN state of running
	    PCM substream, then process of this program is going  to  finish  as
	    usual.

     --test-nowait

	    This  option disables any waiter for I/O event notification. I/O op-
	    erations are iterated till any of audio data frame is available. The
	    option brings heavy load in consumption of CPU time.

   Backend options for libffado
     This backend is  automatically  available	when  configure  script  detects
     ffado_streaming_init() symbol in libffado shared object.

     -p, --port=#

	    This option uses given value to decide which 1394 OHCI controller is
	    used  to  communicate.  When  Linux  system  has  two 1394 OHCI con-
	    trollers, 0 or 1 are available. Neither this option nor -g is avail-
	    able at the same time. If nothing specified,  libffado  performs  to
	    communicate  to  units  on IEEE 1394 bus managed by all of 1394 OHCI
	    controller available in Linux system.

     -n, --node=#

	    This option uses given value to decide which unit is used to  commu-
	    nicate.  This  option requires -p option to indicate which 1394 OHCI
	    controller is used to communicate to the specified unit.

     -g, --guid=HEXADECIMAL

	    This option uses given value to decide a target unit to communicate.
	    The value should be prefixed with '0x' and consists  of  hexadecimal
	    literal  letters  (0-9,  a-f,  A-F).  Neither  this option nor -p is
	    available at the same time. If nothing specified, libffado	performs
	    to communicate to units on IEEE 1394 bus managed by all of 1394 OHCI
	    controller available in Linux system.

     --frames-per-period=#

	    This  option  uses	given  value  to decide the number of audio data
	    frame in one read/write operation. The operation is blocked till the
	    number of available audio data frame exceeds the given value.  As  a
	    default, 512 audio data frames is used.

     --periods-per-buffer=#

	    This  option  uses	given  value  to decide the size of intermediate
	    buffer between this program and libffado. As a  default,  2  periods
	    per buffer is used.

     --slave

	    This  option  allows  this	program to run slave mode. In this mode,
	    libffado adds unit directory into configuration  ROM  of  1394  OHCI
	    controller	where Linux system runs. The unit directory can be found
	    by the other node on the same bus.	Linux system running on the node
	    can transfer isochronous packet with audio data frame to  the  unit.
	    This  program  can receive the packet and demultiplex the audio data
	    frame.

     --snoop

	    This option allows this program to run snoop  mode.  In  this  mode,
	    libffado  listens  isochronous  channels  to  which device transfers
	    isochronous packet. When isochronous  communication  starts  by  any
	    unit on the same bus, the packets can be handled by this program.

     --sched-priority=#

	    This   option   executes   pthread_setschedparam()	 in  a	call  of
	    ffado_streaming_init() to  configure  scheduling  policy  and  given
	    value  as its priority for threads related to isochronous communica-
	    tion.  The given value should be within RLIMIT_RTPRIO  parameter  of
	    process. Please read getrlimit(2) for details.

POSIX SIGNALS
     During  transmission,  SIGINT  and SIGTERM will close handled files and PCM
     substream to be going to finish run time.

     SIGTSTP will suspend PCM substream and SIGCONT will resume it. No XRUNs are
     expected. With libffado backend, the suspend/resume is  not  supported  and
     runtime is aborted immediately.

     The other signals perform default behaviours.

EXAMPLES
	 $ axfer transfer playback -d 1 something

     The  above  will transfer audio data frame in 'something' file for playback
     during 1 second.  The sample format is detected automatically as  a  result
     to  parse	'something'  as  long  as it's compliant to one of Microsoft/IBM
     RIFF/Wave, Sparc AU, Creative Tech. voice formats. If nothing detected,  -r
     , -c and -f should be given, or -f should be given with special format.

	 $ axfer transfer playback -r 22050 -c 1 -f S16_LE -t raw something

     The  above  will transfer audio data frame in 'something' file including no
     information of sample format, as  sample  format  of  22050  Hz,  monaural,
     signed  16  bit  little endian PCM for playback. The transmission continues
     till catching SIGINT from keyboard or SIGTERM by kill(1) .

	 $ axfer transfer capture -d 10 -f cd something.wav

     The above will transfer audio data frame to 'something.wav' file as  sample
     format  of 44.1 kHz, 2 channels, signed 16 bit little endian PCM, during 10
     seconds. The file format is Microsoft/IBM RIFF/Wave according to suffix  of
     the given filepath .

	 $ axfer transfer capture -s 1024 -r 48000 -c 2 -f S32_BE -I -t au channels

     The  above  will  transfer audio data frame as sample format of 48.0 kHz, 2
     channels, signed 32 bit big endian PCM for 1,024 number of data  frames  to
     files named 'channels-1.au' and 'channels-2.au'.

SCHEDULING MODEL
     In  a design of ALSA PCM core, runtime of PCM substream supports two modes;
     period-wakeup and no-period-wakeup.  These  two  modes  are  for  different
     scheduling models.

   IRQ-based scheduling model
     As  a  default, period-wakeup mode is used. In this mode, in-kernel drivers
     should operate hardware to generate periodical notification  for  transmis-
     sion of audio data frame. The interval of notification is equivalent to the
     same  amount  of  audio  data frame as one period of buffer, against actual
     time.

     In a handler assigned to the notification, a helper function  of  ALSA  PCM
     core  is called to update a position to head of hardware transmission, then
     compare it with a position to head of application operation to judge  over-
     run/underrun (XRUN) and to wake up blocked processes.

     For  this	purpose, hardware IRQ of controller for serial audio bus such as
     Inter-IC sound is typically used. In this case,  the  controller  generates
     the  IRQ  according to transmission on the serial audio bus. In the handler
     assigned to the IRQ, direct media access (DMA)  transmission  is  requested
     between dedicated host memory and device memory.

     If  target  hardware doesn't support this kind of mechanism, the periodical
     notification should be emulated by any timer; e.g. hrtimer,  kernel  timer.
     External  PCM  plugins  generated by PCM plugin SDK in alsa-lib should also
     emulate the above behaviour.

     In this mode, PCM applications are programmed according to typical  way  of
     I/O operations. They execute blocking system calls to read/write audio data
     frame  in	buffer	of PCM substream, or blocking system calls to wait until
     any audio data frame is available. In axfer  ,  this  is  called  IRQ-based
     scheduling  model	and  a default behaviour. Users can explicitly configure
     this mode by usage of --sched-model option with irq value.

   Timer-based scheduling model
     The no-period-wakeup mode is an optional mode of runtime of PCM  substream.
     The  mode	assumes  a  specific feature of hardware and assist of in-kernel
     driver and PCM applications. In this mode, in-kernel drivers don't  operate
     hardware to generate periodical notification for transmission of audio data
     frame.   The  hardware  should automatically continue transmission of audio
     data frame without periodical operation of the drivers; e.g.  according  to
     auto-triggered DMA transmission, a chain of registered descriptors.

     In  this  mode,  nothing wakes up blocked processes, therefore PCM applica-
     tions should be programmed without any blocking operation. For this reason,
     this mode is enabled when the PCM applications explicitly	configure  hard-
     ware parameter to runtime of PCM substream, to prevent disorder of existing
     applications.   Additionally,  nothing maintains timing for transmission of
     audio data frame, therefore the PCM applications should voluntarily  handle
     any  timer  to  queue  audio  data frame in buffer of the PCM substream for
     lapse of time. Furthermore, instead of driver, the PCM  application  should
     call  a  helper  function	of ALSA PCM core to update a position to head of
     hardware transmission and to check XRUN.

     In axfer , this is called timer-based scheduling  model  and  available  as
     long  as hardware/driver assists no-period-wakeup runtime. Users should ex-
     plicitly set this mode by usage of --sched-model option with timer value.

     In the scheduling model, PCM applications need to care of	available  space
     on  PCM  buffer  by  lapse  of time, typically by yielding CPU and wait for
     rescheduling. For the yielding, timeout is calculated for preferable amount
     of PCM frames to process. This is convenient to  a  kind  of  applications,
     like  sound servers. when an I/O thread of the server wait for the timeout,
     the other threads can process audio data frames for  server  clients.  Fur-
     thermore,	with usage of rewinding/forwarding, applications can achieve low
     latency between transmission position and handling position  even	if  they
     uses large size of PCM buffers.

   Advantages and issues
     Ideally,  timer-based  scheduling	model has some advantages than IRQ-based
     scheduling model. At first, no interrupt context runs  for  PCM  substream.
     The  PCM  substream is handled in any process context only. No need to care
     of race conditions between IRQ and process contexts. This reduces some con-
     cerns for some developers of drivers and applications. Secondary, CPU  time
     is not used for handlers on the interrupt context. The CPU time can be ded-
     icated for the other tasks. This is good in a point of Time Sharing System.
     Thirdly, hardware is not configured to generate interrupts. This is good in
     a point of reduction of overall power consumption possibly.

     In  either  scheduling model, the hardware should allow drivers to read the
     number of audio data frame transferred between the dedicated memory and the
     device memory for audio serial  bus.  However,  in  timer-based  scheduling
     model,  fine  granularity	and accuracy of the value is important. Actually
     hardware performs transmission between dedicated memory and  device  memory
     for  a small batch of audio data frames or bytes. In a view of PCM applica-
     tions, the granularity in current transmission is required to  decide  cor-
     rect timeout for each I/O operation. As of Linux kernel v4.21, ALSA PCM in-
     terface between kernel/userspace has no feature to report it.

COMPATIBILITY TO APLAY
     The  transfer  subcommand	of  axfer  is  designed to keep compatibility to
     aplay(1). However some options below are  not  compatible	due  to  several
     technical reasons.

     -I, --separate-channels
	    This  option  is supported just for files to store audio data frames
	    corresponding to each channel. In aplay(1) implementation, this  op-
	    tion  has  an additional effect to use PCM buffer aligned to non-in-
	    terleaved order if a target device supports. As of 2018, PCM  buffer
	    of non-interleaved order is hardly used by sound devices.

     -A, --avail-min=#
	    This option indicates threshold to wake up blocked process in a unit
	    of	audio  data  frame. Against aplay(1) implementation, this option
	    has no effect with --mmap option as well as timer  of  --sched-model
	    option.

     -R, --start-delay=#
	    This option indicates threshold to start prepared PCM substream in a
	    unit  of audio data frame. Against aplay(1) implementation, this op-
	    tion  has  no  effect  with  --mmap  option  as  well  as  timer  of
	    --sched-model option.

     -T, --stop-delay=#
	    This  option  indicates threshold to stop running PCM substream in a
	    unit of audio data frame. Against aplay(1) implementation, this  op-
	    tion  has  no  effect  with  --mmap  option  as  well  as  timer  of
	    --sched-model option.

     --max-file-time=#
	    This option is unsupported. In aplay(1) implementation,  the  option
	    has  an effect for capture transmission to save files up to the same
	    number of data frames as the given value by second unit, or the max-
	    imum number of data frames	supported  by  used  file  format.  When
	    reaching  to  the  limitation, used file is closed, then new file is
	    opened and audio data frames are written. However, this  option  re-
	    quires extra handling of files and shall increase complexity of main
	    loop of axfer.

     --use-strftime=FORMAT
	    This  option  is unsupported. In aplay(1) implementation, the option
	    has an effect for capture transmission to generate	file  paths  ac-
	    cording to given format in which some extra formats are available as
	    well  as  formats supported by strftime(3). However, this option re-
	    quires extra string processing for file paths and it's bothersome if
	    written in C language.

     --process-id-file=FILEPATH
	    This option is unsupported. In aplay(1) implementation,  the  option
	    has an effect to create a file for given value and write out process
	    ID	to  it.  This  file  allows users to get process ID and send any
	    POSIX signal to aplay process.  However, this idea has some troubles
	    for file locking when multiple aplay processes  run  with  the  same
	    file.

     -V, --vumeter=TYPE
	    This option is not supported at present. In aplay(1) implementation,
	    this  option  has an effect to occupy stdout with some terminal con-
	    trol characters and display vumeter for monaural  and  stereo  chan-
	    nels.  However,  some  problems  lay; this feature is just for audio
	    data frames with PCM format, this feature brings disorder of  termi-
	    nal after aborting, stdout is not available for pipeline.

     -i, --interactive
	    This option is not supported at present. In aplay(1) implementation,
	    this  option  has  an  effect to occupy stdin for key input and sus-
	    pend/resume PCM substream according to pushed  enter  key.	However,
	    this  feature requires an additional input handling in main loop and
	    leave bothersome operation to maintain PCM substream.

     -m, --chmap=CH1,CH2,...
	    ALSA PCM core and control core doesn't support this feature,  there-
	    fore  remapping should be done in userspace. This brings overhead to
	    align audio data frames, especially for mmap operation. Furthermore,
	    as of alsa-lib v1.1.8, some plugins don't support this  feature  ex-
	    pectedly,  thus  this  option is a lack of transparent operation. At
	    present, this option is not supported yet not to confuse users.

     SIGTSTP, SIGCONT
	    This performs suspend/resume of PCM substream. In aplay(1) implemen-
	    tation, these operations bring XRUN state to the substream, and sus-
	    pend/resume is done in interactive mode in the above. Some	develop-
	    ers  use  the signal for recovery test from XRUN. At present, no al-
	    ternative is supported for the test.

     SIGUSR1
	    This is not supported. In aplay(1) implementation,	this  signal  is
	    assigned  to  a  handler to close a current file to store audio data
	    frame and open a new file to continue processing. However,	as  well
	    as --max-file-time option, this option should increase complexity of
	    main loop of axfer.

DESIGN
   Modular structure
     This program consists of three modules; xfer , mapper and container .  Each
     module has an abstraction layer to enable actual implementation.

		--------     ----------     -------------
     device <-> | xfer | <-> | mapper | <-> | container | <-> file
		--------     ----------     -------------
		 libasound    single	     wav
		 libffado     multiple	     au
					     voc
					     raw

     The xfer module performs actual transmission to devices and nodes. The mod-
     ule can have several transmission backends. As a default backend, libasound
     backend  is  used to perform transmission via alsa-lib APIs. The module al-
     lows each backend to parse own command line options.

     The container module performs to read/write audio data frame via descriptor
     for file/stream of multimedia container or raw data. The  module  automati-
     cally detect type of multimedia container and parse parameters in its meta-
     data  of  data header. At present, three types of multimedia containers are
     supported; Microsoft/IBM RIFF/Wave ( wav ), Sparc AU ( au	)  and	Creative
     Technology voice ( voc ). Additionally, a special container is prepared for
     raw audio data ( raw ).

     The  mapper  module handles buffer layout and alignment for transmission of
     audio data frame.	The module has two implementations; single and	multiple
     .	 The single backend uses one container to construct the buffer. The mul-
     tiple backend uses several containers to construct it.

   Care of copying audio data frame
     Between the xfer module and mapper module, a pointer  to  buffer  including
     audio data frames is passed. This buffer has two shapes for interleaved and
     non-interleaved  order.  For  the former, the pointer points to one buffer.
     For the latter, the pointer points to an array in which each element points
     to one buffer. Between the mapper module and container module, a pointer to
     one buffer is passed because supported media containers including raw  type
     store audio data frames in interleaved order.

     In  passing  audio  data  frame between the modules, axfer is programmed to
     avoid copying between a buffer to another buffer as much as  possible.  For
     example, in some scenarios below, no copying occurs between modules.

      - xfer(mmap/interleaved), mapper(single), container(any)
      - xfer(mmap/non-interleaved), mapper(multiple), containers(any)

   Unit test
     For each of the mapper and container module, unit test is available. To run
     the tests, execute below command:

     $ make test

     Each  test  iterates writing to file and reading to the file for many times
     and it takes long time to finish. Please take care of the execution time if
     running on any CI environment.

SEE ALSO
      axfer(1), axfer-list(1), alsamixer(1), amixer(1)

AUTHOR
     Takashi Sakamoto <o-takashi@sakamocchi.jp>

alsa-utils			28 November 2018	       AXFER-TRANSFER(1)

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

home | help