mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-04-26 18:07:30 -04:00
222 lines
8.0 KiB
C++
222 lines
8.0 KiB
C++
/*
|
|
* @file Playback_tests.cpp
|
|
* @author Mateusz Piesta (mateusz.piesta@mudita.com)
|
|
* @date 23.07.19
|
|
* @brief
|
|
* @copyright Copyright (C) 2019 mudita.com
|
|
* @details
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include <memory>
|
|
#include <cstring>
|
|
#include <unistd.h>
|
|
|
|
|
|
#include "catch.hpp"
|
|
|
|
#include "vfs.hpp"
|
|
|
|
#include "Audio/Operation/Operation.hpp"
|
|
#include "Audio/Profiles/ProfilePlaybackLoudspeaker.hpp"
|
|
#include "Audio/Profiles/ProfilePlaybackHeadphones.hpp"
|
|
|
|
using namespace audio;
|
|
|
|
TEST_CASE( "Playback tests" ) {
|
|
|
|
auto cwd = vfs.getcurrdir();
|
|
cwd = cwd.substr(0,cwd.find_last_of("/\\"));
|
|
cwd = cwd.append("/module-audio/tests/samples");
|
|
|
|
|
|
|
|
SECTION("Sample1.wav 16bit 44100Hz stereo")
|
|
{
|
|
|
|
|
|
SECTION("Full playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(6);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.01) );
|
|
}
|
|
|
|
SECTION("Switch profile during playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(1);
|
|
playbackRet.value()->SendEvent(Operation::Event::HeadphonesPlugin,nullptr);
|
|
REQUIRE(playbackRet.value()->GetProfile()->GetName() == "Playback Headphones");
|
|
sleep(2);
|
|
playbackRet.value()->SendEvent(Operation::Event::HeadphonesUnplug,nullptr);
|
|
REQUIRE(playbackRet.value()->GetProfile()->GetName() == "Playback Loudspeaker");
|
|
sleep(3);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.01) );
|
|
}
|
|
|
|
SECTION("Destroy playback object before end of file"){
|
|
{
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(1);
|
|
}
|
|
}
|
|
|
|
SECTION("Pause/Resume/Stop sequence"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(1);
|
|
playbackRet.value()->Pause();
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Paused);
|
|
sleep(1);
|
|
playbackRet.value()->Resume();
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Active);
|
|
sleep(1);
|
|
playbackRet.value()->Stop();
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
}
|
|
|
|
SECTION("Pause/Resume/Stop sequence with profile switching"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(1);
|
|
playbackRet.value()->Pause();
|
|
playbackRet.value()->SendEvent(Operation::Event::HeadphonesPlugin,nullptr);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Paused);
|
|
REQUIRE(playbackRet.value()->GetProfile()->GetName() == "Playback Headphones");
|
|
playbackRet.value()->Resume();
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Active);
|
|
sleep(1);
|
|
playbackRet.value()->Stop();
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
}
|
|
|
|
SECTION("Output volume control and input gain during playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(1);
|
|
playbackRet.value()->SetOutputVolume(0.1);
|
|
REQUIRE(playbackRet.value()->GetOutputVolume() == 0.1f);
|
|
sleep(1);
|
|
playbackRet.value()->SetOutputVolume(0.5);
|
|
REQUIRE(playbackRet.value()->GetOutputVolume() == 0.5f);
|
|
sleep(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SECTION("Sample3.wav 16bit 44100Hz mono"){
|
|
|
|
SECTION("Full playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample3.wav").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(6);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.01) );
|
|
}
|
|
|
|
}
|
|
|
|
SECTION("Sample3.flac 16bit 44100Hz mono"){
|
|
|
|
SECTION("Full playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample3.flac").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(6);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.01) );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
SECTION("Sample1.flac 16bit 44100Hz stereo"){
|
|
|
|
SECTION("Full playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.flac").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(6);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.01) );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Sample1.mp3 16bit 44100Hz stereo"){
|
|
|
|
SECTION("Full playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample1.mp3").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(6);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.1) );
|
|
}
|
|
|
|
}
|
|
|
|
SECTION("Sample3.mp3 16bit 44100Hz mono"){
|
|
|
|
SECTION("Full playback"){
|
|
auto playbackRet = Operation::Create(Operation::Type ::Playback,(cwd + "/sample3.mp3").c_str());
|
|
REQUIRE(playbackRet);
|
|
playbackRet.value()->Start([](AudioEvents event)->int32_t{
|
|
std::cout<<"End of file reached!\n";
|
|
return 0;
|
|
});
|
|
sleep(6);
|
|
REQUIRE(playbackRet.value()->GetState() == Operation::State::Idle);
|
|
REQUIRE( playbackRet.value()->GetPosition() == Approx(5).margin(0.1) );
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|