changeset 30568:82b685157e2b

doc: Update documentation in audio/ directory. * __get_properties__.m, audioplayer.m, disp.m, get.m, isplaying.m, pause.m, play.m, playblocking.m, resume.m, set.m, stop.m, subsasgn.m, subsref.m, __get_properties__.m, audiorecorder.m, disp.m, get.m, getaudiodata.m, getplayer.m, isrecording.m, pause.m, play.m, record.m, recordblocking.m, resume.m, set.m, stop.m, subsasgn.m, subsref.m, record.m, sound.m, soundsc.m: Re-write lots of documentation for clarity. Add @seealso links in @audioplayer and @audiorecorder classes.
author Rik <rik@octave.org>
date Wed, 29 Dec 2021 18:17:53 -0800
parents 3eeaba530a03
children 2d6e60776588
files scripts/audio/@audioplayer/__get_properties__.m scripts/audio/@audioplayer/audioplayer.m scripts/audio/@audioplayer/disp.m scripts/audio/@audioplayer/get.m scripts/audio/@audioplayer/isplaying.m scripts/audio/@audioplayer/pause.m scripts/audio/@audioplayer/play.m scripts/audio/@audioplayer/playblocking.m scripts/audio/@audioplayer/resume.m scripts/audio/@audioplayer/set.m scripts/audio/@audioplayer/stop.m scripts/audio/@audioplayer/subsasgn.m scripts/audio/@audioplayer/subsref.m scripts/audio/@audiorecorder/__get_properties__.m scripts/audio/@audiorecorder/audiorecorder.m scripts/audio/@audiorecorder/disp.m scripts/audio/@audiorecorder/get.m scripts/audio/@audiorecorder/getaudiodata.m scripts/audio/@audiorecorder/getplayer.m scripts/audio/@audiorecorder/isrecording.m scripts/audio/@audiorecorder/pause.m scripts/audio/@audiorecorder/play.m scripts/audio/@audiorecorder/record.m scripts/audio/@audiorecorder/recordblocking.m scripts/audio/@audiorecorder/resume.m scripts/audio/@audiorecorder/set.m scripts/audio/@audiorecorder/stop.m scripts/audio/@audiorecorder/subsasgn.m scripts/audio/@audiorecorder/subsref.m scripts/audio/record.m scripts/audio/sound.m scripts/audio/soundsc.m
diffstat 32 files changed, 158 insertions(+), 63 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/audio/@audioplayer/__get_properties__.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/__get_properties__.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,6 +27,7 @@
 ## @deftypefn {} {@var{props} =} __get_properties__ (@var{player})
 ## Return a struct containing all named properties of the audioplayer object
 ## @var{player}.
+## @seealso{@audioplayer/get, @audioplayer/set, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function props = __get_properties__ (player)
--- a/scripts/audio/@audioplayer/audioplayer.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/audioplayer.m	Wed Dec 29 18:17:53 2021 -0800
@@ -32,16 +32,35 @@
 ## Create an audioplayer object that will play back data @var{y} at sample
 ## rate @var{fs}.
 ##
-## The optional arguments @var{nbits}, and @var{id} specify the bit depth and
-## player device id, respectively.  Device IDs may be found using the
-## audiodevinfo function.  Given an audioplayer object, use the data from the
-## object to initialize the player.
+## The signal @var{y} can be a vector (mono audio) or a two-dimensional array
+## (multi-channel audio).
+##
+## The optional arguments @var{nbits} and @var{id} specify the number of bits
+## per sample and player device ID, respectively.  Device IDs may be found
+## using the @code{audiodevinfo} function.
+##
+## Given an audiorecorder object @var{recorder}, use the data from the object
+## to initialize the player.
+##
+## The list of actions for an audioplayer object are shown below.  All
+## methods require an audioplayer object as the first argument.
 ##
