๐ŸŽถ aplay+: A Simple and High-Quality Audio Player

January 4, 2025 ยท View on GitHub

GitHub Repo stars GitHub code size in bytes Lines of code GitHub release (latest by date) MIT License

๐ŸŽง Enjoy BitPerfect audio playback with simplicity and precision!

Logo

๐Ÿ’ฟ Supported File Formats

aplay+ supports a variety of popular audio formats:

  • ๐ŸŒŸ FLAC: High-quality lossless compression
  • ๐ŸŒŠ WAV: Uncompressed audio with crystal-clear quality
  • ๐ŸŽถ MP3: The most commonly used compressed format
  • ๐ŸŽต Ogg Vorbis: Great compression with excellent sound
  • ๐Ÿ“ฑ AAC (mp4/m4a): Widely used in iPhones and YouTube

๐Ÿ”ง How to build

Build Online

Build Locally

  1. Install required libraries:
# dnf install alsa-lib-devel
$ make
  1. Clone the repository and build:
git clone https://github.com/yui0/aplay-.git
cd aplay-
make

๐ŸŒธ How to use

Basic Commands

$ ./aplay+ -h
Usage: ./aplay+ [options] dir

Options:
-h                 Print this help message
-d <device name>   Specify ALSA device [e.g., default hw:0,0 plughw:0,0...]
-f                 Use 32-bit floating-point playback
-r                 Recursively search directories
-x                 Enable random playback
-s <regexp>        Search files with a regex
-t <ext type>      Specify file type (e.g., flac, mp3, wma...)
-p                 Optimize for Linux platforms

Examples

  • ๐Ÿ”€ Random playback:
    $ ./aplay+ -rx .
    
  • ๐ŸŽค Search for a specific artist:
    $ ./aplay+ -rx -d hw:7,0 /Music/ -s ZARD
    
  • ๐ŸŽน Exclude instrumentals from playback:
    $ ./aplay+ -rfx -d hw:7,0 /Music/ -s '^(?!.*nstrumental).*$'
    

๐ŸŒŸ Linux Optimization Settings

๐Ÿš€ Optimize Disk I/O

Add the following to your sysctl.conf:

vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
#dev.hpet.max-user-freq = 3072
vm.overcommit_memory = 1

Apply changes:

sysctl -p

โš™๏ธ Adjust Scheduler Settings

Optimize SSDs and HDDs with the following script:

#!/bin/sh
#cat /sys/block/sd*/queue/scheduler
for FILE in /sys/block/sd*/queue/scheduler
do
	[ -f $FILE ] || continue
	echo -n none > $FILE
done

๐Ÿ’จ Set CPU Performance Mode

Use this script to switch CPU governor to "performance":

#!/bin/sh
#cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
do
	[ -f $CPUFREQ ] || continue
	echo -n performance > $CPUFREQ
done

I/O scheduler

# scheduler for non rotational, SSD
ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
# scheduler for rotational, HDD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

fstrim -v /

Timer

#cat /sys/devices/system/clocksource/clocksource0/current_clocksource
echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource

ulimit -a

๐Ÿ“– References

๐ŸŽต Experience perfect audio playback with aplay+! Start your music journey today!