### 33.5 Audio Data Processing ¶

Octave provides a few functions for dealing with audio data. An audio ‘sample’ is a single output value from an A/D converter, i.e., a small integer number (usually 8 or 16 bits), and audio data is just a series of such samples. It can be characterized by three parameters: the sampling rate (measured in samples per second or Hz, e.g., 8000 or 44100), the number of bits per sample (e.g., 8 or 16), and the number of channels (1 for mono, 2 for stereo, etc.).

There are many different formats for representing such data. Currently, only the two most popular, linear encoding and mu-law encoding, are supported by Octave. There is an excellent FAQ on audio formats by Guido van Rossum guido@cwi.nl which can be found at any FAQ ftp site, in particular in the directory `/pub/usenet/news.answers/audio-fmts` of the archive site `rtfm.mit.edu`.

Octave simply treats audio data as vectors of samples (non-mono data are not supported yet). It is assumed that audio files using linear encoding have one of the extensions `lin` or `raw`, and that files holding data in mu-law encoding end in `au`, `mu`, or `snd`.

`y =` lin2mu `(x)` ¶
`y =` lin2mu `(x, n)` ¶

  Convert audio data from linear to mu-law.

  Linear values use floating point values in the range -1 ≤ x ≤ 1 if n is 0 (default), or n-bit signed integers if n is 8 or 16. Mu-law values are 8-bit unsigned integers in the range 0 ≤ y ≤ 255.

  See also: mu2lin.

`y =` mu2lin `(x)` ¶
`y =` mu2lin `(x, n)` ¶

  Convert audio data from mu-law to linear.

  Mu-law values are 8-bit unsigned integers in the range 0 ≤ y ≤ 255. Linear values use floating point values in the range -linmax ≤ x linmax (where `linmax = 32124/32768 =~ 0.98`) when n is zero (default). If n is 8 or 16 then n-bit signed integers are used instead.

  Programming Note: `mu2lin` maps maximum mu-law inputs to values slightly below the maximum ([-0.98, +0.98]) representable with a linear scale. Because of this, `mu2lin (lin2mu (x))` might not reproduce the original input.

  See also: lin2mu.

`data =` record `(sec)` ¶
`data =` record `(sec, fs)` ¶

  Record sec seconds of audio from the system’s default audio input at a sampling rate of 8000 samples per second.

  If the optional argument fs is given, it specifies the sampling rate for recording.

  For more control over audio recording, use the `audiorecorder` class.

  See also: @audiorecorder/audiorecorder, sound, soundsc.

sound `(y)` ¶
sound `(y, fs)` ¶
sound `(y, fs, nbits)` ¶

  Play audio data y at sample rate fs to the default audio device.

  The audio signal y can be a vector or a two-column array representing mono or stereo audio, respectively.

  If fs is not given, a default sample rate of 8000 samples per second is used.

  The optional argument nbits specifies the bit depth to play to the audio device and defaults to 8 bits.

  For more control over audio playback, use the `audioplayer` class.

  See also: soundsc, @audioplayer/audioplayer, record.

soundsc `(y)` ¶
soundsc `(y, fs)` ¶
soundsc `(y, fs, nbits)` ¶
soundsc `(…, [ymin, ymax])` ¶

  Scale the audio data y and play it at sample rate fs to the default audio device.

  The audio signal y can be a vector or a two-column array representing mono or stereo audio, respectively.

  If fs is not given, a default sample rate of 8000 samples per second is used.

  The optional argument nbits specifies the bit depth to play to the audio device and defaults to 8 bits.

  By default, y is automatically normalized to the range [-1, 1]. If the range [ymin, ymax] is given, then elements of y that fall within the range ymin ≤ y ≤ ymax are scaled to the range [-1, 1] instead.

  For more control over audio playback, use the `audioplayer` class.

  See also: sound, @audioplayer/audioplayer, record.