[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 >lName) :
- 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 >lName)
// 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 >lName)
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