mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-16 15:24:10 +02:00
411 lines
10 KiB
Beef
411 lines
10 KiB
Beef
![]() |
#region License
|
||
|
/* SDL2# - C# Wrapper for SDL2
|
||
|
*
|
||
|
* Copyright (c) 2013-2016 Ethan Lee.
|
||
|
*
|
||
|
* This software is provided 'as-is', without any express or implied warranty.
|
||
|
* In no event will the authors be held liable for any damages arising from
|
||
|
* the use of this software.
|
||
|
*
|
||
|
* Permission is granted to anyone to use this software for any purpose,
|
||
|
* including commercial applications, and to alter it and redistribute it
|
||
|
* freely, subject to the following restrictions:
|
||
|
*
|
||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||
|
* claim that you wrote the original software. If you use this software in a
|
||
|
* product, an acknowledgment in the product documentation would be
|
||
|
* appreciated but is not required.
|
||
|
*
|
||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||
|
* misrepresented as being the original software.
|
||
|
*
|
||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||
|
*
|
||
|
* Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
|
||
|
*
|
||
|
*/
|
||
|
#endregion
|
||
|
|
||
|
#region Using Statements
|
||
|
using System;
|
||
|
#endregion
|
||
|
|
||
|
namespace SDL2
|
||
|
{
|
||
|
public static class SDLMixer
|
||
|
{
|
||
|
/* Similar to the headers, this is the version we're expecting to be
|
||
|
* running with. You will likely want to check this somewhere in your
|
||
|
* program!
|
||
|
*/
|
||
|
public const int32 MIXER_MAJOR_VERSION = 2;
|
||
|
public const int32 MIXER_MINOR_VERSION = 0;
|
||
|
public const int32 MIXER_PATCHLEVEL = 2;
|
||
|
|
||
|
/* In C, you can redefine this value before including SDL_mixer.h.
|
||
|
* We're not going to allow this in SDL2#, since the value of this
|
||
|
* variable is persistent and not dependent on preprocessor ordering.
|
||
|
*/
|
||
|
public const int32 MIX_CHANNELS = 8;
|
||
|
|
||
|
public static readonly int32 MIX_DEFAULT_FREQUENCY = 22050;
|
||
|
public static readonly uint16 MIX_DEFAULT_FORMAT =
|
||
|
BitConverter.IsLittleEndian ? SDL.AUDIO_S16LSB : SDL.AUDIO_S16MSB;
|
||
|
public static readonly int32 MIX_DEFAULT_CHANNELS = 2;
|
||
|
public static readonly uint8 MIX_MAX_VOLUME = 128;
|
||
|
|
||
|
public enum MIX_InitFlags
|
||
|
{
|
||
|
Flac = 0x00000001,
|
||
|
Mod = 0x00000002,
|
||
|
Mp3 = 0x00000008,
|
||
|
Ogg = 0x00000010,
|
||
|
Mid = 0x00000020,
|
||
|
}
|
||
|
|
||
|
public enum Fading
|
||
|
{
|
||
|
NoFading,
|
||
|
FadingOut,
|
||
|
FadingIn
|
||
|
}
|
||
|
|
||
|
public enum MusicType
|
||
|
{
|
||
|
None,
|
||
|
Cmd,
|
||
|
Wav,
|
||
|
Mod,
|
||
|
Mid,
|
||
|
Ogg,
|
||
|
Mp3,
|
||
|
Mp3Mad,
|
||
|
Flac,
|
||
|
Modplug
|
||
|
}
|
||
|
|
||
|
public function void MixFuncDelegate(void* udata, uint8* stream, int32 len);
|
||
|
|
||
|
public function void Mix_EffectFunc_t(int32 chan, void* stream, int32 len, void* udata);
|
||
|
|
||
|
public function void Mix_EffectDone_t(int32 chan, void* udata);
|
||
|
|
||
|
public function void MusicFinishedDelegate();
|
||
|
|
||
|
public function void ChannelFinishedDelegate(int32 channel);
|
||
|
|
||
|
public function int32 SoundFontDelegate(char8* a, void* b);
|
||
|
|
||
|
public static void SDL_MIXER_VERSION(out SDL.Version X)
|
||
|
{
|
||
|
X.major = MIXER_MAJOR_VERSION;
|
||
|
X.minor = MIXER_MINOR_VERSION;
|
||
|
X.patch = MIXER_PATCHLEVEL;
|
||
|
}
|
||
|
|
||
|
[LinkName("Version ")]
|
||
|
public static extern SDL.Version MIX_Linked_Version();
|
||
|
|
||
|
|
||
|
[LinkName("Mix_Init")]
|
||
|
public static extern int32 Init(MIX_InitFlags flags);
|
||
|
|
||
|
[LinkName("Mix_Quit")]
|
||
|
public static extern void Quit();
|
||
|
|
||
|
[LinkName("Mix_OpenAudio")]
|
||
|
public static extern int32 OpenAudio(
|
||
|
int frequency,
|
||
|
uint16 format,
|
||
|
int channels,
|
||
|
int chunksize
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_AllocateChannels")]
|
||
|
public static extern int32 AllocateChannels(int32 numchans);
|
||
|
|
||
|
[LinkName("Mix_QuerySpec")]
|
||
|
public static extern int32 QuerySpec(
|
||
|
out int32 frequency,
|
||
|
out uint16 format,
|
||
|
out int32 channels
|
||
|
);
|
||
|
|
||
|
/* src refers to an SDL_RWops*, IntPtr to a Mix_Chunk* */
|
||
|
/* THIS IS A PUBLIC RWops FUNCTION! */
|
||
|
[LinkName("Mix_LoadWAV_RW")]
|
||
|
public static extern Chunk* LoadWAV_RW(
|
||
|
SDL.RWOps* src,
|
||
|
int freesrc
|
||
|
);
|
||
|
|
||
|
public static Chunk* LoadWAV(StringView file)
|
||
|
{
|
||
|
SDL.RWOps* rwops = SDL.RWFromFile(file.ToScopeCStr!(), "rb");
|
||
|
return LoadWAV_RW(rwops, 1);
|
||
|
}
|
||
|
|
||
|
[LinkName("Mix_LoadMUS")]
|
||
|
public static extern Music* LoadMUS(char8* file);
|
||
|
|
||
|
[LinkName("Mix_QuickLoad_WAV")]
|
||
|
public static extern Chunk* QuickLoad_WAV(uint8* mem);
|
||
|
|
||
|
[LinkName("Mix_QuickLoad_RAW")]
|
||
|
public static extern Chunk* QuickLoad_RAW(uint8* mem, uint len);
|
||
|
|
||
|
[LinkName("Mix_FreeChunk")]
|
||
|
public static extern void FreeChunk(Chunk* chunk);
|
||
|
|
||
|
[LinkName("Mix_FreeMusic")]
|
||
|
public static extern void FreeMusic(Music* music);
|
||
|
|
||
|
[LinkName("Mix_GetNumChunkDecoders")]
|
||
|
public static extern int32 GetNumChunkDecoders();
|
||
|
|
||
|
[LinkName("Mix_GetChunkDecoder")]
|
||
|
public static extern char8* Mix_GetChunkDecoder(int32 index);
|
||
|
|
||
|
[LinkName("Mix_GetNumMusicDecoders")]
|
||
|
public static extern int32 GetNumMusicDecoders();
|
||
|
|
||
|
[LinkName("Mix_GetMusicDecoder")]
|
||
|
public static extern char8* GetMusicDecoder(int32 index);
|
||
|
|
||
|
[LinkName("Mix_GetMusicType")]
|
||
|
public static extern MusicType GetMusicType(Music* music);
|
||
|
|
||
|
[LinkName("Mix_SetPostMix")]
|
||
|
public static extern void SetPostMix(
|
||
|
MixFuncDelegate mix_func,
|
||
|
void* arg
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_HookMusic")]
|
||
|
public static extern void HookMusic(
|
||
|
MixFuncDelegate mix_func,
|
||
|
void* arg
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_HookMusicFinished")]
|
||
|
public static extern void HookMusicFinished(
|
||
|
MusicFinishedDelegate music_finished
|
||
|
);
|
||
|
|
||
|
/* IntPtr refers to a void* */
|
||
|
[LinkName("Mix_GetMusicHookData")]
|
||
|
public static extern void* GetMusicHookData();
|
||
|
|
||
|
[LinkName("Mix_ChannelFinished")]
|
||
|
public static extern void ChannelFinished(
|
||
|
ChannelFinishedDelegate channel_finished
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_RegisterEffect")]
|
||
|
public static extern int32 RegisterEffect(
|
||
|
int chan,
|
||
|
Mix_EffectFunc_t f,
|
||
|
Mix_EffectDone_t d,
|
||
|
void* arg // void*
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_UnregisterEffect")]
|
||
|
public static extern int32 UnregisterEffect(
|
||
|
int channel,
|
||
|
Mix_EffectFunc_t f
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_UnregisterAllEffects")]
|
||
|
public static extern int32 UnregisterAllEffects(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_SetPanning")]
|
||
|
public static extern int32 SetPanning(
|
||
|
int channel,
|
||
|
uint8 left,
|
||
|
uint8 right
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_SetPosition")]
|
||
|
public static extern int32 SetPosition(
|
||
|
int channel,
|
||
|
int16 angle,
|
||
|
uint8 distance
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_SetDistance")]
|
||
|
public static extern int32 SetDistance(int32 channel, uint8 distance);
|
||
|
|
||
|
[LinkName("Mix_SetReverseStereo")]
|
||
|
public static extern int32 SetReverseStereo(int32 channel, int32 flip);
|
||
|
|
||
|
[LinkName("Mix_ReserveChannels")]
|
||
|
public static extern int32 ReserveChannels(int32 num);
|
||
|
|
||
|
[LinkName("Mix_GroupChannel")]
|
||
|
public static extern int32 GroupChannel(int32 which, int32 tag);
|
||
|
|
||
|
[LinkName("Mix_GroupChannels")]
|
||
|
public static extern int32 GroupChannels(int32 from, int32 to, int32 tag);
|
||
|
|
||
|
[LinkName("Mix_GroupAvailable")]
|
||
|
public static extern int32 GroupAvailable(int32 tag);
|
||
|
|
||
|
[LinkName("Mix_GroupCount")]
|
||
|
public static extern int32 GroupCount(int32 tag);
|
||
|
|
||
|
[LinkName("Mix_GroupOldest")]
|
||
|
public static extern int32 GroupOldest(int32 tag);
|
||
|
|
||
|
[LinkName("Mix_GroupNewer")]
|
||
|
public static extern int32 GroupNewer(int32 tag);
|
||
|
|
||
|
public struct Music;
|
||
|
public struct Chunk;
|
||
|
|
||
|
public static int32 PlayChannel(int channel, Chunk* chunk, int loops)
|
||
|
{
|
||
|
return PlayChannelTimed(channel, chunk, loops, -1);
|
||
|
}
|
||
|
|
||
|
/* chunk refers to a Mix_Chunk* */
|
||
|
[LinkName("Mix_PlayChannelTimed")]
|
||
|
public static extern int32 PlayChannelTimed(
|
||
|
int channel,
|
||
|
Chunk* chunk,
|
||
|
int loops,
|
||
|
int ticks
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_PlayMusic")]
|
||
|
public static extern int32 PlayMusic(Music* music, int32 loops);
|
||
|
|
||
|
[LinkName("Mix_FadeInMusic")]
|
||
|
public static extern int32 FadeInMusic(
|
||
|
Music* music,
|
||
|
int loops,
|
||
|
int ms
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_FadeInMusicPos")]
|
||
|
public static extern int32 FadeInMusicPos(
|
||
|
Music* music,
|
||
|
int loops,
|
||
|
int ms,
|
||
|
double position
|
||
|
);
|
||
|
|
||
|
public static int32 Mix_FadeInChannel(
|
||
|
int channel,
|
||
|
Chunk* chunk,
|
||
|
int loops,
|
||
|
int ms
|
||
|
)
|
||
|
{
|
||
|
return FadeInChannelTimed(channel, chunk, loops, ms, -1);
|
||
|
}
|
||
|
|
||
|
[LinkName("Mix_FadeInChannelTimed")]
|
||
|
public static extern int32 FadeInChannelTimed(
|
||
|
int channel,
|
||
|
Chunk* chunk,
|
||
|
int loops,
|
||
|
int ms,
|
||
|
int ticks
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_Volume")]
|
||
|
public static extern int32 Volume(int32 channel, int32 volume);
|
||
|
|
||
|
/* chunk refers to a Mix_Chunk* */
|
||
|
[LinkName("Mix_VolumeChunk")]
|
||
|
public static extern int32 VolumeChunk(
|
||
|
Chunk* chunk,
|
||
|
int volume
|
||
|
);
|
||
|
|
||
|
[LinkName("Mix_VolumeMusic")]
|
||
|
public static extern int32 VolumeMusic(int32 volume);
|
||
|
|
||
|
[LinkName("Mix_HaltChannel")]
|
||
|
public static extern int32 HaltChannel(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_HaltGroup")]
|
||
|
public static extern int32 HaltGroup(int32 tag);
|
||
|
|
||
|
[LinkName("Mix_HaltMusic")]
|
||
|
public static extern int32 HaltMusic();
|
||
|
|
||
|
[LinkName("Mix_ExpireChannel")]
|
||
|
public static extern int32 ExpireChannel(int32 channel, int32 ticks);
|
||
|
|
||
|
[LinkName("Mix_FadeOutChannel")]
|
||
|
public static extern int32 FadeOutChannel(int32 which, int32 ms);
|
||
|
|
||
|
[LinkName("Mix_FadeOutGroup")]
|
||
|
public static extern int32 FadeOutGroup(int32 tag, int32 ms);
|
||
|
|
||
|
[LinkName("Mix_FadeOutMusic")]
|
||
|
public static extern int32 FadeOutMusic(int32 ms);
|
||
|
|
||
|
[LinkName("Mix_FadingMusic")]
|
||
|
public static extern Fading FadingMusic();
|
||
|
|
||
|
[LinkName("Mix_FadingChannel")]
|
||
|
public static extern Fading FadingChannel(int32 which);
|
||
|
|
||
|
[LinkName("Mix_Pause")]
|
||
|
public static extern void Pause(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_Resume")]
|
||
|
public static extern void Resume(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_Paused")]
|
||
|
public static extern int32 Paused(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_PauseMusic")]
|
||
|
public static extern void PauseMusic();
|
||
|
|
||
|
[LinkName("Mix_ResumeMusic")]
|
||
|
public static extern void ResumeMusic();
|
||
|
|
||
|
[LinkName("Mix_RewindMusic")]
|
||
|
public static extern void RewindMusic();
|
||
|
|
||
|
[LinkName("Mix_PausedMusic")]
|
||
|
public static extern int32 PausedMusic();
|
||
|
|
||
|
[LinkName("Mix_SetMusicPosition")]
|
||
|
public static extern int32 SetMusicPosition(double position);
|
||
|
|
||
|
[LinkName("Mix_Playing")]
|
||
|
public static extern int32 Playing(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_PlayingMusic")]
|
||
|
public static extern int32 PlayingMusic();
|
||
|
|
||
|
[LinkName("Mix_SetMusicCMD")]
|
||
|
public static extern int32 Mix_SetMusicCMD(char8* command);
|
||
|
|
||
|
[LinkName("Mix_SetSynchroValue")]
|
||
|
public static extern int32 SetSynchroValue(int32 value);
|
||
|
|
||
|
[LinkName("Mix_GetSynchroValue")]
|
||
|
public static extern int32 GetSynchroValue();
|
||
|
|
||
|
[LinkName("Mix_SetSoundFonts")]
|
||
|
public static extern int32 SetSoundFonts(char8* paths);
|
||
|
|
||
|
[LinkName("Mix_GetSoundFonts")]
|
||
|
public static extern char8* GetSoundFonts();
|
||
|
|
||
|
[LinkName("Mix_EachSoundFont")]
|
||
|
public static extern int32 EachSoundFont(SoundFontDelegate func, void* data);
|
||
|
|
||
|
[LinkName("Mix_GetChunk")]
|
||
|
public static extern void* GetChunk(int32 channel);
|
||
|
|
||
|
[LinkName("Mix_CloseAudio")]
|
||
|
public static extern void CloseAudio();
|
||
|
}
|
||
|
}
|