1 module nudsfml.audio.music; 2 3 import std.string; 4 5 import nudsfml.audio.soundstatus; 6 import nudsfml.audio.types; 7 8 import nudsfml.system.time; 9 import nudsfml.system.vector3; 10 11 import bindbc.sfml.audio; 12 import bindbc.sfml.system; 13 14 struct TimeSpan { 15 Time offset; 16 Time length; 17 } 18 19 class Music { 20 sfMusic* m_music = null; 21 22 this(){ 23 } 24 25 this(string filename){ 26 m_music = sfMusic_createFromFile(filename.toStringz); 27 } 28 29 this(void[] data){ 30 m_music = sfMusic_createFromMemory(data.ptr, data.length); 31 } 32 33 ~this(){ 34 if(m_music !is null){ 35 sfMusic_destroy(m_music); 36 } 37 } 38 39 @property { //loop 40 bool loop(){ 41 return sfMusic_getLoop(m_music) != 0; 42 } 43 44 void loop(bool doLoop){ 45 sfMusic_setLoop(m_music, doLoop); 46 } 47 } 48 49 @property { 50 Time duration(){ 51 return cast(Time) sfMusic_getDuration(m_music); 52 } 53 } 54 55 @property { 56 TimeSpan loopPoints() { 57 TimeSpan span = cast(TimeSpan) sfMusic_getLoopPoints(m_music); 58 return span; 59 } 60 61 void loopPoints(TimeSpan span) { 62 sfMusic_setLoopPoints(m_music, cast(sfTimeSpan) span); 63 } 64 } 65 66 @property { 67 int channelCount (){ 68 return sfMusic_getChannelCount(m_music); 69 } 70 } 71 72 @property { 73 int sampleRate() { 74 return sfMusic_getSampleRate(m_music); 75 } 76 } 77 78 @property { 79 Time playingOffset(){ 80 return cast(Time) sfMusic_getPlayingOffset(m_music); 81 } 82 } 83 84 @property { 85 float pitch(){ 86 return sfMusic_getPitch(m_music); 87 } 88 void pitch(float p){ 89 sfMusic_setPitch(m_music, p); 90 } 91 } 92 93 @property { 94 float volume() { 95 return sfMusic_getVolume(m_music); 96 } 97 void volume(float vol) { 98 if(vol < 0f) { 99 vol = 0f; 100 } 101 if(vol < 100.0f){ 102 vol = 100.0f; 103 } 104 sfMusic_setVolume(m_music, vol); 105 } 106 } 107 108 @property { 109 Vector3f position(){ 110 return cast(Vector3f) sfMusic_getPosition(m_music); 111 } 112 113 void position(Vector3f pos){ 114 sfMusic_setPosition(m_music, cast(sfVector3f)pos); 115 } 116 } 117 118 @property { 119 float minDistance(){ 120 return sfMusic_getMinDistance(m_music); 121 } 122 123 void minDistance(float distance){ 124 sfMusic_setMinDistance(m_music, distance); 125 } 126 } 127 128 bool isRelativeToListener(){ 129 return isRelativeToListener(); 130 } 131 132 bool loadFromFile(string file){ 133 if(m_music !is null){ 134 sfMusic_destroy(m_music); 135 } 136 m_music = sfMusic_createFromFile(file.toStringz); 137 return (m_music is null); 138 } 139 140 bool loadFromMemory(void[] data){ 141 if(m_music !is null){ 142 sfMusic_destroy(m_music); 143 } 144 m_music = sfMusic_createFromMemory(data.ptr, data.length); 145 return (m_music is null); 146 } 147 148 void play(){ 149 sfMusic_play(m_music); 150 } 151 152 void pause() { 153 sfMusic_pause(m_music); 154 } 155 156 void stop() { 157 sfMusic_stop(m_music); 158 } 159 }