v1.1.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Groups Pages
audio.h
1 /*
2  * This file is part of the public interface to the Sifteo SDK.
3  * Copyright <c> 2012 Sifteo, Inc. All rights reserved.
4  */
5 
6 #pragma once
7 #ifdef NOT_USERSPACE
8 # error This is a userspace-only header, not allowed by the current build.
9 #endif
10 
11 #include <sifteo/asset.h>
12 #include <sifteo/abi.h>
13 
14 namespace Sifteo {
15 
30 struct AudioChannel {
31  _SYSAudioChannelID sys;
32  typedef _SYSAudioChannelID AudioChannelID;
33 
35  static const AudioChannelID UNDEFINED = _SYS_AUDIO_INVALID_CHANNEL_ID;
36 
38  static const AudioChannelID NUM_CHANNELS = _SYS_AUDIO_MAX_CHANNELS;
39 
41  static const int32_t MAX_VOLUME = _SYS_AUDIO_MAX_VOLUME;
42 
44  enum LoopMode {
45  UNDEF_LOOP = _SYS_LOOP_UNDEF,
46  ONCE = _SYS_LOOP_ONCE,
47  REPEAT = _SYS_LOOP_REPEAT,
48  };
49 
57  {}
58 
65  AudioChannel(AudioChannelID id) : sys(id)
66  {}
67 
72  void init(AudioChannelID id)
73  {
74  ASSERT(id < NUM_CHANNELS && "AudioChannel ID is invalid");
75  sys = id;
76  }
77 
83  bool play(const AssetAudio &asset, LoopMode loopMode = UNDEF_LOOP) const
84  {
85  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
86  return _SYS_audio_play(&asset.sys, sys, (_SYSAudioLoopType) loopMode);
87  }
88 
92  bool isPlaying() const
93  {
94  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
95  return _SYS_audio_isPlaying(sys);
96  }
97 
103  void stop() const
104  {
105  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
106  _SYS_audio_stop(sys);
107  }
108 
114  void pause() const
115  {
116  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
117  _SYS_audio_pause(sys);
118  }
119 
125  void resume() const
126  {
127  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
128  _SYS_audio_resume(sys);
129  }
130 
136  void setVolume(int volume) const
137  {
138  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
139  _SYS_audio_setVolume(sys, volume);
140  }
141 
148  void setSpeed(unsigned hz) const
149  {
150  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
151  _SYS_audio_setSpeed(sys, hz);
152  }
153 
157  int volume() const
158  {
159  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
160  return _SYS_audio_volume(sys);
161  }
162 
163  uint32_t pos() const
164  {
165  ASSERT(sys < NUM_CHANNELS && "AudioChannel has invalid ID");
166  return _SYS_audio_pos(sys);
167  }
168 };
169 
177 struct AudioTracker {
182  static bool play(const AssetTracker &asset) {
183  return _SYS_tracker_play(&asset.song);
184  }
185 
189  static bool resume() {
190  return _SYS_tracker_play(0);
191  }
192 
196  static void pause() {
197  _SYS_tracker_pause();
198  }
199 
205  static void stop() {
206  _SYS_tracker_stop();
207  }
208 
212  static bool isStopped() {
213  return _SYS_tracker_isStopped();
214  }
215 
219  static bool isPaused() {
220  return _SYS_tracker_isPaused();
221  }
222 
230  static void setVolume(int volume, _SYSAudioChannelID ch = -1)
231  {
232  ASSERT(volume >= 0 && volume <= _SYS_AUDIO_MAX_VOLUME);
233  _SYS_tracker_setVolume(volume, ch);
234  }
235 
242  static void setTempoModifier(int modifier)
243  {
244  ASSERT(modifier > -100);
245  _SYS_tracker_setTempoModifier(modifier);
246  }
247 
255  static void setPosition(uint16_t phrase, uint16_t row)
256  {
257  _SYS_tracker_setPosition(phrase, row);
258  }
259 };
260 
265 } // namespace Sifteo