diff --git a/src/backend/core/mmio/AI.cpp b/src/backend/core/mmio/AI.cpp index 86a6c445..06eac4da 100644 --- a/src/backend/core/mmio/AI.cpp +++ b/src/backend/core/mmio/AI.cpp @@ -59,7 +59,7 @@ void AI::Write(u32 addr, u32 val) { case 0x04500010: { u32 oldDacFreq = dac.freq; dacRate = val & 0x3FFF; - dac.freq = std::max(1u, GetVideoFrequency(mem.IsROMPAL()) / (dacRate + 1)); + dac.freq = std::max(1.f, (float)GetVideoFrequency(mem.IsROMPAL()) / (dacRate + 1)) * 1.037; dac.period = N64_CPU_FREQ / dac.freq; if(oldDacFreq != dac.freq) { device.AdjustSampleRate(dac.freq); @@ -81,7 +81,8 @@ void AI::Step(u32 cpuCycles, float volumeL, float volumeR) { return; } - if(dmaLen[0] && dmaEnable) {u32 addrHi = ((dmaAddr[0] >> 13) + dmaAddrCarry) & 0x7FF; + if(dmaLen[0] && dmaEnable) { + u32 addrHi = ((dmaAddr[0] >> 13) + dmaAddrCarry) & 0x7FF; dmaAddr[0] = (addrHi << 13) | (dmaAddr[0] & 0x1FFF); u32 data = Util::ReadAccess(mem.mmio.rdp.rdram, dmaAddr[0] & RDRAM_DSIZE); s16 l = s16(data >> 16); diff --git a/src/backend/core/mmio/Audio.cpp b/src/backend/core/mmio/Audio.cpp index fa00ab17..85ed0bf5 100644 --- a/src/backend/core/mmio/Audio.cpp +++ b/src/backend/core/mmio/Audio.cpp @@ -30,10 +30,14 @@ void audioCallback(void* user, Uint8* stream, int length) { AudioDevice::AudioDevice() { SDL_InitSubSystem(SDL_INIT_AUDIO); - AdjustSampleRate(AUDIO_SAMPLE_RATE); + audioStream = SDL_NewAudioStream(SYSTEM_SAMPLE_FORMAT, 2, AUDIO_SAMPLE_RATE, SYSTEM_SAMPLE_FORMAT, 2, AUDIO_SAMPLE_RATE); audioStreamMutex = SDL_CreateMutex(); + if(!audioStreamMutex) { + Util::panic("Unable to initialize audio mutex: {}", SDL_GetError()); + } + request.freq = AUDIO_SAMPLE_RATE; request.format = SYSTEM_SAMPLE_FORMAT; request.channels = 2; @@ -41,19 +45,13 @@ AudioDevice::AudioDevice() { request.callback = audioCallback; request.userdata = (void*)this; - if(!handle) { - handle = SDL_OpenAudioDevice(nullptr, 0, &request, &audioSpec, 0); - } + handle = SDL_OpenAudioDevice(nullptr, 0, &request, &audioSpec, 0); if(!handle) { Util::panic("Failed to initialize SDL Audio: {}", SDL_GetError()); } SDL_PauseAudioDevice(handle, false); - - if(!audioStreamMutex) { - Util::panic("Unable to initialize audio mutex: {}", SDL_GetError()); - } } void AudioDevice::PushSample(float left, float volumeL, float right, float volumeR) { @@ -61,7 +59,7 @@ void AudioDevice::PushSample(float left, float volumeL, float right, float volum float adjustedR = right * volumeR; float samples[2]{ adjustedL, adjustedR }; - float availableBytes = SDL_AudioStreamAvailable(audioStream); + auto availableBytes = (float)SDL_AudioStreamAvailable(audioStream); if(availableBytes <= BYTES_PER_HALF_SECOND) { SDL_AudioStreamPut(audioStream, samples, 2 * sizeof(float)); } @@ -71,7 +69,7 @@ void AudioDevice::AdjustSampleRate(int sampleRate) { LockMutex(); if(audioStream) SDL_FreeAudioStream(audioStream); - audioStream = SDL_NewAudioStream(AUDIO_F32SYS, 2, sampleRate, SYSTEM_SAMPLE_FORMAT, 2, AUDIO_SAMPLE_RATE); + audioStream = SDL_NewAudioStream(SYSTEM_SAMPLE_FORMAT, 2, sampleRate, SYSTEM_SAMPLE_FORMAT, 2, AUDIO_SAMPLE_RATE); UnlockMutex(); } } \ No newline at end of file