diff --git a/module-audio/Audio/Audio.cpp b/module-audio/Audio/Audio.cpp index 4aa4f895a..78a381c82 100644 --- a/module-audio/Audio/Audio.cpp +++ b/module-audio/Audio/Audio.cpp @@ -83,6 +83,9 @@ namespace audio { } currentOperation = std::move(ret.value()); } else { + // If creating operation specified fallback to IdleOperation which is guaranteed to work + currentOperation = Operation::Create(Operation::Type::Idle, "").value_or(nullptr); + currentState = State ::Idle; return static_cast(RetCode::OperationCreateFailed); } diff --git a/module-audio/Audio/Operation/IdleOperation.cpp b/module-audio/Audio/Operation/IdleOperation.cpp index d772357cb..43ac9a180 100644 --- a/module-audio/Audio/Operation/IdleOperation.cpp +++ b/module-audio/Audio/Operation/IdleOperation.cpp @@ -23,12 +23,10 @@ namespace audio { } int32_t IdleOperation::SetOutputVolume(float vol) { - currentProfile->SetOutputVolume(vol); return static_cast(RetCode::Success); } int32_t IdleOperation::SetInputGain(float gain) { - currentProfile->SetInputGain(gain); return static_cast(RetCode::Success); } } \ No newline at end of file diff --git a/module-audio/Audio/Operation/PlaybackOperation.cpp b/module-audio/Audio/Operation/PlaybackOperation.cpp index 27336a7f1..b0ce05644 100644 --- a/module-audio/Audio/Operation/PlaybackOperation.cpp +++ b/module-audio/Audio/Operation/PlaybackOperation.cpp @@ -37,7 +37,8 @@ namespace audio { #endif auto ret = dec->decode(framesPerBuffer, reinterpret_cast(outputBuffer)); #if PERF_STATS_ON == 1 - // LOG_DEBUG("Dec:%dms", xTaskGetTickCount() - tstamp); M.P: left here on purpose, it's handy during sf tests on hardware + LOG_DEBUG("Dec:%dms", xTaskGetTickCount() - tstamp); + // LOG_DEBUG("Watermark:%lu",uxTaskGetStackHighWaterMark2(NULL)); M.P: left here on purpose, it's handy during sf tests on hardware #endif if (ret == 0) { state = State::Idle; @@ -53,10 +54,14 @@ namespace audio { dec = decoder::Create(file); if (dec == nullptr) { - LOG_ERROR("File doesn't exist"); + LOG_ERROR("Error during initializing decoder"); return; } audioDevice = bsp::AudioDevice::Create(currentProfile->GetAudioDeviceType(), audioCallback).value_or(nullptr); + if(audioDevice == nullptr){ + LOG_ERROR("Error creating AudioDevice"); + return; + } isInitialized = true; diff --git a/module-audio/Audio/Operation/RecorderOperation.cpp b/module-audio/Audio/Operation/RecorderOperation.cpp index d3a2f17ed..af041e425 100644 --- a/module-audio/Audio/Operation/RecorderOperation.cpp +++ b/module-audio/Audio/Operation/RecorderOperation.cpp @@ -67,8 +67,18 @@ namespace audio { .chanNr=channels, .sampleRate=currentProfile->GetSampleRate() }); - audioDevice = AudioDevice::Create(currentProfile->GetAudioDeviceType(), audioCallback).value_or(nullptr); + if(enc == nullptr){ + LOG_ERROR("Error during initializing encoder"); + return; + } + + + audioDevice = AudioDevice::Create(currentProfile->GetAudioDeviceType(), audioCallback).value_or(nullptr); + if(audioDevice == nullptr){ + LOG_ERROR("Error creating AudioDevice"); + return; + } isInitialized = true; } diff --git a/module-audio/Audio/decoder/decoder.cpp b/module-audio/Audio/decoder/decoder.cpp index b6b68fab3..f6409c373 100644 --- a/module-audio/Audio/decoder/decoder.cpp +++ b/module-audio/Audio/decoder/decoder.cpp @@ -46,8 +46,7 @@ namespace audio { dec = std::make_unique(file); } - if (dec->fileSize == 0) { - //error + if (!dec->isInitialized) { return nullptr; } else { return dec; diff --git a/module-audio/Audio/decoder/decoder.hpp b/module-audio/Audio/decoder/decoder.hpp index 24a9f8993..3072b6d3f 100644 --- a/module-audio/Audio/decoder/decoder.hpp +++ b/module-audio/Audio/decoder/decoder.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "vfs.hpp" @@ -112,6 +113,8 @@ namespace audio { // Worker buffer used for converting mono stream to stereo std::unique_ptr workerBuffer; + bool isInitialized = false; + }; } diff --git a/module-audio/Audio/decoder/decoderFLAC.cpp b/module-audio/Audio/decoder/decoderFLAC.cpp index 4468bd989..a7b9956b6 100644 --- a/module-audio/Audio/decoder/decoderFLAC.cpp +++ b/module-audio/Audio/decoder/decoderFLAC.cpp @@ -23,10 +23,16 @@ namespace audio { : decoder(fileName), tags(std::make_unique()) { + if(fileSize == 0){ + return; + } + flac = drflac_open_with_metadata(drflac_read, drflac_seek, drflac_meta, this); if (flac == NULL) { - //error + return; } + + isInitialized = true; } diff --git a/module-audio/Audio/decoder/decoderMP3.cpp b/module-audio/Audio/decoder/decoderMP3.cpp index 147f1d2ab..7f3418b58 100644 --- a/module-audio/Audio/decoder/decoderMP3.cpp +++ b/module-audio/Audio/decoder/decoderMP3.cpp @@ -23,16 +23,19 @@ namespace audio { decoder(fileName), tag(std::make_unique()) { + if(fileSize == 0){ + return; + } mp3d = static_cast(malloc(sizeof(mp3dec_t))); mp3dec_init(mp3d); if (!find_first_valid_frame()) { - //error + return; } - + isInitialized = true; } decoderMP3::~decoderMP3() { diff --git a/module-audio/Audio/decoder/decoderWAV.cpp b/module-audio/Audio/decoder/decoderWAV.cpp index e8e46507e..1b4f49c7a 100644 --- a/module-audio/Audio/decoder/decoderWAV.cpp +++ b/module-audio/Audio/decoder/decoderWAV.cpp @@ -15,6 +15,10 @@ namespace audio { decoder(fileName), tag(std::make_unique()) { + if(fileSize == 0){ + return; + } + if (fd == NULL) { return; } @@ -36,6 +40,8 @@ namespace audio { sampleRate = waveHeader.SampleRate; bitsPerSample = waveHeader.BitPerSample; chanNumber = waveHeader.NbrChannels; + + isInitialized = true; } std::unique_ptr decoderWAV::fetchTags() { diff --git a/source/main.cpp b/source/main.cpp index 960c227c0..9b210e394 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -59,7 +59,7 @@ public: sys::Message_t DataReceivedHandler(sys::DataMessage *msgl) override { //auto ret = AudioServiceAPI::PlaybackStart(this,"/home/mateusz/Music/limowreck.mp3"); - auto ret = AudioServiceAPI::PlaybackStart(this,"sys/audio/limowreck.flac"); + auto ret = AudioServiceAPI::PlaybackStart(this,"sys/audio/teee.flac"); AudioServiceAPI::SetOutputVolume(this,0.6); //auto ret = AudioServiceAPI::RecordingStart(this,"sys/audio/rec1mono.wav"); //vTaskDelay(3000);