libSDL2pp  0.16.0
C++11 bindings/wrapper for SDL2
Mixer.hh
1 /*
2  libSDL2pp - C++11 bindings/wrapper for SDL2
3  Copyright (C) 2015-2016 Dmitry Marakasov <amdmi3@amdmi3.ru>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20 */
21 
22 #ifndef SDL2PP_MIXER_HH
23 #define SDL2PP_MIXER_HH
24 
25 #include <functional>
26 #include <memory>
27 
28 #include <SDL_stdinc.h>
29 #include <SDL_mixer.h>
30 
31 #include <SDL2pp/Export.hh>
32 
33 namespace SDL2pp {
34 
35 class Chunk;
36 class Music;
37 
50 class SDL2PP_EXPORT Mixer {
51 public:
52  typedef void (*ChannelFinishedHandler)(int);
53  typedef void (*MusicFinishedHandler)();
54 
55  typedef std::function<void(Uint8 *stream, int len)> MusicHook;
56 
57 private:
58  bool open_;
59  std::unique_ptr<MusicHook> current_music_hook_;
60 
61 public:
62 
65 
84  Mixer(int frequency, Uint16 format, int channels, int chunksize);
85 
92  ~Mixer();
93 
95 
98 
105  Mixer(Mixer&& other) noexcept;
106 
115  Mixer& operator=(Mixer&& other) noexcept;
116 
123  Mixer(const Mixer& other) = delete;
124 
131  Mixer& operator=(const Mixer& other) = delete;
132 
134 
137 
148  int AllocateChannels(int numchans);
149 
158  int GetNumChannels() const;
159 
174  int SetVolume(int channel, int volume);
175 
188  int GetVolume(int channel) const;
189 
191 
194 
211  int PlayChannel(int channel, const Chunk& chunk, int loops = 0);
212 
233  int PlayChannel(int channel, const Chunk& chunk, int loops, int ticks);
234 
253  int FadeInChannel(int channel, const Chunk& chunk, int loops, int ms);
254 
277  int FadeInChannel(int channel, const Chunk& chunk, int loops, int ms, int ticks);
278 
280 
283 
292  void PauseChannel(int channel = -1);
293 
302  void ResumeChannel(int channel = -1);
303 
305 
308 
317  void HaltChannel(int channel = -1);
318 
330  int ExpireChannel(int channel, int ticks);
331 
344  int FadeOutChannel(int channel, int ms);
345 
359  void SetChannelFinishedHandler(ChannelFinishedHandler channel_finished);
360 
367  void RemoveChannelFinishedHandler();
368 
370 
373 
388  int IsChannelPlaying(int channel) const;
389 
404  int IsChannelPaused(int channel) const;
405 
416  Mix_Fading GetChannelFading(int which) const;
417 
419 
422 
437  int ReserveChannels(int num);
438 
452  void GroupChannel(int which, int tag);
453 
468  void GroupChannels(int from, int to, int tag);
469 
471 
474 
485  int GetGroupNumChannels(int tag) const;
486 
498  int GetGroupAvailableChannel(int tag) const;
499 
511  int GetGroupOldestChannel(int tag) const;
512 
524  int GetGroupNewestChannel(int tag) const;
525 
527 
530 
543  int FadeOutGroup(int tag, int ms);
544 
553  void HaltGroup(int tag);
554 
556 
559 
571  void PlayMusic(const Music& music, int loops = -1);
572 
585  void FadeInMusic(const Music& music, int loops = -1, int ms = 0);
586 
595  void SetMusicHook(MusicHook&& hook);
596 
598 
601 
612  int SetMusicVolume(int volume);
613 
622  int GetMusicVolume() const;
623 
630  void PauseMusic();
631 
638  void ResumeMusic();
639 
646  void RewindMusic();
647 
656  void SetMusicPosition(double position);
657 
659 
662 
669  void HaltMusic();
670 
682  bool FadeOutMusic(int ms);
683 
696  void SetMusicFinishedHandler(MusicFinishedHandler music_finished);
697 
704  void RemoveMusicFinishedHandler();
705 
707 
710 
719  bool IsMusicPlaying() const;
720 
729  bool IsMusicPaused() const;
730 
739  Mix_Fading GetMusicFading() const;
740 
742 
745 
746  // TODO: custom effects
747 
763  void SetPanning(int channel, Uint8 left, Uint8 right);
764 
776  void UnsetPanning(int channel);
777 
791  void SetDistance(int channel, Uint8 distance);
792 
804  void UnsetDistance(int channel);
805 
823  void SetPosition(int channel, Sint16 angle, Uint8 distance);
824 
836  void UnsetPosition(int channel);
837 
849  void SetReverseStereo(int channel);
850 
862  void UnsetReverseStereo(int channel);
863 
865 };
866 
867 }
868 
869 #endif
Fragment of audio data.
Definition: Chunk.hh:43
Audio mixer.
Definition: Mixer.hh:50
std::function< void(Uint8 *stream, int len)> MusicHook
Custom music hook.
Definition: Mixer.hh:55
Music data
Definition: Music.hh:43
Definition: AudioDevice.cc:27