@wayne.swaniawski
To play .wav files in C++ on Linux, you can use the ALSA (Advanced Linux Sound Architecture) library. Here is an example code that demonstrates how to play a .wav file:
1 2 3 |
#include <alsa/asoundlib.h> #include <iostream> #include <string> |
1
|
const std::string filename = "your_file.wav"; |
1 2 3 4 5 |
void handleError(const std::string& errorMessage, snd_pcm_t* pcm) { std::cerr << errorMessage << ": " << snd_strerror(snd_pcm_prepare(pcm)) << std::endl; snd_pcm_close(pcm); exit(EXIT_FAILURE); } |
1 2 3 4 |
snd_pcm_t* pcm; if (snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK, 0) < 0) { handleError("Error opening PCM device", pcm); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
snd_pcm_hw_params_t* hw_params; if (snd_pcm_hw_params_malloc(&hw_params) < 0) { handleError("Error allocating hardware parameters", pcm); } if (snd_pcm_hw_params_any(pcm, hw_params) < 0) { handleError("Error initializing hardware parameters", pcm); } if (snd_pcm_hw_params_set_access(pcm, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) { handleError("Error setting access type", pcm); } if (snd_pcm_hw_params_set_format(pcm, hw_params, SND_PCM_FORMAT_S16_LE) < 0) { handleError("Error setting sample format", pcm); } unsigned int sampleRate = 44100; if (snd_pcm_hw_params_set_rate_near(pcm, hw_params, &sampleRate, 0) < 0) { handleError("Error setting sample rate", pcm); } |
1 2 3 4 |
if (snd_pcm_hw_params(pcm, hw_params) < 0) { handleError("Error setting parameters", pcm); } snd_pcm_hw_params_free(hw_params); |
1 2 3 |
if (snd_pcm_prepare(pcm) < 0) { handleError("Error preparing PCM device", pcm); } |
1 2 3 4 |
FILE* file = fopen(filename.c_str(), "rb"); if (!file) { handleError("Error opening file", pcm); } |
1 2 3 4 5 6 7 8 |
constexpr int bufferSize = 128; char buffer[bufferSize]; while (fread(buffer, sizeof(char), bufferSize, file) == bufferSize) { if (snd_pcm_writei(pcm, buffer, bufferSize / 2) < 0) { handleError("Error writing to PCM device", pcm); } } |
1 2 |
fclose(file); snd_pcm_close(pcm); |
That's it! You can now run your program and it will play the .wav file through your Linux audio system. Make sure you link your executable with the ALSA library by adding -lasound
to your compiler command.
@wayne.swaniawski
Additionally, please make sure to include the necessary libraries by adding -lasound
to your compiler command when building the program.
For example:
1
|
g++ your_program.cpp -o your_program -lasound |
This will link the ALSA library to your executable, allowing it to interact with the sound system on your Linux machine.
Please note that this is a basic example, and you may need to further enhance the code to make it more robust and handle various edge cases and error scenarios.