1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-15 14:54:09 +02:00
Beef/BeefLibs/SDL2/src/SDL2_mixer.bf
Brian Fiete b63a243fd7 Working on installer, fixing more Win32 issues
Throwing error on member references with ".." cascade token outside invocations (ie: "ts..mA = 123")
Fixed 'Thread.ModuleTLSIndex' error - which caused us TLS lookup failures in Beef DLLs
Fixed some hotswap errors
Made BeefPerf shut down properly
Fixed an 'int literal' FixIntUnknown issue where rhs was System.Object which caused an illegal boxing
Fixed COFF::LocateSymbol issues with Win32 and also with linking to static libraries - showed up with hot-linking in fmod when hot-adding a floating point mod
Fixed a couple memory leaks
Fixed alignment issue in COFF::ParseCompileUnit
2019-09-02 17:39:47 -07:00

410 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();
}
}