1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 /* Minetest Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> <# Contributing Contributions are welcome! Here's how you can help: - [Contributing code](#code) - [Reporting issues](#issues) - [Requesting features](#feature-requests) - [Translating](#translations) - [Donating](#donations) ## Code If you are planning to start some significant coding, you would benefit from asking first on [our IRC channel](http://www.minetest.net/irc/) before starting. 1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository and [clone](https://help.github.com/articles/cloning-a-repository/) your fork. 2. Start coding! - Refer to the [Lua API](https:// #ifndef SOUND_HEADER #define SOUND_HEADER #include "irrlichttypes_bloated.h" #include <string> #include <set> class OnDemandSoundFetcher { public: virtual void fetchSounds(const std::string &name, std::set<std::string> &dst_paths, std::set<std::string> &dst_datas) = 0; }; struct SimpleSoundSpec { std::string name; float gain; SimpleSoundSpec(std::string name="", float gain=1.0): name(name), gain(gain) {} bool exists() {return name != "";} // Serialization intentionally left out }; class ISoundManager { public: virtual ~ISoundManager(){} // Multiple sounds can be loaded per name; when played, the sound // should be chosen randomly from alternatives // Return value determines success/failure virtual bool loadSoundFile(const std::string &name, const std::string &filepath) = 0; virtual bool loadSoundData(const std::string &name, const std::string &filedata) = 0; virtual void updateListener(v3f pos, v3f vel, v3f at, v3f up) = 0; virtual void setListenerGain(float gain) = 0; // playSound functions return -1 on failure, otherwise a handle to the // sound. If name=="", call should be ignored without error. virtual int playSound(const std::string &name, bool loop, float volume) = 0; virtual int playSoundAt(const std::string &name, bool loop, float volume, v3f pos) = 0; virtual void stopSound(int sound) = 0; virtual bool soundExists(int sound) = 0; virtual void updateSoundPosition(int sound, v3f pos) = 0; int playSound(const SimpleSoundSpec &spec, bool loop) { return playSound(spec.name, loop, spec.gain); } int playSoundAt(const SimpleSoundSpec &spec, bool loop, v3f pos) { return playSoundAt(spec.name, loop, spec.gain, pos); } }; class DummySoundManager: public ISoundManager { public: virtual bool loadSoundFile(const std::string &name, const std::st