Linux Audio Essentials
This post is also in the form of a video blog. Watch the video first!
- Youtube: https://youtu.be/HxEXMHcwtlI
The description below is longer then the one on YouTube, which passed the maximum 5000 character limit. The version here has all the full URLs and any extra comments I might add.
Extra Insight
In this video, I explain how audio and sound works on Linux based comptuers and systems. More specifically, I go over the point of sound hardware, kernel drivers such as OSS and ALSA and userspace sound servers such as PulseAudio, Jack and Pipewire.
Along the way, I discuss the advantages and drawbacks of the current implementations, as well as why one implementation is often favored over another. Finally, I discuss the latest-and-greatest sound server, Pipewire, what it means, and how you can benefit from the improvements.
This video is a bit rambly at times, so please stick with me, and I hope you learn something throughout and feed your curiosity. Please feel free to use the timestamps below to skip between sections!
Timestamps
(grouped by topics)
Introduction
- 00:00 - Introduction
The Hardware
- 00:18 - Basic Hardware, Inputs and Outputs
- 00:36 - Sound Cards (and what they do)
- 01:01 - Digital Audio, PCM and extra hardware
Kernel Drivers
- 01:29 - Kernel Drivers! (How to interact with hardware)
- 01:53 - OSS (Open Sound System)
- 02:12 - ALSA (Advanced Linux Sound Architecture)
- 02:46 - ALSA Limitations - hardware mixing/multiplexing
Userspace Sound Servers
- 03:54 - Pulseaudio (and sound servers)
- 04:25 - Benefits of PA - mixing and resampling
- 07:26 - Drawbacks of PA (and JACK introduction)
- 08:13 - JACK and its benefits
- 09:57 - Comparison with PA and other software
Pipewire (and ramble)
- 11:12 - Pipewire (and its benefits)
- 14:05 - Future of Pipewire
- 15:17 - Note on Bluetooth (rant)
- note: mostly fixed!
- 17:52 - Conclusion
Links (and references)
Sound Cards
Check ALSA compatibility of a sound card
DAC and ADC
Nyquist Shannon sampling theorem
- I didn't get to it in this video, but it explains why 44.1 and 48 kHz are perfectly fine.
- More specifically, how we can perfectly reconstruct analog waves provided no aliasing and they are below the nyquist frequency.
Chris Montgomery Videos
- I found these super helpful to understand digital audio and video fundamentals.
- Discusses PCM and more, and also the nyquist stuff from above in video 2.
- Also see Chris' blog while you're at it, some interesting reads:
Kernel Driver Architecture
- I found this a simple overview when researching
OSS
- ie: OSS wasn't bad, and had some afvantages over ALSA, but the licensing switch just prompted people to switch
ALSA
https://www.alsa-project.org/wiki/Main_Page
- The sound card compatibility list is above. The Gentoo and Arch wiki entries are useful.
Sound card multiplexing
- Use a sound server. Don't do this manually https://electronics.stackexchange.com/questions/57476/how-do-i-multiplex-many-signals-into-my-sound-card
Pulseaudio
- As usual, the arch page and examples are good:
Jack
- Homepage: https://jackaudio.org/
- Jack1 git: https://github.com/jackaudio/jack1
- Jack2 git: https://github.com/jackaudio/jack2
- Wiki (and tools using Jack) https://github.com/jackaudio/jackaudio.github.com/wiki
Pipewire
- Hoempage: https://pipewire.org/#about
- Neat demo and features, and other benefits discussed on hackaday here: https://hackaday.com/2021/06/23/pipewire-the-newest-audio-kid-on-the-linux-block/
- Archwiki as always: https://wiki.archlinux.org/title/PipeWire
- Wiki - contains useful config parameters for pulse and jack: https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home
Firewire
- If you have one, your best bet is http://www.ffado.org/
Notes
- 0040 - When I say sound card, most computers have one build in these days, eg: onboard audio. Physical discrete cards are mostly a thing of the past.
- 0250 - Sound card multiplexing also often called hardware mixing.
- 1240 - There is also a “Pro Audio” mode for sound cards that splits all the channels
- 1705 - Most of these disconnection issues are now fixed as of the time of publishing!
- I'll add more notes as I remember when rewatching this.
- Please note that due to classes and school and coop, the filming/editing/uploads of my videos are very delayed, and might not be the most sensitive. This video was filmed April 2021, Edited June-July 2021, Description written August 2021. I hate writing descriptions and thumbnails…
Contact me
Watch this video on Peertube: https://peertube.tonytascioglu.com More info is probably on my wiki: https://wiki.tonytascioglu.com
Copyright 2021 - Tony Tascioglu I'm making this freely available under a CC-BY-SA-NC.
Email: tonytash@pm.me (not monitored 24/7) I might not get to comments on this video until the end of my next school/work term, feel free to post anyways.
I hope you enjoyed the video and learned something!
Shoutouts
Randy MacLeod (and the rest of the Wind River Linux userspace team). I know you had asked me about Pipewire at some point, and I already had this video in the works, so hopefully you find it useful :)
Corrections
- I'll update this as corrections are pointed out.