aplay Command in Linux

Introduction to aplay Command in Linux

This tutorial will guide you on leveraging the aplay command within Linux, a component of the ALSA (Advanced Linux Sound Architecture) suite. aplay offers a command-line interface to the ALSA sound system, enabling audio file playback. We'll start with package installation, crucial for aplay functionality. Subsequently, you will discover various aplay options and flags to manipulate audio playback.

This lab focuses on the practical aspects: installing necessary packages for aplay, executing audio files via the aplay command, and understanding available command options and flags. This hands-on approach ensures a strong understanding of aplay, a valuable systemadmin tool for audio management within a Linux environment.

Installing Prerequisites for aplay

This section covers installing the required packages to utilize the aplay command in Linux. As mentioned, aplay is integrated within the ALSA (Advanced Linux Sound Architecture) utilities, acting as a bridge between the user and the ALSA sound system.

Begin by refreshing the package index:

sudo apt-get update

Example output:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done

Then, install the alsa-utils package, which provides the aplay command and associated ALSA utilities:

sudo apt update
sudo apt-get install -y alsa-utils

Example output:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  alsa-firmware-loaders alsa-topology-conf alsa-ucm-conf libatopology2 libsnd-dev libsndfile1 libsndfile1-dev
Suggested packages:
  alsa-oss
