Hey everyone! I'm trying to create a simple audio player in C to get more comfortable with the language. However, I'm having difficulty finding a straightforward method to play sound files on Linux. I searched online, but a lot of the suggestions basically said, "Don't do it in C, just use another language," and the examples I saw were really lengthy—over 200 lines! I have attempted to use portaudio, but it seems overly complex. I also tried writing directly to /dev/dsp, which didn't work for me. Ideally, I'd like to just play a .wav file. Any tips would be appreciated! :3
6 Answers
/dev/dsp is really outdated. I'd recommend checking out the ALSA API. You could look at the source for `aplay` to get some ideas. Or maybe consider using raylib or SDL for a simpler setup!
If you’re into command line tools, you might want to look at `paplay`. It’s a straightforward CLI program in C from the PulseAudio project, and you could learn a thing or two from how it works.
You should definitely check out the raylib library, specifically the raudio module. It'll make your life easier. If you don't need the graphics part, you can just grab the raudio library and throw it into your project. Here's a simple code snippet to get you started:
```c
#include
#include "raudio.h"
int main(int argc, char **argv) {
InitAudioDevice();
Sound testsound = LoadSound("./media/testsound1.wav");
PlaySound(testsound);
while (IsSoundPlaying(testsound)) {
// Wait for sound to finish
}
UnloadSound(testsound);
CloseAudioDevice();
}
```
They have great cheatsheets too, super handy!
That looks really straightforward, thanks!
For a more low-level approach, ALSA (Advanced Linux Sound Architecture) is the way to go, and there are tons of examples online to guide you. Here's a link to a useful example: [ALSA Example](https://gist.github.com/ghedo/963382).
I personally use the miniaudio library; it’s minimalistic and works across platforms, which is pretty handy!
While it's not the traditional method, I've used SDL for a bunch of projects, and it's much simpler—think closer to 20 lines instead of 200! It could be a good option for you.

Got it, I stumbled upon the /dev/dsp method on Stack Overflow and thought it would work. Raylib sounds good, I’ll take a look!