This commit is contained in:
Christian Speckner 2018-02-03 01:23:19 +01:00
parent cb89d09c7f
commit 803b85343a
5 changed files with 30 additions and 3 deletions

View File

@ -219,6 +219,18 @@ void SoundSDL2::adjustVolume(Int8 direction)
myOSystem.frameBuffer().showMessage(message); myOSystem.frameBuffer().showMessage(message);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 SoundSDL2::getFragmentSize() const
{
return myHardwareSpec.size;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 SoundSDL2::getSampleRate() const
{
return myHardwareSpec.freq;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void SoundSDL2::processFragment(Int16* stream, uInt32 length) void SoundSDL2::processFragment(Int16* stream, uInt32 length)
{ {

View File

@ -96,6 +96,10 @@ class SoundSDL2 : public Sound
*/ */
void adjustVolume(Int8 direction) override; void adjustVolume(Int8 direction) override;
uInt32 getFragmentSize() const override;
uInt32 getSampleRate() const override;
protected: protected:
/** /**
Invoked by the sound callback to process the next sound fragment. Invoked by the sound callback to process the next sound fragment.

View File

@ -72,7 +72,6 @@
namespace { namespace {
constexpr uInt8 YSTART_EXTRA = 2; constexpr uInt8 YSTART_EXTRA = 2;
constexpr uInt8 AUDIO_QUEUE_CAPACITY_FRAGMENTS = 30;
constexpr uInt8 AUDIO_QUEUE_HALF_FRAMES_PER_FRAGMENT = 1; constexpr uInt8 AUDIO_QUEUE_HALF_FRAMES_PER_FRAGMENT = 1;
} }
@ -722,9 +721,11 @@ void Console::createAudioQueue()
throw runtime_error("invalid console timing"); throw runtime_error("invalid console timing");
} }
uInt32 queueSize = (2 * myOSystem.sound().getFragmentSize() * sampleRate) / (myOSystem.sound().getSampleRate() * fragmentSize);
myAudioQueue = make_shared<AudioQueue>( myAudioQueue = make_shared<AudioQueue>(
fragmentSize, fragmentSize,
AUDIO_QUEUE_CAPACITY_FRAGMENTS, queueSize > 0 ? queueSize : 1,
myProperties.get(Cartridge_Sound) == "STEREO", myProperties.get(Cartridge_Sound) == "STEREO",
sampleRate sampleRate
); );

View File

@ -600,7 +600,7 @@ void OSystem::mainLoop()
virtualTime += duration_cast<high_resolution_clock::duration>(timeslice); virtualTime += duration_cast<high_resolution_clock::duration>(timeslice);
time_point<high_resolution_clock> now = high_resolution_clock::now(); time_point<high_resolution_clock> now = high_resolution_clock::now();
if (duration_cast<duration<double>>(now - virtualTime).count() > 0.5) if (duration_cast<duration<double>>(now - virtualTime).count() > 0)
virtualTime = now; virtualTime = now;
else if (virtualTime > now) { else if (virtualTime > now) {
if (busyWait && cycles >= 0) { if (busyWait && cycles >= 0) {

View File

@ -66,6 +66,16 @@ class Sound
*/ */
virtual void mute(bool state) = 0; virtual void mute(bool state) = 0;
/**
Get the fragment size.
*/
virtual uInt32 getFragmentSize() const = 0;
/**
Get the sample rate.
*/
virtual uInt32 getSampleRate() const = 0;
/** /**
Reset the sound device. Reset the sound device.
*/ */