-## The signal @var{y} can be a vector or a two-dimensional array.
+## @multitable @columnfractions 0.2 0.75
+## @headitem Method @tab Description
+## @item get @tab Read audioplayer property values
+## @item isplaying @tab Return true if audioplayer is playing
+## @item pause @tab Pause audioplayer playback
+## @item play @tab Play audio stored in audioplayer object w/o blocking
+## @item playblocking @tab Play audio stored in audioplayer object
+## @item resume @tab Resume playback after pause
+## @item set @tab Write audioplayer property values
+## @item stop @tab Stop playback
+## @end multitable
 ##
-## The following example will create an audioplayer object that will play
-## back one second of white noise at 44100 sample rate using 8 bits per
-## sample.
+## Example
+##
+## Create an audioplayer object that will play back one second of white noise
+## at 44100 sample rate using 8 bits per sample.
 ##
 ## @example
 ## @group
@@ -50,8 +69,13 @@
 ## play (player);
 ## @end group
 ## @end example
+## @seealso{@audioplayer/get, @audioplayer/isplaying, @audioplayer/pause,
+## @audioplayer/play, @audioplayer/playblocking, @audioplayer/resume,
+## @audioplayer/set, @audioplayer/stop, audiodevinfo,
+## @audiorecorder/audiorecorder, sound, soundsc}
 ## @end deftypefn
 
+################################################################################
 ## FIXME: callbacks don't work properly, apparently because portaudio
 ## will execute the callbacks in a separate thread, and calling Octave
 ## functions in a separate thread which is likely to cause trouble with
@@ -85,6 +109,7 @@
 ## # play for as long as you want
 ## stop (player);
 ## @end group
+################################################################################
 
 function player = audioplayer (varargin)
 
--- a/scripts/audio/@audioplayer/disp.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/disp.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,6 +26,7 @@
 ## -*- texinfo -*-
 ## @deftypefn {} {} disp (@var{player})
 ## Display the properties of the audioplayer object @var{player}.
+## @seealso{@audioplayer/audioplayer}
 ## @end deftypefn
 
 function disp (player)
--- a/scripts/audio/@audioplayer/get.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/get.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,14 +25,16 @@
 
 ## -*- texinfo -*-
 ## @deftypefn  {} {@var{value} =} get (@var{player}, @var{name})
+## @deftypefnx {} {@var{values} =} get (@var{player}, @lbracechar{}@var{name1}, @var{name2}, @dots{}@rbracechar{})
 ## @deftypefnx {} {@var{values} =} get (@var{player})
 ## Return the @var{value} of the property identified by @var{name}.
 ##
 ## If @var{name} is a cell array return the values of the properties
 ## identified by the elements of the cell array.  Given only the player
-## object, return a scalar structure with values of all properties of
-## @var{player}.  The field names of the structure correspond to property
+## object, return a scalar structure with values for all properties of
+## @var{player}.  The field names of the structure correspond to the property
 ## names.
+## @seealso{@audioplayer/set, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function retval = get (varargin)
--- a/scripts/audio/@audioplayer/isplaying.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/isplaying.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,6 +27,7 @@
 ## @deftypefn {} {@var{tf} =} isplaying (@var{player})
 ## Return true if the audioplayer object @var{player} is currently playing back
 ## audio and false otherwise.
+## @seealso{@audioplayer/pause, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function tf = isplaying (player)
--- a/scripts/audio/@audioplayer/pause.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/pause.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,7 +25,8 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {} {} pause (@var{player})
-## Pause the audioplayer @var{player}.
+## Pause playback of audioplayer @var{player}.
+## @seealso{@audioplayer/resume, @audioplayer/stop, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function pause (player)
--- a/scripts/audio/@audioplayer/play.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/play.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,12 +26,16 @@
 ## -*- texinfo -*-
 ## @deftypefn  {} {} play (@var{player})
 ## @deftypefnx {} {} play (@var{player}, @var{start})
-## @deftypefnx {} {} play (@var{player}, @var{limits})
+## @deftypefnx {} {} play (@var{player}, [@var{start}, @var{end}])
 ## Play audio stored in the audioplayer object @var{player} without blocking.
 ##
