mkaudiocd - Burn m3u Playlist to CD

Make audio CD (CD-DA) from a variety of audio formats.

This python program was created for the purpose of burning standard "Red Book" audio CDs from m3u playlists.

When a computer is used that doesn't have a CD burner, output to BIN/CUE can be chosen and the disc burned later.

Given an m3u playlist, mkaudiocd will:


Output BIN/CUE from playlist.m3u to the user's home directory:

mkaudiocd /path/to/playlist.m3u -o ~/Music

Burn songs in playlist.m3u to audio cd

mkaudiocd playlist.m3u --burn

Output BIN/CUE of playlist.m3u to current directory using ~/Music/flac as a base directory

mkaudiocd playlist.m3u --dir ~/Music/flac -o .

Burn BIN/CUE to a disc using /dev/sr0

cdrdao write --device /dev/sr0 music.cue


Install the requirements for your distribution


sudo apt install ffmpeg normalize-audio shntool cdrdao


Enable RPM Fusion for your system from and run the following to install all requirements:

sudo dnf install ffmpeg normalize shntool cdrdao

To install (or upgrade) mkaudiocd, clone the git repo (or download the zip), cd to the directory and install

git clone git://
cd mkaudiocd
sudo python install


mkaudiocd requires the following tools to be on the system or users' $PATH:


usage: mkaudiocd [-h] [-d DIRECTORY] [-n {mix,batch,all,none}] [-o OUTPUT]
[-b] [--dev DEV] [-V]

mkaudiocd - Copyright (C) 2017 Josh Wheeler. This program comes with
ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to
redistribute it under certain conditions. See for details.

positional arguments:
playlist              m3u playlist

optional arguments:
-h, --help            show this help message and exit
base directory for audio
-n {mix,batch,all,none}, --normalize {mix,batch,all,none}
mix (default): adjust track gain up or down to a
common average. batch: normalize gain to match the
quietest song. all: normalize to 0dB regardless of
average, none: skip the normalize process
-o OUTPUT, --output OUTPUT
output bin/cue
-b, --burn            burn cd
--device DEVICE       path to cdrecorder
-V, --version         show program's version number and exit

If playlist contains relative paths to music that can't be found, add the directory using --directory

mkaudiocd --directory=/path/to/music playlist.m3u

By default, mkaudiocd will look in paths: $HOME/Music, current working directory, and the same path as m3u playlist as base directories.

The --output feature can be used to store a BIN/CUE to be burned later. This feature is helpful if your audio library is on a computer that does not have a CD burner but wish to transfer the BIN/CUE to a computer that does.

Arguments may be abbreviated e.g. --out for --output, --dir for --directory, etc.


In the event that the CD plays only static, byte order may need to be swapped.

Test byte order (big endian, little endian):

aplay -f S16_BE --rate=44100 -c 2 music.cdda
aplay -f S16_LE --rate=44100 -c 2 music.cdda

If music is heard using S16BE, it's ready to be burned to a cd

cdrdao write --device /dev/sr0 music.cue

If music is heard using S16LE use --swap

cdrdao write --swap --device /dev/sr0 music.cue

Byte order can also be verified visually / numerically using cdrdao show-data file.cue.

cdrdao show-data file.cue
cdrdao show-data --swap file.cue

A correct output shows signed numbers ascending and descending. If numerical randomness is seen, the output will be noise.