@ -8,16 +8,20 @@
# include <memory>
# include <vector>
# include "audio_core/algorithm/interpolate.h"
# include "audio_core/audio_out.h"
# include "audio_core/codec.h"
# include "audio_core/stream.h"
# include "common/common_funcs.h"
# include "common/common_types.h"
# include "common/swap.h"
# include "core/hle/kernel/event.h"
# include "core/hle/kernel/object.h"
namespace Kernel {
class Event ;
}
namespace AudioCore {
class AudioOut ;
enum class PlayState : u8 {
Started = 0 ,
Stopped = 1 ,
@ -158,6 +162,8 @@ static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size
class AudioRenderer {
public :
AudioRenderer ( AudioRendererParameter params , Kernel : : SharedPtr < Kernel : : Event > buffer_event ) ;
~ AudioRenderer ( ) ;
std : : vector < u8 > UpdateAudioRenderer ( const std : : vector < u8 > & input_params ) ;
void QueueMixedBuffer ( Buffer : : Tag tag ) ;
void ReleaseAndQueueBuffers ( ) ;
@ -166,45 +172,12 @@ public:
u32 GetMixBufferCount ( ) const ;
private :
class VoiceState {
public :
bool IsPlaying ( ) const {
return is_in_use & & info . play_state = = PlayState : : Started ;
}
const VoiceOutStatus & GetOutStatus ( ) const {
return out_status ;
}
const VoiceInfo & GetInfo ( ) const {
return info ;
}
VoiceInfo & Info ( ) {
return info ;
}
void SetWaveIndex ( std : : size_t index ) ;
std : : vector < s16 > DequeueSamples ( std : : size_t sample_count ) ;
void UpdateState ( ) ;
void RefreshBuffer ( ) ;
private :
bool is_in_use { } ;
bool is_refresh_pending { } ;
std : : size_t wave_index { } ;
std : : size_t offset { } ;
Codec : : ADPCMState adpcm_state { } ;
InterpolationState interp_state { } ;
std : : vector < s16 > samples ;
VoiceOutStatus out_status { } ;
VoiceInfo info { } ;
} ;
class VoiceState ;
AudioRendererParameter worker_params ;
Kernel : : SharedPtr < Kernel : : Event > buffer_event ;
std : : vector < VoiceState > voices ;
std : : unique_ptr < Audio Core: : Audio Out> audio_out ;
std : : unique_ptr < AudioOut > audio_out ;
AudioCore : : StreamPtr stream ;
} ;