From 3dc666810732dcabb95a3bd1d02d4fcee0befd3f Mon Sep 17 00:00:00 2001 From: Nebuleon Fumika Date: Wed, 6 Feb 2013 05:59:22 -0500 Subject: Raise the sound frequency from 22050 Hz to 32000 Hz, which is like the SNES. Use sound interpolation to make it sound even more like the SNES. --- source/nds/ds2sound.h | 21 ++++++++++++--------- source/nds/entry.cpp | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) (limited to 'source') diff --git a/source/nds/ds2sound.h b/source/nds/ds2sound.h index f51a6e1..8c0e2bf 100644 --- a/source/nds/ds2sound.h +++ b/source/nds/ds2sound.h @@ -1,21 +1,24 @@ // The sound buffer sizes used on the DS2's side, for each value of // Settings.SoundPlaybackRate. +// * Don't buffer too much, otherwise audio is delayed from video. +// * Don't go below one frame (20 milliseconds). +// * Buffer sizes must be multiples of 128. #define DS2_BUFFER_SIZE_4 512 /* tested working */ -#define DS2_BUFFER_SIZE_5 1024 /* like the SNES! tested working, but slow */ -#define DS2_BUFFER_SIZE_6 1024 /* tested working, slow because of upsampling */ -#define DS2_BUFFER_SIZE_7 1024 /* tested working, slow because of upsampling */ +#define DS2_BUFFER_SIZE_5 640 /* like the SNES! tested working */ +#define DS2_BUFFER_SIZE_6 896 /* tested working */ +#define DS2_BUFFER_SIZE_7 1024 /* tested working */ // The sampling rate for the sound, in Hz, for each value of // Settings.SoundPlaybackRate. #define SND_SAMPLE_RATE_1 8000 #define SND_SAMPLE_RATE_2 11025 #define SND_SAMPLE_RATE_3 16000 -#define SND_SAMPLE_RATE_4 22050 -#define SND_SAMPLE_RATE_5 32000 +#define SND_SAMPLE_RATE_4 22050 /* NDSSFC 1.06 - CATSFC 1.28 used this one */ +#define SND_SAMPLE_RATE_5 32000 /* like the SNES! */ #define SND_SAMPLE_RATE_6 44100 -#define SND_SAMPLE_RATE_7 48000 +#define SND_SAMPLE_RATE_7 48000 /* CATSFC 1.25 made using this one possible */ // Settings in use. The number should match in all three settings. -#define DS2_BUFFER_SIZE DS2_BUFFER_SIZE_4 -#define SND_SAMPLE_RATE SND_SAMPLE_RATE_4 -#define SNES9X_SRATE_ID 4 +#define DS2_BUFFER_SIZE DS2_BUFFER_SIZE_5 +#define SND_SAMPLE_RATE SND_SAMPLE_RATE_5 +#define SNES9X_SRATE_ID 5 diff --git a/source/nds/entry.cpp b/source/nds/entry.cpp index ca27249..723374c 100644 --- a/source/nds/entry.cpp +++ b/source/nds/entry.cpp @@ -425,7 +425,7 @@ void init_sfc_setting(void) //sound settings Settings.APUEnabled = Settings.NextAPUEnabled = TRUE; Settings.FixFrequency = 1; - + Settings.InterpolatedSound = TRUE; Settings.H_Max = SNES_CYCLES_PER_SCANLINE; Settings.SkipFrames = AUTO_FRAMERATE; @@ -1042,7 +1042,7 @@ void S9xGenerateSound () } } -#define SOUND_EMISSION_INTERVAL ((unsigned int) ((((unsigned long long) DS2_BUFFER_SIZE * 1000000) / SND_SAMPLE_RATE) * 3 / 128)) +#define SOUND_EMISSION_INTERVAL ((unsigned int) ((((unsigned long long) DS2_BUFFER_SIZE * 1000000) / SND_SAMPLE_RATE) * 3 / 128) - 1) /* -1 is for roundoff errors */ unsigned int LastSoundEmissionTime = 0; void S9xProcessSound (unsigned int) -- cgit v1.2.3