| #include "rive/audio/audio_engine.hpp" | |
| #include "rive/audio/audio_source.hpp" | |
| #include "rive/audio/audio_reader.hpp" | |
| #include "rive/audio_event.hpp" | |
| #include "rive/assets/audio_asset.hpp" | |
| #include "rive_file_reader.hpp" | |
| #include "catch.hpp" | |
| #include <string> | |
| using namespace rive; | |
| TEST_CASE("audio engine initializes", "[audio]") | |
| { | |
| rcp<AudioEngine> engine = AudioEngine::Make(2, 44100); | |
| REQUIRE(engine != nullptr); | |
| } | |
| static std::vector<uint8_t> loadFile(const char* filename) | |
| { | |
| FILE* fp = fopen(filename, "rb"); | |
| REQUIRE(fp != nullptr); | |
| fseek(fp, 0, SEEK_END); | |
| const size_t length = ftell(fp); | |
| fseek(fp, 0, SEEK_SET); | |
| std::vector<uint8_t> bytes(length); | |
| REQUIRE(fread(bytes.data(), 1, length, fp) == length); | |
| fclose(fp); | |
| return bytes; | |
| } | |
| TEST_CASE("audio source can be opened", "[audio]") | |
| { | |
| rcp<AudioEngine> engine = AudioEngine::Make(2, 44100); | |
| REQUIRE(engine != nullptr); | |
| auto file = loadFile("../../test/assets/audio/what.wav"); | |
| auto span = Span<uint8_t>(file); | |
| AudioSource audioSource(span); | |
| REQUIRE(audioSource.channels() == 2); | |
| REQUIRE(audioSource.sampleRate() == 44100); | |
| // Try some different sample rates. | |
| { | |
| auto reader = audioSource.makeReader(2, 44100); | |
| REQUIRE(reader != nullptr); | |
| REQUIRE(reader->lengthInFrames() == 9688); | |
| } | |
| { | |
| auto reader = audioSource.makeReader(1, 48000); | |
| REQUIRE(reader != nullptr); | |
| REQUIRE(reader->lengthInFrames() == 10544); | |
| } | |
| { | |
| auto reader = audioSource.makeReader(2, 32000); | |
| REQUIRE(reader != nullptr); | |
| REQUIRE(reader->lengthInFrames() == 7029); | |
| } | |
| } | |
| TEST_CASE("file with audio loads correctly", "[text]") | |
| { | |
| auto file = ReadRiveFile("../../test/assets/sound.riv"); | |
| auto artboard = file->artboard(); | |
| REQUIRE(artboard != nullptr); | |
| auto audioEvents = artboard->find<AudioEvent>(); | |
| REQUIRE(audioEvents.size() == 1); | |
| auto audioEvent = audioEvents[0]; | |
| REQUIRE(audioEvent->asset() != nullptr); | |
| REQUIRE(audioEvent->asset()->hasAudioSource()); | |
| // auto textObjects = artboard->find<rive::Text>(); | |
| // REQUIRE(textObjects.size() == 5); | |
| // auto styleObjects = artboard->find<rive::TextStyle>(); | |
| // REQUIRE(styleObjects.size() == 13); | |
| // auto runObjects = artboard->find<rive::TextValueRun>(); | |
| // REQUIRE(runObjects.size() == 22); | |
| // artboard->advance(0.0f); | |
| // rive::NoOpRenderer renderer; | |
| // artboard->draw(&renderer); | |
| } |