// $Id: Mixer.hh 5992 2007-01-11 21:39:13Z m9710797 $ #ifndef MIXER_HH #define MIXER_HH #include "Observer.hh" #include "noncopyable.hh" #include #include namespace openmsx { class SoundDriver; class CommandController; class MSXMixer; class IntegerSetting; class BooleanSetting; template class EnumSetting; class Setting; class Mixer : private Observer, private noncopyable { public: Mixer(CommandController& commandController); virtual ~Mixer(); /** Register per-machine mixer */ void registerMixer(MSXMixer& mixer); /** Unregister per-machine mixer */ void unregisterMixer(MSXMixer& mixer); /** * This methods (un)mute the sound. * These methods may be called multiple times, as long as * you never call unmute() more than mute() */ void mute(); void unmute(); // Called by MSXMixer /** Upload new sample data */ double uploadBuffer(MSXMixer& msxMixer, short* buffer, unsigned len); IntegerSetting& getMasterVolume() const; private: void reloadDriver(); void muteHelper(); // Observer virtual void update(const Setting& setting); typedef std::vector MSXMixers; MSXMixers msxMixers; std::auto_ptr driver; int muteCount; CommandController& commandController; std::auto_ptr muteSetting; std::auto_ptr masterVolume; std::auto_ptr frequencySetting; std::auto_ptr samplesSetting; enum SoundDriverType { SND_NULL, SND_SDL, SND_DIRECTX }; std::auto_ptr > soundDriverSetting; BooleanSetting& pauseSetting; }; } // namespace openmsx #endif