-## Given optional argument start, begin playing at @var{start} samples in the
-## recording.  Given a two-element vector @var{limits}, begin and end playing
-## at the number of samples specified by the elements of the vector.
+## If the optional argument @var{start} is provided, begin playing
+## @var{start} samples in to the recording.
+##
+## If the optional argument @var{end} is provided, stop playing at
+## @var{end} samples into the recording.
+## @seealso{@audioplayer/playblocking, @audioplayer/pause, @audioplayer/stop,
+## @audioplayer/audioplayer}
 ## @end deftypefn
 
 function play (varargin)
--- a/scripts/audio/@audioplayer/playblocking.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/playblocking.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,12 +26,17 @@
 ## -*- texinfo -*-
 ## @deftypefn  {} {} playblocking (@var{player})
 ## @deftypefnx {} {} playblocking (@var{player}, @var{start})
-## @deftypefnx {} {} playblocking (@var{player}, @var{limits})
-## Play audio stored in the audioplayer object @var{player} with blocking.
+## @deftypefnx {} {} playblocking (@var{player}, [@var{start}, @var{end}])
+## Play audio stored in the audioplayer object @var{player} with blocking
+## (synchronous I/O).
 ##
-## Given optional argument start, begin playing at @var{start} samples in the
-## recording.  Given a two-element vector @var{limits}, begin and end playing
-## at the number of samples specified by the elements of the vector.
+## If the optional argument @var{start} is provided, begin playing
+## @var{start} samples in to the recording.
+##
+## If the optional argument @var{end} is provided, stop playing at
+## @var{end} samples into the recording.
+## @seealso{@audioplayer/play, @audioplayer/pause, @audioplayer/stop,
+## @audioplayer/audioplayer}
 ## @end deftypefn
 
 function playblocking (varargin)
--- a/scripts/audio/@audioplayer/resume.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/resume.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,6 +26,7 @@
 ## -*- texinfo -*-
 ## @deftypefn {} {} resume (@var{player})
 ## Resume playback for the paused audioplayer object @var{player}.
+## @seealso{@audioplayer/pause, @audioplayer/stop, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function resume (player)
--- a/scripts/audio/@audioplayer/set.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/set.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,15 +25,17 @@
 
 ## -*- texinfo -*-
 ## @deftypefn  {} {} set (@var{player}, @var{name}, @var{value})
-## @deftypefnx {} {} set (@var{player}, @var{properties})
+## @deftypefnx {} {} set (@var{player}, @var{name_cell}, @var{value_cell})
+## @deftypefnx {} {} set (@var{player}, @var{properties_struct})
 ## @deftypefnx {} {@var{properties} =} set (@var{player})
 ## Set the value of property specified by @var{name} to a given @var{value}.
 ##
 ## If @var{name} and @var{value} are cell arrays, set each property to the
-## corresponding value.  Given a structure of @var{properties} with fields
+## corresponding value.  Given a structure of properties with fields
 ## corresponding to property names, set the value of those properties to the
-## field values.  Given only the audioplayer object, return a structure of
-## configurable properties (i.e., writeable properties).
+## corresponding field values.  Given only an audioplayer object, return a
+## structure of configurable properties (i.e., writeable properties).
+## @seealso{@audioplayer/get, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function properties = set (varargin)
--- a/scripts/audio/@audioplayer/stop.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/stop.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,8 +25,9 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {} {} stop (@var{player})
-## Stop the playback for the audioplayer @var{player} and reset the
-## relevant variables to their starting values.
+## Stop playback of the audioplayer @var{player} and reset relevant variables
+## to their initial values.
+## @seealso{@audioplayer/pause, @audioplayer/resume, @audioplayer/audioplayer}
 ## @end deftypefn
 
 function stop (player)
--- a/scripts/audio/@audioplayer/subsasgn.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/subsasgn.m	Wed Dec 29 18:17:53 2021 -0800
@@ -28,6 +28,7 @@
 ## Perform subscripted assignment on the audio player object @var{player}.
 ##
 ## Assign the value of @var{rhs} to the player property named by @var{idx}.
