File Amplimix.h¶
File List > Amplitude > Mixer > Amplimix.h
Go to the documentation of this file
// Copyright (c) 2024-present Sparky Studios. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef _AM_MIXER_AMPLIMIX_H
#define _AM_MIXER_AMPLIMIX_H
#include <SparkyStudios/Audio/Amplitude/Core/AudioBuffer.h>
#include <SparkyStudios/Audio/Amplitude/Core/Common.h>
#include <SparkyStudios/Audio/Amplitude/Core/Device.h>
#include <SparkyStudios/Audio/Amplitude/Core/Entity.h>
#include <SparkyStudios/Audio/Amplitude/Core/Listener.h>
#include <SparkyStudios/Audio/Amplitude/Core/Playback/Bus.h>
#include <SparkyStudios/Audio/Amplitude/Core/Playback/Channel.h>
#include <SparkyStudios/Audio/Amplitude/Core/Playback/ChannelInstance.h>
#include <SparkyStudios/Audio/Amplitude/Core/Room.h>
#include <SparkyStudios/Audio/Amplitude/Sound/Attenuation.h>
namespace SparkyStudios::Audio::Amplitude
{
class Amplimix;
class EffectInstance;
class Event;
class Sound;
AM_CALLBACK(void, AfterMixCallback)(const Amplimix* mixer, const AudioBuffer* buffer, AmUInt32 frames);
class AM_API_PUBLIC AmplimixLayer
{
public:
virtual ~AmplimixLayer() = default;
virtual AmUInt32 GetId() const = 0;
virtual AmUInt64 GetStartPosition() const = 0;
virtual AmUInt64 GetEndPosition() const = 0;
virtual AmUInt64 GetCurrentPosition() const = 0;
virtual AmReal32 GetGain() const = 0;
virtual AmReal32 GetPitch() const = 0;
virtual AmReal32 GetObstruction() const = 0;
virtual AmReal32 GetOcclusion() const = 0;
virtual AmReal32 GetPlaySpeed() const = 0;
virtual AmVector3 GetLocation() const = 0;
virtual Entity GetEntity() const = 0;
virtual Listener GetListener() const = 0;
virtual Room GetRoom() const = 0;
virtual Channel GetChannel() const = 0;
virtual Bus GetBus() const = 0;
virtual SoundFormat GetSoundFormat() const = 0;
virtual eSpatialization GetSpatialization() const = 0;
virtual bool IsLoopEnabled() const = 0;
virtual bool IsStreamEnabled() const = 0;
virtual const Sound* GetSound() const = 0;
virtual const std::shared_ptr<EffectInstance> GetEffect() const = 0;
virtual const Attenuation* GetAttenuation() const = 0;
virtual AmUInt32 GetSampleRate() const = 0;
[[nodiscard]] virtual bool IsMultiPosition() const = 0;
[[nodiscard]] virtual eChannelInstanceMode GetInstancingMode() const = 0;
[[nodiscard]] virtual AmSize GetInstanceCount() const = 0;
[[nodiscard]] virtual AmVector3 GetInstanceLocation(AmSize index) const = 0;
[[nodiscard]] virtual Room GetInstanceRoom(AmSize index) const = 0;
[[nodiscard]] virtual AmReal32 GetInstanceWeight(AmSize index) const = 0;
[[nodiscard]] virtual AmReal32 GetInstanceGain(AmSize index) const = 0;
};
class AM_API_PUBLIC Amplimix
{
public:
virtual ~Amplimix() = default;
virtual void UpdateDevice(
AmObjectID deviceID,
AmString deviceName,
AmUInt32 deviceOutputSampleRate,
PlaybackOutputChannels deviceOutputChannels,
PlaybackOutputFormat deviceOutputFormat) = 0;
[[nodiscard]] virtual bool IsInitialized() const = 0;
virtual void SetAfterMixCallback(AfterMixCallback callback) = 0;
virtual AmUInt64 Mix(AudioBuffer** outBuffer, AmUInt64 frameCount) = 0;
[[nodiscard]] virtual const DeviceDescription& GetDeviceDescription() const = 0;
};
} // namespace SparkyStudios::Audio::Amplitude
#endif // _AM_MIXER_AMPLIMIX_H