Skip to content
This repository has been archived by the owner on Apr 20, 2024. It is now read-only.

Commit

Permalink
update error handling and substitute mp3 with wav file since mp3 form…
Browse files Browse the repository at this point in the history
…at not supported in sndfile API
  • Loading branch information
MGTheTrain committed Apr 17, 2024
1 parent 052d9a7 commit d2506e4
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 14 deletions.
2 changes: 1 addition & 1 deletion apps/audio-player/src/audio-player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <audio-player.h>

int main(int argc, char *argv[]) {
const char * path = "assets/mp3/file_example_MP3_700KB.mp3";
const char * path = "assets/wav/CantinaBand60.wav";
AudioData audioData;
if (!loadAudioFile(path, &audioData)) {
return 1;
Expand Down
Binary file removed assets/mp3/file_example_MP3_700KB.mp3
Binary file not shown.
Binary file added assets/wav/CantinaBand60.wav
Binary file not shown.
30 changes: 17 additions & 13 deletions modules/audio/src/audio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,42 +51,43 @@ bool loadAudioFile(const char *filename, AudioData *audioData) {
* @return true if playback was successfully started, false otherwise.
*/
bool startPlayback(AudioData *audioData) {
PaError err;

err = Pa_Initialize();
PaError err = Pa_Initialize();
if (err != paNoError) {
std::cerr << "PortAudio error: " << Pa_GetErrorText(err) << std::endl;
std::cerr << "PortAudio initialization failed: " << Pa_GetErrorText(err) << std::endl;
return false;
}

PaStreamParameters outputParameters;
outputParameters.device = Pa_GetDefaultOutputDevice();
if (outputParameters.device == paNoDevice) {
std::cerr << "Error: No default output device." << std::endl;
std::cerr << "Error: No default output device available." << std::endl;
Pa_Terminate();
return false;
}
outputParameters.channelCount = audioData->info.channels;
outputParameters.sampleFormat = paFloat32;
outputParameters.suggestedLatency =
Pa_GetDeviceInfo(outputParameters.device)->defaultHighOutputLatency;
outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultHighOutputLatency;
outputParameters.hostApiSpecificStreamInfo = nullptr;

err = Pa_OpenStream(&audioData->stream,
nullptr, // No input
&outputParameters, SAMPLE_RATE, FRAMES_PER_BUFFER,
&outputParameters,
audioData->info.samplerate,
FRAMES_PER_BUFFER,
paClipOff, // No clipping
nullptr, // No callback
nullptr); // No user data

if (err != paNoError) {
std::cerr << "PortAudio error: " << Pa_GetErrorText(err) << std::endl;
std::cerr << "Failed to open PortAudio stream: " << Pa_GetErrorText(err) << std::endl;
Pa_Terminate();
return false;
}

err = Pa_StartStream(audioData->stream);
if (err != paNoError) {
std::cerr << "PortAudio error: " << Pa_GetErrorText(err) << std::endl;
std::cerr << "Failed to start PortAudio stream: " << Pa_GetErrorText(err) << std::endl;
Pa_CloseStream(audioData->stream);
Pa_Terminate();
return false;
}
Expand All @@ -104,8 +105,11 @@ bool startPlayback(AudioData *audioData) {
* to close.
*/
void closeAudioFile(AudioData *audioData) {
Pa_StopStream(audioData->stream);
Pa_CloseStream(audioData->stream);
if (audioData->stream) {
Pa_StopStream(audioData->stream);
Pa_CloseStream(audioData->stream);
}
if (audioData->file)
sf_close(audioData->file);
Pa_Terminate();
sf_close(audioData->file);
}

0 comments on commit d2506e4

Please sign in to comment.