+## @seealso{@audioplayer/audioplayer}
 ## @end deftypefn
 
 function value = subsasgn (player, idx, rhs)
--- a/scripts/audio/@audioplayer/subsref.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audioplayer/subsref.m	Wed Dec 29 18:17:53 2021 -0800
@@ -28,6 +28,7 @@
 ## Perform subscripted selection on the audio player object @var{player}.
 ##
 ## Return the player property value named by @var{idx}.
+## @seealso{@audioplayer/audioplayer}
 ## @end deftypefn
 
 function value = subsref (player, idx)
--- a/scripts/audio/@audiorecorder/__get_properties__.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/__get_properties__.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,6 +27,8 @@
 ## @deftypefn {} {@var{props} =} __get_properties__ (@var{recorder})
 ## Return a struct containing all named properties of the recorder object
 ## @var{recorder}.
+## @seealso{@audiorecorder/get, @audiorecorder/set,
+## @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function props = __get_properties__ (recorder)
--- a/scripts/audio/@audiorecorder/audiorecorder.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/audiorecorder.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,25 +25,50 @@
 
 ## -*- texinfo -*-
 ## @deftypefn  {} {@var{recorder} =} audiorecorder ()
-## @deftypefnx {} {@var{recorder} =} audiorecorder (@var{fs}, @var{nbits}, @var{channels})
-## @deftypefnx {} {@var{recorder} =} audiorecorder (@var{fs}, @var{nbits}, @var{channels}, @var{id})
-## Create an audiorecorder object recording 8 bit mono audio at 8000 Hz
+## @deftypefnx {} {@var{recorder} =} audiorecorder (@var{fs}, @var{nbits}, @var{nchannels})
+## @deftypefnx {} {@var{recorder} =} audiorecorder (@var{fs}, @var{nbits}, @var{nchannels}, @var{id})
+## Create an audiorecorder object recording 8-bit mono audio at 8000 Hz
 ## sample rate.
 ##
-## The optional arguments @var{fs}, @var{nbits}, @var{channels}, and @var{id}
-## specify the sample rate, bit depth, number of channels and recording
-## device id, respectively.  Device IDs may be found using the audiodevinfo
-## function.
+## The optional arguments @var{fs}, @var{nbits}, @var{nchannels}, and @var{id}
+## specify the sample rate, number of bits per sample, number of channels, and
+## recording device ID, respectively.  Device IDs may be found using the
+## @code{audiodevinfo} function.
+##
+## The list of actions for an audiorecorder object are shown below.  All
+## methods require an audiorecorder object as the first argument.
+##
+## @multitable @columnfractions 0.22 0.73
+## @headitem Method @tab Description
+## @item get @tab Read audiorecorder property values
+## @item getaudiodata @tab Return audio data as a numeric matrix
+## @item getplayer @tab Return audioplayer loaded with data from audiorecorder
+## @item isrecording @tab Return true if audiorecorder is recording
+## @item pause @tab Pause recording
+## @item play @tab Play audio stored in audiorecorder object
+## @item record @tab Record audio in audiorecorder object w/o blocking
+## @item recordblocking @tab Record audio in audiorecorder object
+## @item resume @tab Resume recording after pause
+## @item set @tab Write audiorecorder property values
+## @item stop @tab Stop recording
+## @end multitable
 ## @end deftypefn
+## @seealso{@audiorecorder/get, @audiorecorder/getaudiodata,
+## @audiorecorder/getplayer, @audiorecorder/isrecording,
+## @audiorecorder/pause, @audiorecorder/play, @audiorecorder/record,
+## @audiorecorder/recordblocking, @audioplayer/resume, @audiorecorder/set,
+## @audiorecorder/stop, audiodevinfo, @audioplayer/audioplayer, record}
 
+################################################################################
 ## FIXME: callbacks don't work properly, apparently because portaudio
 ## will execute the callbacks in a separate thread, and calling Octave
