Some small changes
This commit is contained in:
@@ -59,7 +59,7 @@ void AI::Write(u32 addr, u32 val) {
|
|||||||
case 0x04500010: {
|
case 0x04500010: {
|
||||||
u32 oldDacFreq = dac.freq;
|
u32 oldDacFreq = dac.freq;
|
||||||
dacRate = val & 0x3FFF;
|
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;
|
dac.period = N64_CPU_FREQ / dac.freq;
|
||||||
if(oldDacFreq != dac.freq) {
|
if(oldDacFreq != dac.freq) {
|
||||||
device.AdjustSampleRate(dac.freq);
|
device.AdjustSampleRate(dac.freq);
|
||||||
@@ -81,7 +81,8 @@ void AI::Step(u32 cpuCycles, float volumeL, float volumeR) {
|
|||||||
return;
|
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);
|
dmaAddr[0] = (addrHi << 13) | (dmaAddr[0] & 0x1FFF);
|
||||||
u32 data = Util::ReadAccess<u32>(mem.mmio.rdp.rdram, dmaAddr[0] & RDRAM_DSIZE);
|
u32 data = Util::ReadAccess<u32>(mem.mmio.rdp.rdram, dmaAddr[0] & RDRAM_DSIZE);
|
||||||
s16 l = s16(data >> 16);
|
s16 l = s16(data >> 16);
|
||||||
|
|||||||
@@ -30,10 +30,14 @@ void audioCallback(void* user, Uint8* stream, int length) {
|
|||||||
|
|
||||||
AudioDevice::AudioDevice() {
|
AudioDevice::AudioDevice() {
|
||||||
SDL_InitSubSystem(SDL_INIT_AUDIO);
|
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();
|
audioStreamMutex = SDL_CreateMutex();
|
||||||
|
|
||||||
|
if(!audioStreamMutex) {
|
||||||
|
Util::panic("Unable to initialize audio mutex: {}", SDL_GetError());
|
||||||
|
}
|
||||||
|
|
||||||
request.freq = AUDIO_SAMPLE_RATE;
|
request.freq = AUDIO_SAMPLE_RATE;
|
||||||
request.format = SYSTEM_SAMPLE_FORMAT;
|
request.format = SYSTEM_SAMPLE_FORMAT;
|
||||||
request.channels = 2;
|
request.channels = 2;
|
||||||
@@ -41,19 +45,13 @@ AudioDevice::AudioDevice() {
|
|||||||
request.callback = audioCallback;
|
request.callback = audioCallback;
|
||||||
request.userdata = (void*)this;
|
request.userdata = (void*)this;
|
||||||
|
|
||||||
if(!handle) {
|
handle = SDL_OpenAudioDevice(nullptr, 0, &request, &audioSpec, 0);
|
||||||
handle = SDL_OpenAudioDevice(nullptr, 0, &request, &audioSpec, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!handle) {
|
if(!handle) {
|
||||||
Util::panic("Failed to initialize SDL Audio: {}", SDL_GetError());
|
Util::panic("Failed to initialize SDL Audio: {}", SDL_GetError());
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_PauseAudioDevice(handle, false);
|
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) {
|
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 adjustedR = right * volumeR;
|
||||||
float samples[2]{ adjustedL, adjustedR };
|
float samples[2]{ adjustedL, adjustedR };
|
||||||
|
|
||||||
float availableBytes = SDL_AudioStreamAvailable(audioStream);
|
auto availableBytes = (float)SDL_AudioStreamAvailable(audioStream);
|
||||||
if(availableBytes <= BYTES_PER_HALF_SECOND) {
|
if(availableBytes <= BYTES_PER_HALF_SECOND) {
|
||||||
SDL_AudioStreamPut(audioStream, samples, 2 * sizeof(float));
|
SDL_AudioStreamPut(audioStream, samples, 2 * sizeof(float));
|
||||||
}
|
}
|
||||||
@@ -71,7 +69,7 @@ void AudioDevice::AdjustSampleRate(int sampleRate) {
|
|||||||
LockMutex();
|
LockMutex();
|
||||||
if(audioStream) SDL_FreeAudioStream(audioStream);
|
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();
|
UnlockMutex();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user