32 return ratio < 0.01F ? 0.01F : ratio > 100.0F ? 100.0F : ratio;
50 return {1.0F,
static_cast<float>(pan + 100) / 100.0F};
51 return {
static_cast<float>(100 - pan) / 100.0F, 1.0F};
65 std::int32_t
left = 0, std::int32_t
right = 800,
70 return {
static_cast<std::uint8_t
>(
volume), 0};
72 const auto rawPan =
static_cast<std::int32_t
>(
73 (200LL * (
static_cast<std::int64_t
>(
centerX) -
left)) /
91 volume =
static_cast<std::int32_t
>(
92 static_cast<std::int64_t
>(
volume) *
95 return {
static_cast<std::uint8_t
>(
volume),
96 static_cast<std::int8_t
>(pan)};
117 std::shared_ptr<const data::ResourceSnapshot> resources);
133 std::string_view relativePath,
162 [[
nodiscard]] std::expected<void, std::string> ensureAudio();
163 [[
nodiscard]] std::expected<void, std::string> seekVoice(Voice& voice, std::int32_t tick);
164 [[
nodiscard]] std::expected<void, std::string> queueVoiceFromByte(Voice& voice, std::uint64_t
offset);
168 std::shared_ptr<const data::ResourceSnapshot> resources_;
169 std::vector<std::unique_ptr<Voice>> voices_;
170 bool ownsAudioSubsystem_{};
std::atomic< float > left
std::atomic< float > right
data::BoardEdition boardEdition() const noexcept
data::LanguageId language() const noexcept
std::expected< void, std::string > synchronizeSequence(PlaybackKey key, std::int32_t position, bool paused, std::uint64_t seekGeneration)
void stop(PlaybackKey key) noexcept
void setPitch(PlaybackKey key, std::uint32_t hertz) noexcept
void setGain(PlaybackKey key, float gain) noexcept
void setLooping(PlaybackKey key, bool loop) noexcept
void setPanning(PlaybackKey key, std::int32_t percentage) noexcept
Runtime & operator=(const Runtime &)=delete
std::expected< void, std::string > playFile(PlaybackKey key, std::string_view relativePath, float gain=1.0F, bool loop=false, std::uint32_t pitchHertz=0U, std::int32_t panPercentage=0)
bool active(PlaybackKey key) const noexcept
std::expected< void, std::string > play(PlaybackKey key, data::DataId waveDataId, float gain=1.0F, bool loop=false, std::uint32_t pitchHertz=0U, std::int32_t panPercentage=0)
Runtime(const Runtime &)=delete
std::optional< std::int32_t > positionTicks(PlaybackKey key) const noexcept
std::expected< void, std::string > ensureReady()
constexpr Legacy2DSoundMix legacy2DSoundMix(std::uint8_t baseVolume, std::int32_t centerX, std::int32_t left=0, std::int32_t right=800, std::int32_t quietDistance=1000) noexcept
constexpr StereoPanGains legacyPanGains(std::int32_t percentage) noexcept
constexpr float legacyPitchFrequencyRatio(std::uint32_t requestedHertz, std::uint32_t originalHertz) noexcept
auto operator<=>(const PlaybackKey &) const =default