-## functions in a separate thread which is likely to cause trouble with
+## functions in a separate thread is likely to cause trouble with
 ## all of Octave's global data...
 ##
 ## @deftypefnx {} {@var{recorder} =} audiorecorder (@var{function}, @dots{})
 ##
 ## Given a function handle, use that function to process the audio.
+################################################################################
 
 function recorder = audiorecorder (varargin)
 
@@ -97,11 +122,11 @@
 
 %!testif HAVE_PORTAUDIO; audiodevinfo (1) > 0
 %! recorder = audiorecorder ();
-%! settable = set (recorder);
-%! settable.SampleRate = 8000;
-%! settable.Tag = "tag";
-%! settable.UserData = [1, 2; 3, 4];
-%! set (recorder, settable);
+%! props = set (recorder);
+%! props.SampleRate = 8000;
+%! props.Tag = "tag";
+%! props.UserData = [1, 2; 3, 4];
+%! set (recorder, props);
 %! assert (recorder.SampleRate, 8000);
 %! assert (recorder.Tag, "tag");
 %! assert (recorder.UserData, [1, 2; 3, 4]);
--- a/scripts/audio/@audiorecorder/disp.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/disp.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,6 +26,7 @@
 ## -*- texinfo -*-
 ## @deftypefn {} {} disp (@var{recorder})
 ## Display the properties of the audiorecorder object @var{recorder}.
+## @seealso{@audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function disp (recorder)
--- a/scripts/audio/@audiorecorder/get.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/get.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,14 +25,16 @@
 
 ## -*- texinfo -*-
 ## @deftypefn  {} {@var{value} =} get (@var{recorder}, @var{name})
+## @deftypefnx {} {@var{values} =} get (@var{recorder}, @lbracechar{}@var{name1}, @var{name2}, @dots{}@rbracechar{})
 ## @deftypefnx {} {@var{values} =} get (@var{recorder})
 ## Return the @var{value} of the property identified by @var{name}.
 ##
-## If @var{name} is a cell array, return the values of the properties
-## corresponding to the elements of the cell array.  Given only the recorder
-## object, return a scalar structure with values of all properties of
-## @var{recorder}.  The field names of the structure correspond to property
+## If @var{name} is a cell array return the values of the properties
+## identified by the elements of the cell array.  Given only the recorder
+## object, return a scalar structure with values for all properties of
+## @var{recorder}.  The field names of the structure correspond to the property
 ## names.
+## @seealso{@audiorecorder/set, @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function retval = get (varargin)
--- a/scripts/audio/@audiorecorder/getaudiodata.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/getaudiodata.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,12 +26,14 @@
 ## -*- texinfo -*-
 ## @deftypefn  {} {@var{data} =} getaudiodata (@var{recorder})
 ## @deftypefnx {} {@var{data} =} getaudiodata (@var{recorder}, @var{datatype})
-## Return recorder audio data as a matrix with values between -1.0 and 1.0
-## and with as many columns as there are channels in the recorder.
+## Return audio data from audiorecorder object @var{recorder} as a double
+## matrix with values between -1.0 and 1.0 and with as many columns as there
+## are channels in @var{recorder}.
 ##
 ## Given the optional argument @var{datatype}, convert the recorded data
 ## to the specified type, which may be one of @qcode{"double"},
 ## @qcode{"single"}, @qcode{"int16"}, @qcode{"int8"} or @qcode{"uint8"}.
+## @seealso{@audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function data = getaudiodata (varargin)
--- a/scripts/audio/@audiorecorder/getplayer.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/getplayer.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,6 +27,7 @@
 ## @deftypefn {} {@var{player} =} getplayer (@var{recorder})
 ## Return an audioplayer object with data recorded by the audiorecorder object
 ## @var{recorder}.
+## @seealso{@audioplayer/audioplayer, @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function player = getplayer (varargin)
--- a/scripts/audio/@audiorecorder/isrecording.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/isrecording.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,6 +27,7 @@
 ## @deftypefn {} {@var{tf} =} isrecording (@var{recorder})
 ## Return true if the audiorecorder object @var{recorder} is currently
 ## recording audio and false otherwise.
