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
+}