Ticket #8370: kyra-music.diff

File kyra-music.diff, 2.8 KB (added by eriktorbjorn, 16 years ago)

Patch against a November 13 CVS snapshot

  • kyra/kyra.cpp

    diff -ur ScummVM-cvs20041113/kyra/kyra.cpp ScummVM-cvs20041113+hack/kyra/kyra.cpp
    old new  
    121121        } else {
    122122                error("unknown game");
    123123        }
    124        
    125         MidiDriver *driver = GameDetector::createMidi(GameDetector::detectMusicDriver(MDT_NATIVE | MDT_PREFER_NATIVE));
    126         if (driver) {
    127                 if (ConfMan.getBool("native_mt32"))
    128                         driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
    129                 _midiDriver = new MusicPlayer(driver, this);
    130                 assert(_midiDriver);
    131                 _midiDriver->hasNativeMT32(ConfMan.getBool("native_mt32"));
    132                 _midiDriver->setVolume(255);
    133         } else {
    134                 warning("Couldn't create MIDI driver... No music!");
    135                 _midiDriver = NULL;
    136         };
     124
     125        int midiDrv = GameDetector::detectMusicDriver(MDT_NATIVE | MDT_ADLIB | MDT_PREFER_NATIVE);
     126        bool native_mt32 = (ConfMan.getBool("native_mt32") || (midiDrv == MD_MT32));
     127
     128        MidiDriver *driver = GameDetector::createMidi(midiDrv);
     129        if (!driver) {
     130                // In this case we should play the Adlib tracks, but for now
     131                // the automagic MIDI-to-Adlib conversion will do.
     132                driver = MidiDriver_ADLIB_create(_mixer);
     133        } else if (native_mt32)
     134                driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
     135
     136        _midiDriver = new MusicPlayer(driver, this);
     137        assert(_midiDriver);
     138        _midiDriver->hasNativeMT32(native_mt32);
     139        _midiDriver->setVolume(255);
     140
     141        if (midiDrv == MD_MT32)
     142                _midiDriver->setPassThrough(true);
    137143       
    138144        // Initialize backen
    139145        syst->initSize(320, 200);
  • kyra/sound.cpp

    diff -ur ScummVM-cvs20041113/kyra/sound.cpp ScummVM-cvs20041113+hack/kyra/sound.cpp
    old new  
    1818        MusicPlayer::MusicPlayer(MidiDriver* driver, KyraEngine* engine) {
    1919                _engine = engine;
    2020                _driver = driver;
     21                _passThrough = false;
    2122                _isPlaying = _nativeMT32 = false;
    2223               
    2324                memset(_channel, 0, sizeof(MidiChannel*) * 16);
     
    7374        }
    7475       
    7576        void MusicPlayer::send(uint32 b) {
     77                if (_passThrough) {
     78                        _driver->send(b);
     79                        return;
     80                }
     81
    7682                uint8 channel = (byte)(b & 0x0F);
    7783                if ((b & 0xFFF0) == 0x07B0) {
    7884                        // Adjust volume changes by master volume
  • kyra/sound.h

    diff -ur ScummVM-cvs20041113/kyra/sound.h ScummVM-cvs20041113+hack/kyra/sound.h
    old new  
    2525                void stopMusic();
    2626               
    2727                void playTrack(uint8 track);
     28                void setPassThrough(bool b)     { _passThrough = b; }
    2829
    2930                //MidiDriver interface implementation
    3031                int open();
     
    4748                uint8 _channelVolume[16];
    4849                MidiDriver* _driver;
    4950                bool _nativeMT32;
     51                bool _passThrough;
    5052                uint8 _volume;
    5153                bool _isPlaying;
    5254                MidiParser* _parser;