+## @seealso{@audiorecorder/pause, @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function tf = isrecording (recorder)
--- a/scripts/audio/@audiorecorder/pause.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/pause.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,7 +25,9 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {} {} pause (@var{recorder})
-## Pause recording with audiorecorder object @var{recorder}.
+## Pause recording for audiorecorder @var{recorder}.
+## @seealso{@audiorecorder/resume, @audiorecorder/stop,
+## @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function pause (recorder)
--- a/scripts/audio/@audiorecorder/play.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/play.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,14 +27,16 @@
 ## @deftypefn  {} {@var{player} =} play (@var{recorder})
 ## @deftypefnx {} {@var{player} =} play (@var{recorder}, @var{start})
 ## @deftypefnx {} {@var{player} =} play (@var{recorder}, [@var{start}, @var{end}])
-## Play the audio recorded in @var{recorder} and return a corresponding
-## audioplayer object.
+## Play the audio recorded in @var{recorder} without blocking and return a
+## corresponding audioplayer object.
 ##
 ## If the optional argument @var{start} is provided, begin playing
-## @var{start} seconds in to the recording.
+## @var{start} seconds into the recording.
 ##
 ## If the optional argument @var{end} is provided, stop playing at
-## @var{end} seconds in the recording.
+## @var{end} seconds into the recording.
+## @seealso{@audiorecorder/getplayer, @audioplayer/audioplayer, 
+## @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function player = play (varargin)
--- a/scripts/audio/@audiorecorder/record.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/record.m	Wed Dec 29 18:17:53 2021 -0800
@@ -27,10 +27,11 @@
 ## @deftypefn  {} {} record (@var{recorder})
 ## @deftypefnx {} {} record (@var{recorder}, @var{length})
 ## Record audio without blocking using the audiorecorder object
-## @var{recorder} until stopped or paused by the @var{stop} or @var{pause}
-## method.
+## @var{recorder} until paused or stopped by the @var{pause} or @var{stop}
+## methods.
 ##
 ## Given the optional argument @var{length}, record for @var{length} seconds.
+## @seealso{@audiorecorder/recordblocking, @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function record (varargin)
--- a/scripts/audio/@audiorecorder/recordblocking.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/recordblocking.m	Wed Dec 29 18:17:53 2021 -0800
@@ -28,6 +28,7 @@
 ## Record audio with blocking (synchronous I/O).
 ##
 ## The length of the recording in seconds (@var{length}) must be specified.
+## @seealso{@audiorecorder/record, @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function recordblocking (varargin)
--- a/scripts/audio/@audiorecorder/resume.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/resume.m	Wed Dec 29 18:17:53 2021 -0800
@@ -26,6 +26,8 @@
 ## -*- texinfo -*-
 ## @deftypefn {} {} resume (@var{recorder})
 ## Resume recording with the paused audiorecorder object @var{recorder}.
+## @seealso{@audiorecorder/pause, @audiorecorder/stop,
+## @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function resume (recorder)
--- a/scripts/audio/@audiorecorder/set.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/set.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,15 +25,17 @@
 
 ## -*- texinfo -*-
 ## @deftypefn  {} {} set (@var{recorder}, @var{name}, @var{value})
-## @deftypefnx {} {} set (@var{recorder}, @var{properties})
+## @deftypefnx {} {} set (@var{recorder}, @var{name_cell}, @var{value_cell})
+## @deftypefnx {} {} set (@var{recorder}, @var{properties_struct})
 ## @deftypefnx {} {@var{properties} =} set (@var{recorder})
 ## Set the value of property specified by @var{name} to a given @var{value}.
 ##
-## If @var{name} and @var{value} are cell arrays of the same size, set each
-## property to a corresponding value.  Given a structure with fields
+## If @var{name} and @var{value} are cell arrays, set each property to a
+## corresponding value.  Given a structure of properties with fields
 ## corresponding to property names, set the value of those properties to the
