add out of band audio support ios - abstracted audio! Follow up to #7048! I nuked the custom defines and the miniaudio include. I think this fixes the need for miniaudio and the custom defines @mjtalbot! Give it a shot 🔫 Diffs= 89053041a add out of band audio support ios - abstracted audio! (#7079) Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com> Co-authored-by: Maxwell Talbot <talbot.maxwell@gmail.com>
diff --git a/.rive_head b/.rive_head index efc3ff2..584b93d 100644 --- a/.rive_head +++ b/.rive_head
@@ -1 +1 @@ -99d28e1ac65672076b08f3a044218ec60268c4ae +89053041aea1e6c8559afc4273c4e466e9ff547a
diff --git a/cg_renderer/premake5.lua b/cg_renderer/premake5.lua index d54c7e5..a4a6062 100644 --- a/cg_renderer/premake5.lua +++ b/cg_renderer/premake5.lua
@@ -43,11 +43,4 @@ }) end end - - filter({ 'options:with_rive_text' }) - do - defines({ 'WITH_RIVE_TEXT' }) - end end - -newoption({ trigger = 'with_rive_text', description = 'Enables text experiments' })
diff --git a/include/rive/assets/audio_asset.hpp b/include/rive/assets/audio_asset.hpp index c4f042f..bc8d89a 100644 --- a/include/rive/assets/audio_asset.hpp +++ b/include/rive/assets/audio_asset.hpp
@@ -14,7 +14,6 @@ bool decode(SimpleArray<uint8_t>&, Factory*) override; std::string fileExtension() const override; -#ifdef WITH_RIVE_AUDIO #ifdef TESTING bool hasAudioSource() { return m_audioSource != nullptr; } #endif @@ -25,7 +24,6 @@ private: rcp<AudioSource> m_audioSource; -#endif }; } // namespace rive
diff --git a/include/rive/assets/file_asset.hpp b/include/rive/assets/file_asset.hpp index a8ed721..22915f4 100644 --- a/include/rive/assets/file_asset.hpp +++ b/include/rive/assets/file_asset.hpp
@@ -50,6 +50,7 @@ } } + std::string uniqueName() const; std::string uniqueFilename() const; }; } // namespace rive
diff --git a/include/rive/audio/audio_format.hpp b/include/rive/audio/audio_format.hpp index ab73fe5..330dffe 100644 --- a/include/rive/audio/audio_format.hpp +++ b/include/rive/audio/audio_format.hpp
@@ -1,4 +1,3 @@ -#ifdef WITH_RIVE_AUDIO #ifndef _RIVE_AUDIO_FORMAT_HPP_ #define _RIVE_AUDIO_FORMAT_HPP_ namespace rive @@ -13,5 +12,4 @@ buffered }; } -#endif #endif \ No newline at end of file
diff --git a/include/rive/audio/audio_source.hpp b/include/rive/audio/audio_source.hpp index b38984b..d6153a3 100644 --- a/include/rive/audio/audio_source.hpp +++ b/include/rive/audio/audio_source.hpp
@@ -1,4 +1,3 @@ -#ifdef WITH_RIVE_AUDIO #ifndef _RIVE_AUDIO_SOURCE_HPP_ #define _RIVE_AUDIO_SOURCE_HPP_ @@ -26,24 +25,41 @@ // the AudioSource deletes. AudioSource(rive::Span<float> samples, uint32_t numChannels, uint32_t sampleRate); +#ifdef WITH_RIVE_AUDIO rcp<AudioReader> makeReader(uint32_t numChannels, uint32_t sampleRate); +#endif uint32_t channels(); uint32_t sampleRate(); AudioFormat format() const; - const rive::Span<uint8_t> bytes() const { return m_fileBytes; } + const rive::Span<uint8_t> bytes() const + { +#ifdef WITH_RIVE_AUDIO + return m_fileBytes; +#else + return rive::Span<uint8_t>(nullptr, 0); +#endif + } const rive::Span<float> bufferedSamples() const; - bool isBuffered() const { return m_isBuffered; } + bool isBuffered() const + { +#ifdef WITH_RIVE_AUDIO + return m_isBuffered; +#else + return false; +#endif + } private: +#ifdef WITH_RIVE_AUDIO bool m_isBuffered; uint32_t m_channels; uint32_t m_sampleRate; rive::Span<uint8_t> m_fileBytes; rive::SimpleArray<uint8_t> m_ownedBytes; +#endif }; } // namespace rive -#endif #endif \ No newline at end of file
diff --git a/include/rive/factory.hpp b/include/rive/factory.hpp index 1484c0f..417d4ef 100644 --- a/include/rive/factory.hpp +++ b/include/rive/factory.hpp
@@ -7,6 +7,7 @@ #include "rive/renderer.hpp" #include "rive/text_engine.hpp" +#include "rive/audio/audio_source.hpp" #include "rive/refcnt.hpp" #include "rive/span.hpp" #include "rive/math/aabb.hpp" @@ -58,6 +59,8 @@ virtual rcp<Font> decodeFont(Span<const uint8_t>); + virtual rcp<AudioSource> decodeAudio(Span<const uint8_t>); + // Non-virtual helpers rcp<RenderPath> makeRenderPath(const AABB&);
diff --git a/src/assets/file_asset.cpp b/src/assets/file_asset.cpp index e6205ee..03a8766 100644 --- a/src/assets/file_asset.cpp +++ b/src/assets/file_asset.cpp
@@ -20,19 +20,21 @@ return Super::import(importStack); } -std::string FileAsset::uniqueFilename() const +std::string FileAsset::uniqueName() const { // remove final extension - std::string uniqueFilename = name(); - std::size_t finalDot = uniqueFilename.rfind('.'); + std::string uniqueName = name(); + std::size_t finalDot = uniqueName.rfind('.'); if (finalDot != std::string::npos) { - uniqueFilename = uniqueFilename.substr(0, finalDot); + uniqueName = uniqueName.substr(0, finalDot); } - return uniqueFilename + "-" + std::to_string(assetId()) + "." + fileExtension(); + return uniqueName + "-" + std::to_string(assetId()); } +std::string FileAsset::uniqueFilename() const { return uniqueName() + "." + fileExtension(); } + void FileAsset::copyCdnUuid(const FileAssetBase& object) { // Should never be called.
diff --git a/src/audio/audio_source.cpp b/src/audio/audio_source.cpp index 8cc5b78..8701d9c 100644 --- a/src/audio/audio_source.cpp +++ b/src/audio/audio_source.cpp
@@ -1,12 +1,14 @@ -#ifdef WITH_RIVE_AUDIO #include "rive/audio/audio_source.hpp" +#ifdef WITH_RIVE_AUDIO #include "rive/audio/audio_engine.hpp" #include "rive/audio/audio_sound.hpp" #include "rive/audio/audio_reader.hpp" #include "rive/audio/audio_reader.hpp" +#endif using namespace rive; +#ifdef WITH_RIVE_AUDIO AudioSource::AudioSource(rive::Span<float> samples, uint32_t numChannels, uint32_t sampleRate) : m_isBuffered(true), m_channels(numChannels), @@ -146,5 +148,15 @@ return reader; } - +#else +AudioSource::AudioSource(rive::Span<uint8_t> fileBytes) {} +AudioSource::AudioSource(rive::SimpleArray<uint8_t> fileBytes) {} +AudioSource::AudioSource(rive::Span<float> samples, uint32_t numChannels, uint32_t sampleRate) {} +uint32_t AudioSource::channels() { return 0; } +uint32_t AudioSource::sampleRate() { return 0; } +AudioFormat AudioSource::format() const { return AudioFormat::unknown; } +const rive::Span<float> AudioSource::bufferedSamples() const +{ + return rive::Span<float>(nullptr, 0); +} #endif \ No newline at end of file
diff --git a/src/factory.cpp b/src/factory.cpp index 00b89c1..07e352a 100644 --- a/src/factory.cpp +++ b/src/factory.cpp
@@ -26,3 +26,12 @@ return nullptr; #endif } + +rcp<AudioSource> Factory::decodeAudio(Span<const uint8_t> span) +{ +#ifdef WITH_RIVE_AUDIO + return rcp<AudioSource>(new AudioSource(SimpleArray<uint8_t>(span.data(), span.size()))); +#else + return nullptr; +#endif +}