[Scummvm-git-logs] scummvm master -> b68b31422bd359fc3bba07b50f1b9205dc313b68

NMIError 60350957+NMIError at users.noreply.github.com
Tue Jul 13 20:12:12 UTC 2021


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
55fadd03a1 AUDIO/MIDI: Change Miles AdLib creation type to multisource
935c421d76 GROOVIE: Simplify XMI player Miles driver usage
b68b31422b GROOVIE: Fix AdLib emulator volume affected by speech volume


Commit: 55fadd03a134761c5585652b5fa31e4df2aab5d4
    https://github.com/scummvm/scummvm/commit/55fadd03a134761c5585652b5fa31e4df2aab5d4
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-07-13T22:11:58+02:00

Commit Message:
AUDIO/MIDI: Change Miles AdLib creation type to multisource

This changes the return type of the Miles AdLib MIDI driver factory function to
the recently introduced superclass MidiDriver_Multisource, which allows for
easier use of multisource functionality for consumers of the factory function.

Changed paths:
    audio/miles.h
    audio/miles_adlib.cpp


diff --git a/audio/miles.h b/audio/miles.h
index e3ebeb4917..dc2f117211 100644
--- a/audio/miles.h
+++ b/audio/miles.h
@@ -295,7 +295,7 @@ private:
 	MilesMT32SysExQueueEntry _milesSysExQueues[MILES_CONTROLLER_SYSEX_QUEUE_COUNT];
 };
 
-extern MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String &filenameAdLib, const Common::String &filenameOPL3, Common::SeekableReadStream *streamAdLib = nullptr, Common::SeekableReadStream *streamOPL3 = nullptr);
+extern MidiDriver_Multisource *MidiDriver_Miles_AdLib_create(const Common::String &filenameAdLib, const Common::String &filenameOPL3, Common::SeekableReadStream *streamAdLib = nullptr, Common::SeekableReadStream *streamOPL3 = nullptr);
 
 extern MidiDriver_Miles_Midi *MidiDriver_Miles_MT32_create(const Common::String &instrumentDataFilename);
 
diff --git a/audio/miles_adlib.cpp b/audio/miles_adlib.cpp
index e04d9cb73b..6b8127a0fd 100644
--- a/audio/miles_adlib.cpp
+++ b/audio/miles_adlib.cpp
@@ -1105,7 +1105,7 @@ void MidiDriver_Miles_AdLib::setRegister(int reg, int value) {
 	}
 }
 
-MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String &filenameAdLib, const Common::String &filenameOPL3, Common::SeekableReadStream *streamAdLib, Common::SeekableReadStream *streamOPL3) {
+MidiDriver_Multisource *MidiDriver_Miles_AdLib_create(const Common::String &filenameAdLib, const Common::String &filenameOPL3, Common::SeekableReadStream *streamAdLib, Common::SeekableReadStream *streamOPL3) {
 	// Load adlib instrument data from file SAMPLE.AD (OPL3: SAMPLE.OPL)
 	Common::String              timbreFilename;
 	Common::SeekableReadStream *timbreStream = nullptr;


Commit: 935c421d76619489595f8d70f5b3b2b570147c7e
    https://github.com/scummvm/scummvm/commit/935c421d76619489595f8d70f5b3b2b570147c7e
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-07-13T22:11:58+02:00

Commit Message:
GROOVIE: Simplify XMI player Miles driver usage

This simplifies the way the MusicPlayerXMI uses the Miles MIDI drivers by using
the common superclass MidiDriver_Multisource. User volume scaling is moved to
the MIDI driver for this player.

Changed paths:
    engines/groovie/music.cpp
    engines/groovie/music.h


diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp
index 9ee2822e38..4640f59615 100644
--- a/engines/groovie/music.cpp
+++ b/engines/groovie/music.cpp
@@ -418,8 +418,7 @@ bool MusicPlayerMidi::loadParser(Common::SeekableReadStream *stream, bool loop)
 // MusicPlayerXMI
 
 MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String &gtlName) :
-	MusicPlayerMidi(vm),
-	_milesMidiDriver(NULL) {
+		MusicPlayerMidi(vm), _multisourceDriver(0), _milesXmidiTimbres(0) {
 
 	// Create the driver
 	MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_GM);
@@ -434,19 +433,19 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String &gtlName)
 	// 11th Hour uses SAMPLE.AD/SAMPLE.OPL/SAMPLE.MT
 	switch (musicType) {
 	case MT_ADLIB:
-		// TODO Would be nice if the Miles AdLib and MIDI drivers shared
-		// a common interface, then we can use only _milesMidiDriver in
-		// this class.
-		_driver = Audio::MidiDriver_Miles_AdLib_create(gtlName + ".AD", gtlName + ".OPL");
+		_driver = _multisourceDriver = Audio::MidiDriver_Miles_AdLib_create(gtlName + ".AD", gtlName + ".OPL");
 		break;
 	case MT_MT32:
-		_driver = _milesMidiDriver = Audio::MidiDriver_Miles_MIDI_create(musicType, gtlName + ".MT");
+		Audio::MidiDriver_Miles_Midi *milesDriver;
+		milesDriver = Audio::MidiDriver_Miles_MIDI_create(musicType, gtlName + ".MT");
+		_milesXmidiTimbres = milesDriver;
+		_driver = _multisourceDriver = milesDriver;
 		break;
 	case MT_GM:
-		_driver = _milesMidiDriver = Audio::MidiDriver_Miles_MIDI_create(musicType, "");
+		_driver = _multisourceDriver = Audio::MidiDriver_Miles_MIDI_create(musicType, "");
 		break;
 	case MT_NULL:
-		_driver = MidiDriver::createMidi(dev);
+		_driver = _multisourceDriver = new MidiDriver_NULL_Multisource();
 		break;
 	default:
 		break;
@@ -462,6 +461,9 @@ MusicPlayerXMI::MusicPlayerXMI(GroovieEngine *vm, const Common::String &gtlName)
 	if (result > 0 && result != MidiDriver::MERR_ALREADY_OPEN)
 		error("Opening MidiDriver failed with error code %i", result);
 
+	_multisourceDriver->setSourceNeutralVolume(0, 100);
+	_multisourceDriver->property(MidiDriver::PROP_USER_VOLUME_SCALING, true);
+
 	// Set the parser's driver
 	_midiParser->setMidiDriver(this);
 
@@ -474,21 +476,13 @@ MusicPlayerXMI::~MusicPlayerXMI() {
 }
 
 void MusicPlayerXMI::send(int8 source, uint32 b) {
-	if (_milesMidiDriver) {
-		_milesMidiDriver->send(source, b);
-	} else {
-		MusicPlayerMidi::send(b);
-	}
+	_multisourceDriver->send(source, b);
 }
 
 void MusicPlayerXMI::metaEvent(int8 source, byte type, byte *data, uint16 length) {
-	if (_milesMidiDriver) {
-		if (type == 0x2F) // End Of Track
-			MusicPlayerMidi::endTrack();
-		_milesMidiDriver->metaEvent(source, type, data, length);
-	} else {
-		MusicPlayerMidi::metaEvent(type, data, length);
-	}
+	if (type == 0x2F) // End Of Track
+		MusicPlayerMidi::endTrack();
+	_multisourceDriver->metaEvent(source, type, data, length);
 }
 
 void MusicPlayerXMI::stopAllNotes(bool stopSustainedNotes) {
@@ -501,12 +495,11 @@ bool MusicPlayerXMI::isReady() {
 }
 
 void MusicPlayerXMI::updateVolume() {
-	if (_milesMidiDriver) {
-		uint16 val = (_userVolume * _gameVolume) / 100;
-		_milesMidiDriver->setSourceVolume(0, val);
-	} else {
-		MusicPlayerMidi::updateVolume();
-	}
+	_multisourceDriver->setSourceVolume(0, _gameVolume);
+}
+
+void MusicPlayerXMI::setUserVolume(uint16 volume) {
+	_multisourceDriver->syncSoundSettings();
 }
 
 bool MusicPlayerXMI::load(uint32 fileref, bool loop) {
@@ -524,9 +517,7 @@ bool MusicPlayerXMI::load(uint32 fileref, bool loop) {
 
 void MusicPlayerXMI::unload(bool updateState) {
 	MusicPlayerMidi::unload(updateState);
-	if (_milesMidiDriver) {
-		_milesMidiDriver->deinitSource(0);
-	}
+	_multisourceDriver->deinitSource(0);
 }
 
 // MusicPlayerMac_t7g
diff --git a/engines/groovie/music.h b/engines/groovie/music.h
index 1525cd7220..35a4ae0cbd 100644
--- a/engines/groovie/music.h
+++ b/engines/groovie/music.h
@@ -26,6 +26,7 @@
 #include "common/array.h"
 #include "common/mutex.h"
 #include "audio/mididrv.h"
+#include "audio/mididrv_ms.h"
 #include "audio/mixer.h"
 #include "audio/miles.h"
 
@@ -62,7 +63,7 @@ public:
 	void setBackgroundDelay(uint16 delay);
 
 	// Volume
-	void setUserVolume(uint16 volume);
+	virtual void setUserVolume(uint16 volume);
 	void setGameVolume(uint16 volume, uint16 time);
 
 private:
@@ -150,11 +151,13 @@ public:
 	void metaEvent(int8 source, byte type, byte *data, uint16 length) override;
 	void stopAllNotes(bool stopSustainedNotes) override;
 	void processXMIDITimbreChunk(const byte *timbreListPtr, uint32 timbreListSize) override {
-		if (_milesMidiDriver)
-			_milesMidiDriver->processXMIDITimbreChunk(timbreListPtr, timbreListSize);
+		if (_milesXmidiTimbres)
+			_milesXmidiTimbres->processXMIDITimbreChunk(timbreListPtr, timbreListSize);
 	};
 	bool isReady() override;
 
+	void setUserVolume(uint16 volume) override;
+
 protected:
 	void updateVolume() override;
 	bool load(uint32 fileref, bool loop) override;
@@ -164,7 +167,8 @@ private:
 	// Output music type
 	uint8 _musicType;
 
-	Audio::MidiDriver_Miles_Midi *_milesMidiDriver;
+	MidiDriver_Multisource *_multisourceDriver;
+	MidiDriver_Miles_Xmidi_Timbres *_milesXmidiTimbres;
 };
 
 class MusicPlayerMac_t7g : public MusicPlayerMidi {


Commit: b68b31422bd359fc3bba07b50f1b9205dc313b68
    https://github.com/scummvm/scummvm/commit/b68b31422bd359fc3bba07b50f1b9205dc313b68
Author: Coen Rampen (crampen at gmail.com)
Date: 2021-07-13T22:11:58+02:00

Commit Message:
GROOVIE: Fix AdLib emulator volume affected by speech volume

This changes the audio mixer sound type used for movie audio from plain to
speech. The engine would apply speech volume to the plain sound type, but this
sound type is also used by the AdLib emulator. Volume control of the movie and
AdLib emulator audio is now independent.

Changed paths:
    engines/groovie/groovie.cpp
    engines/groovie/roq.cpp
    engines/groovie/vdx.cpp


diff --git a/engines/groovie/groovie.cpp b/engines/groovie/groovie.cpp
index 11f0a452cb..6a55bafca0 100644
--- a/engines/groovie/groovie.cpp
+++ b/engines/groovie/groovie.cpp
@@ -359,7 +359,7 @@ void GroovieEngine::syncSoundSettings() {
 	// we have to use just one volume setting for videos.
 	// We use "speech" because most users will want to change the videos
 	// volume when they can't hear the speech because of the music.
-	_mixer->setVolumeForSoundType(Audio::Mixer::kPlainSoundType,
+	_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType,
 		mute ? 0 : ConfMan.getInt("speech_volume"));
 }
 
diff --git a/engines/groovie/roq.cpp b/engines/groovie/roq.cpp
index 6e4f99e1c8..aadbd44b2e 100644
--- a/engines/groovie/roq.cpp
+++ b/engines/groovie/roq.cpp
@@ -503,7 +503,7 @@ bool ROQPlayer::processBlockSoundMono(ROQBlockHeader &blockHeader) {
 	if (!_audioStream && !playFirstFrame()) {
 		_audioStream = Audio::makeQueuingAudioStream(22050, false);
 		Audio::SoundHandle sound_handle;
-		g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &sound_handle, _audioStream);
+		g_system->getMixer()->playStream(Audio::Mixer::kSpeechSoundType, &sound_handle, _audioStream);
 	}
 
 	// Create the audio buffer
@@ -549,7 +549,7 @@ bool ROQPlayer::processBlockSoundStereo(ROQBlockHeader &blockHeader) {
 	if (!_audioStream && !playFirstFrame()) {
 		_audioStream = Audio::makeQueuingAudioStream(22050, true);
 		Audio::SoundHandle sound_handle;
-		g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &sound_handle, _audioStream);
+		g_system->getMixer()->playStream(Audio::Mixer::kSpeechSoundType, &sound_handle, _audioStream);
 	}
 
 	// Create the audio buffer
diff --git a/engines/groovie/vdx.cpp b/engines/groovie/vdx.cpp
index 94b6aa0680..5ebcfc70dd 100644
--- a/engines/groovie/vdx.cpp
+++ b/engines/groovie/vdx.cpp
@@ -533,7 +533,7 @@ void VDXPlayer::chunkSound(Common::ReadStream *in) {
 	if (!_audioStream) {
 		_audioStream = Audio::makeQueuingAudioStream(22050, false);
 		Audio::SoundHandle sound_handle;
-		g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &sound_handle, _audioStream);
+		g_system->getMixer()->playStream(Audio::Mixer::kSpeechSoundType, &sound_handle, _audioStream);
 	}
 
 	byte *data = (byte *)malloc(60000);




More information about the Scummvm-git-logs mailing list