The following NEW packages will be installed:
  alsa-firmware-loaders alsa-topology-conf alsa-ucm-conf alsa-utils libatopology2 libsnd-dev libsndfile1 libsndfile1-dev
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,265 kB of archives.
After this operation, 5,120 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 alsa-firmware-loaders amd64 1.2.4-1 [12.1 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 alsa-topology-conf all 1.2.4-1 [11.0 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 alsa-ucm-conf all 1.2.4-1 [89.0 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy/main amd64 alsa-utils amd64 1.2.6-1ubuntu1 [1,153 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 libatopology2 amd64 1.2.4-1 [13.9 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsnd-dev amd64 1.0.29-1 [18.0 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsndfile1 amd64 1.0.31-2 [111 kB]
Get:8 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsndfile1-dev amd64 1.0.31-2 [57.1 kB]
Fetched 1,265 kB in 1s (1,265 kB/s)
Selecting previously unselected package alsa-firmware-loaders.
(Reading database ... 123412 files and directories currently installed.)
Preparing to unpack .../alsa-firmware-loaders_1.2.4-1_amd64.deb ...
Unpacking alsa-firmware-loaders (1.2.4-1) ...
Selecting previously unselected package alsa-topology-conf.
Preparing to unpack .../alsa-topology-conf_1.2.4-1_all.deb ...
Unpacking alsa-topology-conf (1.2.4-1) ...
Selecting previously unselected package alsa-ucm-conf.
Preparing to unpack .../alsa-ucm-conf_1.2.4-1_all.deb ...
Unpacking alsa-ucm-conf (1.2.4-1) ...
Selecting previously unselected package alsa-utils.
Preparing to unpack .../alsa-utils_1.2.6-1ubuntu1_amd64.deb ...
Unpacking alsa-utils (1.2.6-1ubuntu1) ...
Selecting previously unselected package libatopology2:amd64.
Preparing to unpack .../libatopology2_1.2.4-1_amd64.deb ...
Unpacking libatopology2:amd64 (1.2.4-1) ...
Selecting previously unselected package libsnd-dev:amd64.
Preparing to unpack .../libsnd-dev_1.0.29-1_amd64.deb ...
Unpacking libsnd-dev:amd64 (1.0.29-1) ...
Selecting previously unselected package libsndfile1:amd64.
Preparing to unpack .../libsndfile1_1.0.31-2_amd64.deb ...
Unpacking libsndfile1:amd64 (1.0.31-2) ...
Selecting previously unselected package libsndfile1-dev:amd64.
Preparing to unpack .../libsndfile1-dev_1.0.31-2_amd64.deb ...
Unpacking libsndfile1-dev:amd64 (1.0.31-2) ...
Setting up alsa-firmware-loaders (1.2.4-1) ...
Setting up alsa-topology-conf (1.2.4-1) ...
Setting up alsa-ucm-conf (1.2.4-1) ...
Setting up libatopology2:amd64 (1.2.4-1) ...
Setting up libsnd-dev:amd64 (1.0.29-1) ...
Setting up libsndfile1:amd64 (1.0.31-2) ...
Setting up libsndfile1-dev:amd64 (1.0.31-2) ...
Setting up alsa-utils (1.2.6-1ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

With alsa-utils installed, you can now use the aplay command. Let's move on to the next stage.

Playing Audio Files with aplay: A Practical Guide

This section details the usage of the aplay command for audio file playback within Linux.

First, acquire a sample audio file for our experiments:

wget https://www.soundjay.com/button/sounds/beep-07.wav -O ~/project/beep.wav

Example output:

--2023-04-12 08:31:33--  https://www.soundjay.com/button/sounds/beep-07.wav
Resolving www.soundjay.com (www.soundjay.com)... 104.24.108.5, 104.24.109.5
Connecting to www.soundjay.com (www.soundjay.com)|104.24.108.5|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11174 (11K) [audio/x-wav]
Saving to: '~/project/beep.wav'

~/project/beep.wav     100%[===================>]  10.92K  --.-KB/s    in 0s

2023-04-12 08:31:33 (128 MB/s) - '~/project/beep.wav' saved [11174/11174]

Now, initiate audio playback using the aplay command:

aplay ~/project/beep.wav

Example output:

Playing WAVE '/home/labex/project/beep.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

You should now hear the selected audio file being played through your connected audio output device.

To interrupt the playback, use the key combination Ctrl+C.

aplay provides various options to customize audio playback, including volume adjustments and looping. These will be explored in the next section.

Mastering aplay: Options and Flags Explained

This final section will examine the options and flags available for the aplay command in detail.

Let's begin by displaying the help information for the aplay command:

aplay --help

Example output:

Usage: aplay [OPTION]... [FILE]...
Plays a PCM sound file.

Options:
  -h, --help             help
  -D, --device=NAME      set the device name
  -c, --channels=NUM     set the number of channels
  -f, --format=FORMAT    set the sample format
  -r, --rate=RATE        set the sample rate
  -t, --type=TYPE        set the file type
  -v, --version          show version
  -V, --verbose          show PCM hardware parameters
  -q, --quiet            quiet mode
  -l, --list-devices     list all soundcards and digital audio devices
  -L, --list-pcm         list all PCM devices
  -Xalsa-opts            pass options for ALSA backend

Here are some useful examples to try as a systemadmin:

  • Looping an audio file:

    aplay -c 2 -r 44100 -f S16_LE ~/project/beep.wav -l 3

    This command plays beep.wav in stereo (2 channels), at a 44.1 kHz sample rate, using 16-bit little-endian format, and loops it three times.

  • Adjusting the volume level:

    aplay -c 2 -r 44100 -f S16_LE ~/project/beep.wav --volume 50

    This command sets the playback volume of beep.wav to 50%.

  • Listing available audio devices for systemadmin tasks:

    aplay -l

    This command lists all recognized audio devices on your Linux system, useful for troubleshooting and configuration.

Experiment with different options to tailor audio playback to your specific needs as a systemadmin or Linux user.

Conclusion

This lab detailed the process of installing the necessary components for the aplay command within a Linux environment. The aplay command, a key utility within the ALSA (Advanced Linux Sound Architecture) suite, was explored in terms of package installation (alsa-utils) and its various command-line options. These options allow for comprehensive customization of audio playback settings.

We covered the practical usage of aplay, from basic audio file playback to option utilization. This skill set can be readily applied to various audio-related tasks within a Linux-based system.

400+ Linux Commands