mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 23:11:25 +12:00
Audio format changed to 8ch
This commit is contained in:
parent
011362bf1c
commit
d557ba2d97
7 changed files with 34 additions and 40 deletions
|
@ -100,7 +100,7 @@ void OpenALThread::Open(const void* src, int size)
|
|||
|
||||
for (uint i = 0; i<g_al_buffers_count; ++i)
|
||||
{
|
||||
alBufferData(m_buffers[i], Ini.AudioConvertToU16.GetValue() ? AL_FORMAT_STEREO16 : AL_FORMAT_STEREO_FLOAT32, src, m_buffer_size, 48000);
|
||||
alBufferData(m_buffers[i], Ini.AudioConvertToU16.GetValue() ? AL_FORMAT_71CHN16 : AL_FORMAT_71CHN32, src, m_buffer_size, 48000);
|
||||
checkForAlError("alBufferData");
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,7 @@ void OpenALThread::AddData(const void* src, int size)
|
|||
|
||||
int bsize = size < m_buffer_size ? size : m_buffer_size;
|
||||
|
||||
alBufferData(buffer, Ini.AudioConvertToU16.GetValue() ? AL_FORMAT_STEREO16 : AL_FORMAT_STEREO_FLOAT32, bsrc, bsize, 48000);
|
||||
alBufferData(buffer, Ini.AudioConvertToU16.GetValue() ? AL_FORMAT_71CHN16 : AL_FORMAT_71CHN32, bsrc, bsize, 48000);
|
||||
checkForAlError("alBufferData");
|
||||
|
||||
alSourceQueueBuffers(m_source, 1, &buffer);
|
||||
|
|
|
@ -21,9 +21,9 @@ struct AudioInfo
|
|||
void Init()
|
||||
{
|
||||
mode.type = CELL_AUDIO_OUT_CODING_TYPE_LPCM;
|
||||
mode.channel = CELL_AUDIO_OUT_CHNUM_2;
|
||||
mode.channel = CELL_AUDIO_OUT_CHNUM_8;
|
||||
mode.fs = CELL_AUDIO_OUT_FS_48KHZ;
|
||||
mode.layout = CELL_AUDIO_OUT_SPEAKER_LAYOUT_2CH;
|
||||
mode.layout = CELL_AUDIO_OUT_SPEAKER_LAYOUT_8CH_LREClrxy;
|
||||
mode.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM;
|
||||
mode.downMixer = CELL_AUDIO_OUT_DOWNMIXER_NONE;
|
||||
}
|
||||
|
|
|
@ -94,13 +94,14 @@ void XAudio2Thread::Open(const void* src, int size)
|
|||
HRESULT hr;
|
||||
|
||||
WORD sample_size = Ini.AudioConvertToU16.GetValue() ? sizeof(u16) : sizeof(float);
|
||||
WORD channels = 8;
|
||||
|
||||
WAVEFORMATEX waveformatex;
|
||||
waveformatex.wFormatTag = Ini.AudioConvertToU16.GetValue() ? WAVE_FORMAT_PCM : WAVE_FORMAT_IEEE_FLOAT;
|
||||
waveformatex.nChannels = 2;
|
||||
waveformatex.nChannels = channels;
|
||||
waveformatex.nSamplesPerSec = 48000;
|
||||
waveformatex.nAvgBytesPerSec = 48000 * 2 * (DWORD)sample_size;
|
||||
waveformatex.nBlockAlign = 2 * sample_size;
|
||||
waveformatex.nAvgBytesPerSec = 48000 * (DWORD)channels * (DWORD)sample_size;
|
||||
waveformatex.nBlockAlign = channels * sample_size;
|
||||
waveformatex.wBitsPerSample = sample_size * 8;
|
||||
waveformatex.cbSize = 0;
|
||||
|
||||
|
|
|
@ -2348,9 +2348,8 @@ void RSXThread::Task()
|
|||
OnInitThread();
|
||||
|
||||
m_last_flip_time = get_system_time() - 1000000;
|
||||
volatile bool is_vblank_stopped = false;
|
||||
|
||||
thread_t vblank("VBlank thread", [&]()
|
||||
thread_t vblank("VBlank thread", true /* autojoin */, [this]()
|
||||
{
|
||||
const u64 start_time = get_system_time();
|
||||
|
||||
|
@ -2374,8 +2373,6 @@ void RSXThread::Task()
|
|||
|
||||
std::this_thread::sleep_for (std::chrono::milliseconds(1)); // hack
|
||||
}
|
||||
|
||||
is_vblank_stopped = true;
|
||||
});
|
||||
|
||||
while (!TestDestroy()) try
|
||||
|
@ -2383,7 +2380,7 @@ void RSXThread::Task()
|
|||
if (Emu.IsStopped())
|
||||
{
|
||||
LOG_WARNING(RSX, "RSX thread aborted");
|
||||
return;
|
||||
break;
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(m_cs_main);
|
||||
|
||||
|
@ -2402,7 +2399,7 @@ void RSXThread::Task()
|
|||
m_sem_flush.post_and_wait();
|
||||
}
|
||||
|
||||
std::this_thread::sleep_for (std::chrono::milliseconds(1)); // hack
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2469,24 +2466,17 @@ void RSXThread::Task()
|
|||
value += (count + 1) * 4;
|
||||
});
|
||||
}
|
||||
|
||||
catch (const std::string& e)
|
||||
{
|
||||
LOG_ERROR(RSX, "Exception: %s", e.c_str());
|
||||
Emu.Pause();
|
||||
}
|
||||
|
||||
catch (const char* e)
|
||||
{
|
||||
LOG_ERROR(RSX, "Exception: %s", e);
|
||||
Emu.Pause();
|
||||
}
|
||||
|
||||
while (!is_vblank_stopped)
|
||||
{
|
||||
std::this_thread::sleep_for (std::chrono::milliseconds(1)); // hack
|
||||
}
|
||||
|
||||
LOG_NOTICE(RSX, "RSX thread ended");
|
||||
|
||||
OnExitThread();
|
||||
|
|
|
@ -54,7 +54,7 @@ s32 cellAudioInit()
|
|||
const bool do_dump = Ini.AudioDumpToFile.GetValue();
|
||||
|
||||
AudioDumper m_dump;
|
||||
if (do_dump && !m_dump.Init(8)) // Init AudioDumper for 8 channels
|
||||
if (do_dump && !m_dump.Init(2)) // Init AudioDumper for 2 channels
|
||||
{
|
||||
throw "AudioDumper::Init() failed";
|
||||
}
|
||||
|
@ -62,13 +62,13 @@ s32 cellAudioInit()
|
|||
float buf2ch[2 * BUFFER_SIZE]; // intermediate buffer for 2 channels
|
||||
float buf8ch[8 * BUFFER_SIZE]; // intermediate buffer for 8 channels
|
||||
|
||||
static const size_t out_buffer_size = 2 * BUFFER_SIZE;
|
||||
static const size_t out_buffer_size = 8 * BUFFER_SIZE; // output buffer for 8 channels
|
||||
|
||||
std::unique_ptr<float[]> out_buffer[BUFFER_NUM];
|
||||
|
||||
for (u32 i = 0; i < BUFFER_NUM; i++)
|
||||
{
|
||||
out_buffer[i].reset(new float[2 * BUFFER_SIZE] {});
|
||||
out_buffer[i].reset(new float[out_buffer_size] {});
|
||||
}
|
||||
|
||||
squeue_t<float*, BUFFER_NUM - 1> out_queue;
|
||||
|
@ -347,9 +347,16 @@ s32 cellAudioInit()
|
|||
|
||||
if (!first_mix)
|
||||
{
|
||||
for (u32 i = 0; i < (sizeof(buf2ch) / sizeof(float)); i++)
|
||||
// copy output data (2 ch)
|
||||
//for (u32 i = 0; i < (sizeof(buf2ch) / sizeof(float)); i++)
|
||||
//{
|
||||
// out_buffer[out_pos][i] = buf2ch[i];
|
||||
//}
|
||||
|
||||
// copy output data (8 ch)
|
||||
for (u32 i = 0; i < (sizeof(buf8ch) / sizeof(float)); i++)
|
||||
{
|
||||
out_buffer[out_pos][i] = buf2ch[i];
|
||||
out_buffer[out_pos][i] = buf8ch[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -399,16 +406,16 @@ s32 cellAudioInit()
|
|||
{
|
||||
if (m_dump.GetCh() == 8)
|
||||
{
|
||||
if (m_dump.WriteData(&buf8ch, sizeof(buf8ch)) != sizeof(buf8ch)) // write file data
|
||||
if (m_dump.WriteData(&buf8ch, sizeof(buf8ch)) != sizeof(buf8ch)) // write file data (8 ch)
|
||||
{
|
||||
throw "AudioDumper::WriteData() failed (2 ch)";
|
||||
throw "AudioDumper::WriteData() failed (8 ch)";
|
||||
}
|
||||
}
|
||||
else if (m_dump.GetCh() == 2)
|
||||
{
|
||||
if (m_dump.WriteData(&buf2ch, sizeof(buf2ch)) != sizeof(buf2ch)) // write file data
|
||||
if (m_dump.WriteData(&buf2ch, sizeof(buf2ch)) != sizeof(buf2ch)) // write file data (2 ch)
|
||||
{
|
||||
throw "AudioDumper::WriteData() failed (8 ch)";
|
||||
throw "AudioDumper::WriteData() failed (2 ch)";
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -390,7 +390,7 @@ int cellAudioOutGetSoundAvailability(u32 audioOut, u32 type, u32 fs, u32 option)
|
|||
|
||||
option = 0;
|
||||
|
||||
int available = 2; // should be at least 2
|
||||
int available = 8; // should be at least 2
|
||||
|
||||
switch(fs)
|
||||
{
|
||||
|
@ -431,7 +431,7 @@ int cellAudioOutGetSoundAvailability2(u32 audioOut, u32 type, u32 fs, u32 ch, u3
|
|||
|
||||
option = 0;
|
||||
|
||||
int available = 2; // should be at least 2
|
||||
int available = 8; // should be at least 2
|
||||
|
||||
switch(fs)
|
||||
{
|
||||
|
@ -578,9 +578,9 @@ int cellAudioOutGetDeviceInfo(u32 audioOut, u32 deviceIndex, vm::ptr<CellAudioOu
|
|||
info->state = CELL_AUDIO_OUT_DEVICE_STATE_AVAILABLE;
|
||||
info->latency = 1000;
|
||||
info->availableModes[0].type = CELL_AUDIO_IN_CODING_TYPE_LPCM;
|
||||
info->availableModes[0].channel = CELL_AUDIO_OUT_CHNUM_2;
|
||||
info->availableModes[0].channel = CELL_AUDIO_OUT_CHNUM_8;
|
||||
info->availableModes[0].fs = CELL_AUDIO_OUT_FS_48KHZ;
|
||||
info->availableModes[0].layout = CELL_AUDIO_OUT_SPEAKER_LAYOUT_2CH;
|
||||
info->availableModes[0].layout = CELL_AUDIO_OUT_SPEAKER_LAYOUT_8CH_LREClrxy;
|
||||
|
||||
return CELL_AUDIO_OUT_SUCCEEDED;
|
||||
}
|
||||
|
|
|
@ -354,17 +354,13 @@ void Emulator::Stop()
|
|||
SendDbgCommand(DID_STOP_EMU);
|
||||
m_status = Stopped;
|
||||
|
||||
u32 uncounted = 0;
|
||||
while (true)
|
||||
while (g_thread_count)
|
||||
{
|
||||
if (g_thread_count <= uncounted)
|
||||
{
|
||||
LOG_NOTICE(HLE, "All threads stopped...");
|
||||
break;
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
|
||||
LOG_NOTICE(HLE, "All threads stopped...");
|
||||
|
||||
m_rsx_callback = 0;
|
||||
|
||||
// TODO: check finalization order
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue