| \section{Built-in Module \sectcode{audio}} |
| \bimodindex{audio} |
| |
| \strong{Note:} This module is obsolete, since the hardware to which it |
| interfaces is obsolete. For audio on the Indigo or 4D/35, see |
| built-in module \code{al} above. |
| |
| This module provides rudimentary access to the audio I/O device |
| \file{/dev/audio} on the Silicon Graphics Personal IRIS 4D/25; |
| see {\it audio}(7). It supports the following operations: |
| |
| \renewcommand{\indexsubitem}{(in module audio)} |
| \begin{funcdesc}{setoutgain}{n} |
| Sets the output gain. |
| \iftexi |
| \code{0 <= \var{n} < 256}. |
| \else |
| $0 \leq \var{n} < 256$. |
| %%JHXXX Sets the output gain (0-255). |
| \fi |
| \end{funcdesc} |
| |
| \begin{funcdesc}{getoutgain}{} |
| Returns the output gain. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{setrate}{n} |
| Sets the sampling rate: \code{1} = 32K/sec, \code{2} = 16K/sec, |
| \code{3} = 8K/sec. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{setduration}{n} |
| Sets the `sound duration' in units of 1/100 seconds. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{read}{n} |
| Reads a chunk of |
| \var{n} |
| sampled bytes from the audio input (line in or microphone). |
| The chunk is returned as a string of length n. |
| Each byte encodes one sample as a signed 8-bit quantity using linear |
| encoding. |
| This string can be converted to numbers using \code{chr2num()} described |
| below. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{write}{buf} |
| Writes a chunk of samples to the audio output (speaker). |
| \end{funcdesc} |
| |
| These operations support asynchronous audio I/O: |
| |
| \renewcommand{\indexsubitem}{(in module audio)} |
| \begin{funcdesc}{start_recording}{n} |
| Starts a second thread (a process with shared memory) that begins reading |
| \var{n} |
| bytes from the audio device. |
| The main thread immediately continues. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{wait_recording}{} |
| Waits for the second thread to finish and returns the data read. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{stop_recording}{} |
| Makes the second thread stop reading as soon as possible. |
| Returns the data read so far. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{poll_recording}{} |
| Returns true if the second thread has finished reading (so |
| \code{wait_recording()} would return the data without delay). |
| \end{funcdesc} |
| |
| \begin{funcdesc}{start_playing}{} |
| \funcline{wait_playing}{} |
| \funcline{stop_playing}{} |
| \funcline{poll_playing}{} |
| \begin{sloppypar} |
| Similar but for output. |
| \code{stop_playing()} |
| returns a lower bound for the number of bytes actually played (not very |
| accurate). |
| \end{sloppypar} |
| \end{funcdesc} |
| |
| The following operations do not affect the audio device but are |
| implemented in C for efficiency: |
| |
| \renewcommand{\indexsubitem}{(in module audio)} |
| \begin{funcdesc}{amplify}{buf\, f1\, f2} |
| Amplifies a chunk of samples by a variable factor changing from |
| \code{\var{f1}/256} to \code{\var{f2}/256.} |
| Negative factors are allowed. |
| Resulting values that are to large to fit in a byte are clipped. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{reverse}{buf} |
| Returns a chunk of samples backwards. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{add}{buf1\, buf2} |
| Bytewise adds two chunks of samples. |
| Bytes that exceed the range are clipped. |
| If one buffer is shorter, it is assumed to be padded with zeros. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{chr2num}{buf} |
| Converts a string of sampled bytes as returned by \code{read()} into |
| a list containing the numeric values of the samples. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{num2chr}{list} |
| \begin{sloppypar} |
| Converts a list as returned by |
| \code{chr2num()} |
| back to a buffer acceptable by |
| \code{write()}. |
| \end{sloppypar} |
| \end{funcdesc} |