From 0c314d01592cb1019d6adb2a4a5e4f7d0f45c2da Mon Sep 17 00:00:00 2001 From: FIX94 Date: Tue, 22 Nov 2016 00:37:22 +0100 Subject: [PATCH] (WiiU) more audio driver cleanup --- audio/drivers/wiiu_audio.c | 33 ++++++++++++------------------- wiiu/multivoice.h | 2 ++ wiiu/system/exports/libsndcore2.h | 2 ++ 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/audio/drivers/wiiu_audio.c b/audio/drivers/wiiu_audio.c index 0cb78e496c..6ced370316 100644 --- a/audio/drivers/wiiu_audio.c +++ b/audio/drivers/wiiu_audio.c @@ -106,18 +106,18 @@ static void* ax_audio_init(const char* device, unsigned rate, unsigned latency) DCFlushRange(ax->buffer_r,AX_AUDIO_SIZE); //shared by both voices - AXVoiceOffsets offsets; - offsets.currentOffset = 0; - offsets.loopOffset = 0; - offsets.endOffset = AX_AUDIO_COUNT - 1; - offsets.loopingEnabled = AX_VOICE_LOOP_ENABLED; - offsets.dataType = AX_VOICE_FORMAT_LPCM16; + AXVoiceOffsets offsets[2]; + offsets[0].currentOffset = 0; + offsets[0].loopOffset = 0; + offsets[0].endOffset = AX_AUDIO_COUNT - 1; + offsets[0].loopingEnabled = AX_VOICE_LOOP_ENABLED; + offsets[0].dataType = AX_VOICE_FORMAT_LPCM16; + memcpy(&offsets[1], &offsets[0], sizeof(AXVoiceOffsets)); - offsets.data = ax->buffer_l; - AXSetVoiceOffsets(ax->mvoice->v[0], &offsets); - - offsets.data = ax->buffer_r; - AXSetVoiceOffsets(ax->mvoice->v[1], &offsets); + //different buffers per voice + offsets[0].data = ax->buffer_l; + offsets[1].data = ax->buffer_r; + AXSetMultiVoiceOffsets(ax->mvoice, offsets); AXSetMultiVoiceSrcType(ax->mvoice, AX_VOICE_SRC_TYPE_NONE); AXSetMultiVoiceSrcRatio(ax->mvoice, 1.0f); @@ -125,15 +125,8 @@ static void* ax_audio_init(const char* device, unsigned rate, unsigned latency) AXVoiceVeData ve = {0xF000, 0}; AXSetMultiVoiceVe(ax->mvoice, &ve); - u32 mix[24] = {0}; - mix[0] = 0x80000000; - AXSetVoiceDeviceMix(ax->mvoice->v[0], AX_DEVICE_TYPE_DRC, 0, (AXVoiceDeviceMixData*)mix); - AXSetVoiceDeviceMix(ax->mvoice->v[0], AX_DEVICE_TYPE_TV, 0, (AXVoiceDeviceMixData*)mix); - - mix[0] = 0; - mix[4] = 0x80000000; - AXSetVoiceDeviceMix(ax->mvoice->v[1], AX_DEVICE_TYPE_DRC, 0, (AXVoiceDeviceMixData*)mix); - AXSetVoiceDeviceMix(ax->mvoice->v[1], AX_DEVICE_TYPE_TV, 0, (AXVoiceDeviceMixData*)mix); + AXSetMultiVoiceDeviceMix(ax->mvoice, AX_DEVICE_TYPE_DRC, 0, 0, 0x8000, 0); + AXSetMultiVoiceDeviceMix(ax->mvoice, AX_DEVICE_TYPE_TV, 0, 0, 0x8000, 0); AXSetMultiVoiceState(ax->mvoice, AX_VOICE_STATE_STOPPED); diff --git a/wiiu/multivoice.h b/wiiu/multivoice.h index 519d11a6c9..5f197d7216 100644 --- a/wiiu/multivoice.h +++ b/wiiu/multivoice.h @@ -10,6 +10,8 @@ typedef struct } AXMVoice; void AXAcquireMultiVoice(uint32_t prio, void *cb, uint32_t cbarg, void *setup, AXMVoice **mvoice); +void AXSetMultiVoiceDeviceMix(AXMVoice *mvoice, AXDeviceType type, uint32_t id, uint32_t bus, uint16_t vol, int16_t delta); +void AXSetMultiVoiceOffsets(AXMVoice *mvoice, AXVoiceOffsets *offsets); void AXSetMultiVoiceState(AXMVoice *mvoice, AXVoiceState state); void AXSetMultiVoiceVe(AXMVoice *mvoice, AXVoiceVeData *veData); void AXSetMultiVoiceSrcType(AXMVoice *mvoice, AXVoiceSrcType type); diff --git a/wiiu/system/exports/libsndcore2.h b/wiiu/system/exports/libsndcore2.h index d6f30b2443..3a6979fe56 100644 --- a/wiiu/system/exports/libsndcore2.h +++ b/wiiu/system/exports/libsndcore2.h @@ -3,6 +3,8 @@ EXPORT_BEGIN(sndcore2.rpl); #include "../rpl/libsndcore2/exports.h" EXPORT(AXAcquireMultiVoice); +EXPORT(AXSetMultiVoiceDeviceMix); +EXPORT(AXSetMultiVoiceOffsets); EXPORT(AXSetMultiVoiceState); EXPORT(AXSetMultiVoiceVe); EXPORT(AXSetMultiVoiceSrcType);