-## corresponding field values.  Given only the recorder object, return a
-## configurable properties (i.e., writeable properties).
+## corresponding field values.  Given only a recorder object, return a
+## structure of configurable properties (i.e., writeable properties).
+## @seealso{@audiorecorder/get, @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function properties = set (varargin)
--- a/scripts/audio/@audiorecorder/stop.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/stop.m	Wed Dec 29 18:17:53 2021 -0800
@@ -25,7 +25,10 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {} {} stop (@var{recorder})
-## Stop the audiorecorder object @var{recorder} and clean up any audio streams.
+## Stop recording with audiorecorder object @var{recorder} and clean up any
+## audio streams.
+## @seealso{@audiorecorder/pause, @audiorecorder/resume,
+## @audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function stop (recorder)
--- a/scripts/audio/@audiorecorder/subsasgn.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/subsasgn.m	Wed Dec 29 18:17:53 2021 -0800
@@ -28,6 +28,7 @@
 ## Perform subscripted assignment on the audio recorder object @var{recorder}.
 ##
 ## Assign the value of @var{rhs} to the recorder property named by @var{idx}.
+## @seealso{@audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function value = subsasgn (recorder, idx, rhs)
--- a/scripts/audio/@audiorecorder/subsref.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/@audiorecorder/subsref.m	Wed Dec 29 18:17:53 2021 -0800
@@ -28,6 +28,7 @@
 ## Perform subscripted selection on the audio recorder object @var{recorder}.
 ##
 ## Return the recorder property value named by @var{idx}.
+## @seealso{@audiorecorder/audiorecorder}
 ## @end deftypefn
 
 function value = subsref (recorder, idx)
--- a/scripts/audio/record.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/record.m	Wed Dec 29 18:17:53 2021 -0800
@@ -33,7 +33,7 @@
 ## for recording.
 ##
 ## For more control over audio recording, use the @code{audiorecorder} class.
-## @seealso{sound, soundsc}
+## @seealso{@audiorecorder/audiorecorder, sound, soundsc}
 ## @end deftypefn
 
 function x = record (sec, fs = 8000)
--- a/scripts/audio/sound.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/sound.m	Wed Dec 29 18:17:53 2021 -0800
@@ -30,7 +30,7 @@
 ## Play audio data @var{y} at sample rate @var{fs} to the default audio
 ## device.
 ##
-## The audio signal @var{y} can be a vector or a two-column array, representing
+## The audio signal @var{y} can be a vector or a two-column array representing
 ## mono or stereo audio, respectively.
 ##
 ## If @var{fs} is not given, a default sample rate of 8000 samples per second
@@ -40,7 +40,7 @@
 ## audio device and defaults to 8 bits.
 ##
 ## For more control over audio playback, use the @code{audioplayer} class.
-## @seealso{soundsc, record}
+## @seealso{soundsc, @audioplayer/audioplayer, record}
 ## @end deftypefn
 
 function sound (y, fs, nbits)
--- a/scripts/audio/soundsc.m	Wed Dec 29 11:05:20 2021 -0800
+++ b/scripts/audio/soundsc.m	Wed Dec 29 18:17:53 2021 -0800
@@ -31,7 +31,7 @@
 ## Scale the audio data @var{y} and play it at sample rate @var{fs} to the
 ## default audio device.
 ##
-## The audio signal @var{y} can be a vector or a two-column array, representing
+## The audio signal @var{y} can be a vector or a two-column array representing
 ## mono or stereo audio, respectively.
 ##
 ## If @var{fs} is not given, a default sample rate of 8000 samples per second
@@ -46,7 +46,7 @@
 ## are scaled to the range [-1, 1] instead.
 ##
 ## For more control over audio playback, use the @code{audioplayer} class.
-## @seealso{sound, record}
+## @seealso{sound, @audioplayer/audioplayer, record}
 ## @end deftypefn
 
 function soundsc (y, fs, nbits, yrange)