Visualizing waveforms

### 28.2.12 Visualizing waveforms

The plotwav command displays the waveform of an audio clip.

- plotwav takes one mandatory argument and a sequence of optional arguments:
  - A, an audio clip.
  - Optionally, opts, a sequence of options each of which is one of:
    - tstep=dt, where dt is the size (in seconds) of intervals at which the nodes of the polygonal waveform representation will be computed (by default, dt=duration(A)/500).
    - range, which may be one of:
      - range=[offset,length] for integers offset and length (in samples).
      - range=a..b for floating point numbers a and b (in seconds).
    - color, which may be one of:
      - color=[outercolor,innercolor], where outercolor and innercolor are Xcas colors (by default, outercolor=216 and innercolor=218).
      - color=col, where col is a single color specifying the value for both outercolor and innercolor.
- plotwav(A ⟨,opts ⟩) displays the waveform A, in its entirety or over the optional specified range. If more than one channel is present, they are drawn individually and stacked upon one another from top to bottom. If A is a stereo clip, then the upper waveform belongs to the left channel and the lower waveform to the right channel. The t-axis unit is equal to one second.
- plotwav computes the maximum amplitude and the mean amplitude for positive and negative signal values in intervals of size dt. The obtained points are connected into polygons which are drawn on screen. The maximum amplitude is colored with outercolor and the mean amplitude with innercolor.

#### Examples

With the file gs-16b-2c-44100hz.wav downloaded from here (an excerpt from a piece of band music):

clip1:=readwav("/home/luka/Downloads/gs-16b-2c-44100hz.wav")

a sound clip with 698194 samples at 44100 Hz (16 bit, stereo) |  |  |  |  |  |  |  |  |  |

duration(clip1)

15.8320634921 |  |  |  |  |  |  |  |  |  |

plotwav draws the waveform of each channel separately by going from top to bottom:

plotwav(clip1,range=0.5..12.5)

With the file gettysburg10.wav downloaded from here (a 10 seconds speech):

clip2:=normalize(readwav("/home/luka/Downloads/gettysburg10.wav"),-1):; plotwav(clip2,range=0.0..5.5)

You can choose different colors for the waveform, for example:

plotwav(clip2,range=0.0..5.5,color=[purple,magenta])

By setting the tstep option you can control the “resolution” at which the waveform is displayed. For example:

plotwav(clip2,range=0.0..5.5,tstep=0.1)

To “zoom-in” the waveform, use the range option rather than the mouse wheel:

plotwav(clip2,range=0.5..0.55)