From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/PS3/Audio/PS3_SoundEngine.cpp | 117 +++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Minecraft.Client/PS3/Audio/PS3_SoundEngine.cpp (limited to 'Minecraft.Client/PS3/Audio') diff --git a/Minecraft.Client/PS3/Audio/PS3_SoundEngine.cpp b/Minecraft.Client/PS3/Audio/PS3_SoundEngine.cpp new file mode 100644 index 00000000..fcce5f05 --- /dev/null +++ b/Minecraft.Client/PS3/Audio/PS3_SoundEngine.cpp @@ -0,0 +1,117 @@ +#include "..\stdafx.h" +#include +#include +#include +#include +#include +#include +#include "..\..\Common\Audio\SoundEngine.h" +#include "..\..\Common\Consoles_App.h" +#include "..\..\PS3\Miles\include\mss.h" + +// This file has the platform specific functions required for PS3 audio + +// +// this function configures the audio hardware. +// you specify the minimum number of channels that you need, and it +// returns the number of output channels that will be used (which will +// be at least your minimum count, but possibly more). it will return 0 +// for any failure cases. + +int SoundEngine::initAudioHardware( int minimum_chans ) +{ + int ret; + int ch_pcm; + int ch_bit; + CellAudioOutConfiguration a_config; + + memset( &a_config, 0, sizeof( CellAudioOutConfiguration ) ); + + // first lets see how many pcm output channels we have + ch_pcm = cellAudioOutGetSoundAvailability( CELL_AUDIO_OUT_PRIMARY, + CELL_AUDIO_OUT_CODING_TYPE_LPCM, + CELL_AUDIO_OUT_FS_48KHZ, 0 ); + + if ( ch_pcm >= minimum_chans ) + { + a_config.channel = ch_pcm; + a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM; + a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_NONE; /* No downmixer is used */ + cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, NULL, 0 ); + + ret = ch_pcm; + } + else + { + switch ( ch_pcm ) + { + case 6: + // this means we asked for 8 channels, but only 6 are available + // so, we'll turn on the 7.1 to 5.1 downmixer. + a_config.channel = 6; + a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM; + a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_TYPE_B; + if ( cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, NULL, 0 ) != CELL_OK ) + { + return 0; // error - the downmixer didn't init + } + + ret = 8; + break; + + case 2: + // ok, this means they asked for multi-channel out, but only stereo + // is supported. we'll try dolby digital first and then the downmixer + + ch_bit = cellAudioOutGetSoundAvailability( CELL_AUDIO_OUT_PRIMARY, + CELL_AUDIO_OUT_CODING_TYPE_AC3, + CELL_AUDIO_OUT_FS_48KHZ, 0 ); + if ( ch_bit > 0 ) + { + a_config.channel = ch_bit; + a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_AC3; + if ( ch_bit >= minimum_chans ) + { + // we have enough channels to support their minimum + a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_NONE; + ret = ch_bit; + } + else + { + // we don't have enough channels to support their minimum, so use the downmixer + a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_TYPE_B; + ret = 8; + } + + if ( cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, NULL, 0 ) == CELL_OK ) + { + break; + } + + // if we got here the dolby encoder, didn't init, so fall through to downmixing to stereo + } + + a_config.channel = 2; + a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM; + a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_TYPE_A; + if ( cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, NULL, 0 ) != CELL_OK ) + { + return 0; // error - downmixer didn't work + } + + ret = 2; // downmixer does 7.0 to 2.0 downmixing... + break; + + default: + // some other weird case that we don't understand + return 0; + } + } + + // turn off copy protection stupidness + cellAudioOutSetCopyControl( CELL_AUDIO_OUT_PRIMARY, + CELL_AUDIO_OUT_COPY_CONTROL_COPY_FREE ); + + return( ret ); +} + -- cgit v1.2.3