dwww Home | Manual pages | Find package

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 |
       --separate-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 es-
       sentially 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 de-
       tected automatically and metadata is used for parameters of sample  for-
       mat,  channels,  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
              default is zero, so if this option is omitted then the  transmis-
              sion  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
              transmission, 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 re-
              quired for capture transmission, or  playback  transmission  with
              files  including raw audio data. If the value is less than 1000 ,
              it's interpreted 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
              decided 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>-<se-
              quential number>[.suffix]'.  The suffix is omitted when raw  for-
              mat 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 sub-
              command.

       -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 sub-
              stream,  I/O  operation  immediately  returns  without   blocking
              process. This option 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  para-
              meter of PCM substream. The parameter indicates the number of au-
              dio  data frame per period in buffer of the PCM substream. Actual
              number is decided as a result of interaction between each  imple-
              mentation  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 implementation of the PCM plugins, in-kernel driver,  PCM  I/O
              plugins and scheduling model. For 'hw' PCM plugin in 'irq' sched-
              uling  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 para-
              meter 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 para-
              meter of PCM substream. The parameter indicates the number of au-
              dio data frame in buffer of PCM substream. Actual number  is  de-
              cided  as  a result of interaction between each implementation of
              PCM plugin chained from the selected PCM node, and in-kernel dri-
              ver or PCM I/O plugins.

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

       --buffer-time=#

              This  option configures given value to buffer_time hardware para-
              meter 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  op-
              tion 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 'SCHED-
              ULING MODEL' section.

              When nothing specified, irq model is used.

       -A, --avail-min=#

              This option configures given value to avail-min software  parame-
              ter  of  PCM  substream.  In  blocking mode, the value is used as
              threshold of the number of available audio data frames in  buffer
              of  PCM substream 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
              parameter 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  auto-
              matically  without an explicit call of snd_pcm_start() to the PCM
              substream.

              For capture transmission, this option is useless. The  number  of
              accumulated 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 pa-
              rameter  of PCM substream. The value is used as threshold to stop
              PCM substream automatically. At present, this option has  an  ef-
              fect in cases neither --mmap nor timer value of --sched-model op-
              tion 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 sub-
              stream  stops  automatically  without   an   explicit   call   of
              snd_pcm_stop()  to  the  PCM  substream. 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
              automatically  without  an explicit call of snd_pcm_stop() to the
              PCM substream. 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 sup-
              press conversion of sampling rate for audio data frame.

       --disable-channels

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

       --disable-format

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

       --disable-softvol

              This option has an effect for 'softvol'  plugin  in  alsa-lib  to
              suppress  conversion  of  samples  for audio data frame via addi-
              tional control element.

       --fatal-errors

              This option suppresses recovery operation from XRUN state of run-
              ning PCM substream, then process of this program is going to fin-
              ish as usual.

       --test-nowait

              This option disables any waiter for I/O event  notification.  I/O
              operations  are  iterated  till any of audio data frame is avail-
              able. 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
              available  at  the same time. If nothing specified, libffado per-
              forms 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 com-
              municate.  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  communi-
              cate.  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, libf-
              fado 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 communi-
              cation.  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 play-
       back during 1 second.  The sample format is detected automatically as  a
       result  to  parse  'something'  as  long as it's compliant to one of Mi-
       crosoft/IBM RIFF/Wave, Sparc AU, Creative Tech. voice formats. If  noth-
       ing 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 sam-
       ple 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 dif-
       ferent scheduling models.

   IRQ-based scheduling model
       As a default, period-wakeup mode is used. In this mode,  in-kernel  dri-
       vers  should  operate  hardware  to generate periodical notification for
       transmission of audio data frame. The interval of notification is equiv-
       alent 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 overrun/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 gener-
       ates 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  periodi-
       cal  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  au-
       dio  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 sub-
       stream. 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 transmis-
       sion 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 rea-
       son, this mode is enabled when the PCM applications explicitly configure
       hardware  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
       explicitly 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  appli-
       cations,  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.  Furthermore,  with usage of rewinding/forwarding, applications
       can achieve low latency between transmission position and handling posi-
       tion 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 concerns for some developers  of  drivers  and  applications.  Sec-
       ondary,  CPU time is not used for handlers on the interrupt context. The
       CPU time can be dedicated 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  con-
       sumption 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  impor-
       tant.  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 applications, the granularity in current transmission is re-
       quired  to  decide  correct  timeout for each I/O operation. As of Linux
       kernel v4.21, ALSA PCM interface 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 option has an additional effect to use PCM buffer aligned to
              non-interleaved  order  if  a target device supports. As of 2018,
              PCM buffer of non-interleaved order is hardly used by  sound  de-
              vices.

       -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 option 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
              option 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 op-
              tion 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 maximum number of data frames supported by used file for-
              mat. When reaching to the limitation, used file is  closed,  then
              new  file  is  opened and audio data frames are written. However,
              this option requires 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 op-
              tion has an effect for  capture  transmission  to  generate  file
              paths  according  to given format in which some extra formats are
              available as well as formats supported by  strftime(3).  However,
              this  option  requires 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  op-
              tion 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)  implementa-
              tion, this option has an effect to occupy stdout with some termi-
              nal  control  characters  and  display  vumeter  for monaural and
              stereo channels. However, some problems lay; this feature is just
              for audio data frames with PCM format, this feature brings disor-
              der of terminal after  aborting,  stdout  is  not  available  for
              pipeline.

       -i, --interactive
              This  option is not supported at present. In aplay(1) implementa-
              tion, this option has an effect to occupy stdin for key input and
              suspend/resume PCM substream according to pushed enter key.  How-
              ever,  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,
              therefore  remapping  should  be  done  in userspace. This brings
              overhead to align audio data frames, especially for  mmap  opera-
              tion. Furthermore, as of alsa-lib v1.1.8, some plugins don't sup-
              port  this  feature  expectedly,  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) imple-
              mentation,  these  operations  bring XRUN state to the substream,
              and suspend/resume is done in interactive mode in the above. Some
              developers use  the  signal  for  recovery  test  from  XRUN.  At
              present, no alternative 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  com-
              plexity 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
       module  can  have  several  transmission backends. As a default backend,
       libasound backend is used to perform transmission via alsa-lib APIs. The
       module allows each backend to parse own command line options.

       The container module performs to read/write audio  data  frame  via  de-
       scriptor for file/stream of multimedia container or raw data. The module
       automatically  detect  type of multimedia container and parse parameters
       in its metadata 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 con-
       tainer 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 multiple 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 el-
       ement points to one buffer. Between the mapper module and container mod-
       ule,  a pointer to one buffer is passed because supported media contain-
       ers 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  execu-
       tion 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)

Generated by dwww version 1.16 on Sat Oct 3 07:42:54 CEST 2026.