frusdl 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,51 @@
1
+ ###########################################
2
+ # FRUSDL - Ffi RUby SDL bindings - README #
3
+ ###########################################
4
+
5
+
6
+ What is it?
7
+ ===========
8
+ Wafer-thin bindings to SDL, SDL_image, SDL_ttf, SDL_mixer, SDL_gfx, and
9
+ SGE for MRI, Jruby, Rubinius, ... using FFI. You will be able to easily port
10
+ your Ruby/SDL games to JRuby.
11
+
12
+ For now, only a few high-level, Ruby/SDL compatible objects are available.
13
+ But the low level wrappers should work fine for experimenting, or even to program a
14
+ quick demo game.
15
+
16
+ Goal
17
+ =====
18
+
19
+ Source code compatibility with Ruby/SDL 2.0.1 or higher, but with lower level
20
+ functions available. All help for towards this goal is welcome.
21
+
22
+ Version
23
+ =======
24
+
25
+ 0.0.1
26
+
27
+ Requirements
28
+ ============
29
+ * Ruby: MRI 1.9.1 or higher, JRuby 1.1.6 or higher. Rubinius currently untested.
30
+ * FFI: Version 0.2.0 or higher or MRI.
31
+ * The shared libraries for SDL 1.2.x, SDL_image, SDL_ttf, SDL_mixer, SDL_gfx
32
+ or SGE should be installed properly on your system.
33
+
34
+ Documentation
35
+ =============
36
+
37
+ None yet. Check out the documentation of SDL itself, since the
38
+ low level interface to sdl in Frusdl::Low should be mostly compatible with
39
+ the C way of doing things, if you include Frusdl::Low. Alternatively,
40
+ use the source, Ruke. ^_^
41
+
42
+ License
43
+ =======
44
+
45
+ ZLIB license. Please note that SDL has a LGPL license. However, FRUSDL
46
+ uses dynamic linking, so , I think it should be fine.
47
+
48
+ Contact
49
+ =======
50
+
51
+ beoran AT rubyforge POINT org
data/lib/frusdl.rb ADDED
@@ -0,0 +1,145 @@
1
+ #
2
+ # Frusdl : Wafer-thin bindings to SDL, SDL_image, SDL_ttf, SDL_mixer, SDL_gfx,
3
+ # and SGE for MRI, Jruby, Rubinius, ... using FFI
4
+ #
5
+ # Goal: source code compatibility with Ruby/SDL 2.0.1,
6
+ # but with lower level functions available.
7
+ #
8
+ # Version: 0.0.1
9
+ #
10
+ # Requirements:
11
+ # * Ruby ( MRI or JRUBY 1.1.6 or higher)
12
+ # * FFI ( version 0.2.0 or higher or MRI)
13
+ # * The shared libraries for SDL 1.2.x, SDL_image, SDL_ttf, SDL_mixer, SDL_gfx
14
+ # or SGE should be installed properly on your system.
15
+ #
16
+ # Licence: ZLIB license.
17
+ #
18
+ # Frusdl
19
+ #
20
+ # Copyright (c) 2008, Bjorn De Meyer
21
+ #
22
+ # This software is provided 'as-is', without any express or implied
23
+ # warranty. In no event will the authors be held liable for any damages
24
+ # arising from the use of this software.
25
+ #
26
+ # Permission is granted to anyone to use this software for any purpose,
27
+ # including commercial applications, and to alter it and redistribute it
28
+ # freely, subject to the following restrictions:
29
+ # 1. The origin of this software must not be misrepresented; you must not
30
+ # claim that you wrote the original software. If you use this software
31
+ # in a product, an acknowledgment in the product documentation would be
32
+ # appreciated but is not required.
33
+ #
34
+ # 2. Altered source versions must be plainly marked as such, and must not be
35
+ # misrepresented as being the original software.
36
+ #
37
+ # 3. This notice may not be removed or altered from any source
38
+ # distribution.
39
+
40
+
41
+
42
+ begin
43
+ require 'rubygems'
44
+ rescue
45
+ # try to load Rubygems, but don't care if it fails.
46
+ end
47
+
48
+ require 'ffi'
49
+ # We need FFI
50
+
51
+
52
+ module Frusdl
53
+ # Low level FFI functions and structures
54
+ autoload :Low , 'frusdl/low'
55
+ # Meta programming helper that makes writing wrappers easier.
56
+ autoload :Wrap , 'frusdl/wrap'
57
+ # High level SDL wrapper, compatible with Ruby/SDL, unimplemented for now.
58
+ autoload :SDL , 'frusdl/sdl'
59
+ end
60
+
61
+
62
+ # Source code compatibility with Ruby/SDL
63
+ unless defined? SDL
64
+ # SDL = Frusdl
65
+ end
66
+
67
+
68
+
69
+
70
+
71
+
72
+ if $0 == __FILE__
73
+
74
+ def peek_at_proc
75
+ puts `ps u -p #{Process.pid}`
76
+ end
77
+
78
+
79
+
80
+ include Frusdl::Low
81
+
82
+ puts SDL.SDL_getenv('HOME')
83
+
84
+
85
+ fontname = '/usr/share/fonts/liberation/LiberationSerif-Regular.ttf'
86
+ Frusdl::SDL.init(Frusdl::SDL::INIT_EVERYTHING)
87
+ p Frusdl::SDL::Screen.driver_name
88
+ p Frusdl::SDL::Screen.list_modes(nil, SDL::SDL_FULLSCREEN)
89
+ info = Frusdl::SDL::Screen.info
90
+ p info.video_mem
91
+ p info.current_w
92
+ p info.current_h
93
+ p info.pixel_format.alpha
94
+ # at_exit { SDL.SDL_Quit() }
95
+ TTF.TTF_Init()
96
+ at_exit { TTF.TTF_Quit() }
97
+ fontp = TTF.TTF_OpenFont(fontname, 20)
98
+ screen2 = Frusdl::SDL::Screen.open(640, 480, 32, SDL::SDL_HWSURFACE | SDL::SDL_DOUBLEBUF )
99
+ p screen2.w
100
+ p screen2.h
101
+ screenp = screen2.pointer
102
+ # screenp = SDL.SDL_SetVideoMode(640, 480, 32, SDL::SDL_HWSURFACE | SDL::SDL_DOUBLEBUF )
103
+ # surf = SDL.SDL_CreateRGBSurface(0, 32, 32, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000)
104
+
105
+ njoy = SDL.SDL_NumJoysticks()
106
+ puts "You have a joystick: " if njoy == 1
107
+ puts "You have #{njoy} joysticks: " if njoy > 1
108
+ puts "No joysticks found!" if njoy < 1
109
+ for i in (0...njoy) do
110
+ puts SDL.SDL_JoystickName(i)
111
+ end
112
+
113
+ peek_at_proc
114
+
115
+ screen = SDL::SDL_Surface.new(screenp)
116
+ rect = SDL::SDL_Rect.new
117
+ screen_format = SDL::SDL_PixelFormat.new(screen[:format])
118
+ white = SDL::SDL_MapRGB(screen_format, 255,255,255)
119
+ blue = SDL::SDL_MapRGB(screen_format, 0, 0, 128)
120
+ p screen_format[:bitsperpixel]
121
+ rect[:w] = 640
122
+ rect[:h] = 20
123
+ mesg = "SDL and Ruby are sitting on a tree... K I S S I N G!"
124
+ textp = TTF.TTF_RenderUTF8_Blended(fontp, mesg, white)
125
+ event = SDL::SDL_Event.new
126
+
127
+ loop do
128
+ polled = SDL.SDL_PollEvent(event.pointer)
129
+ if polled > 0
130
+ break if event[:type] == SDL::SDL_QUIT
131
+ end
132
+ SDL.SDL_FillRect(screen.pointer, rect.pointer, blue)
133
+ # SGE.sge_FilledEllipse(screenp, 300, 100, 10, 20, blue)
134
+ SDL.SDL_UpperBlit(textp, nil, screen, rect)
135
+ screen2.flip
136
+ # And flip the screen
137
+ end
138
+
139
+ SDL.SDL_FreeSurface(textp)
140
+ # Free the rendered text surface.
141
+ GC.start # force collection
142
+ puts "End"
143
+ peek_at_proc
144
+ end
145
+
data/lib/frusdl/low.rb ADDED
@@ -0,0 +1,30 @@
1
+ # Copyright (c) 2008, Bjorn De Meyer
2
+ #
3
+ # This software is provided 'as-is', without any express or implied
4
+ # warranty. In no event will the authors be held liable for any damages
5
+ # arising from the use of this software.
6
+ #
7
+ # Permission is granted to anyone to use this software for any purpose,
8
+ # including commercial applications, and to alter it and redistribute it
9
+ # freely, subject to the following restrictions:
10
+ # 1. The origin of this software must not be misrepresented; you must not
11
+ # claim that you wrote the original software. If you use this software
12
+ # in a product, an acknowledgment in the product documentation would be
13
+ # appreciated but is not required.
14
+ #
15
+ # 2. Altered source versions must be plainly marked as such, and must not be
16
+ # misrepresented as being the original software.
17
+ #
18
+ # 3. This notice may not be removed or altered from any source
19
+ # distribution.
20
+
21
+ module Frusdl
22
+ module Low
23
+ autoload :IMG, 'frusdl/low/img'
24
+ autoload :GFX, 'frusdl/low/gfx'
25
+ autoload :MIX, 'frusdl/low/mix'
26
+ autoload :SDL, 'frusdl/low/sdl'
27
+ autoload :SGE, 'frusdl/low/sge'
28
+ autoload :TTF, 'frusdl/low/ttf'
29
+ end
30
+ end
@@ -0,0 +1,95 @@
1
+ # Copyright (c) 2008, Bjorn De Meyer
2
+ #
3
+ # This software is provided 'as-is', without any express or implied
4
+ # warranty. In no event will the authors be held liable for any damages
5
+ # arising from the use of this software.
6
+ #
7
+ # Permission is granted to anyone to use this software for any purpose,
8
+ # including commercial applications, and to alter it and redistribute it
9
+ # freely, subject to the following restrictions:
10
+ # 1. The origin of this software must not be misrepresented; you must not
11
+ # claim that you wrote the original software. If you use this software
12
+ # in a product, an acknowledgment in the product documentation would be
13
+ # appreciated but is not required.
14
+ #
15
+ # 2. Altered source versions must be plainly marked as such, and must not be
16
+ # misrepresented as being the original software.
17
+ #
18
+ # 3. This notice may not be removed or altered from any source
19
+ # distribution.
20
+
21
+ module Frusdl
22
+ module Low
23
+ # Alternative graphics primitives library
24
+ module GFX
25
+ extend FFI::Library
26
+ ffi_lib('SDL_gfx')
27
+
28
+ attach_function :pixelColor , [:pointer, :short, :short, :ulong], :int
29
+ attach_function :pixelRGBA , [:pointer, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
30
+ attach_function :hlineColor , [:pointer, :short, :short, :short, :ulong], :int
31
+ attach_function :hlineRGBA , [:pointer, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
32
+ attach_function :vlineColor , [:pointer, :short, :short, :short, :ulong], :int
33
+ attach_function :vlineRGBA , [:pointer, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
34
+ attach_function :rectangleColor, [:pointer, :short, :short, :short, :short, :ulong], :int
35
+ attach_function :rectangleRGBA , [:pointer, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
36
+ attach_function :boxColor , [:pointer, :short, :short, :short, :short, :ulong], :int
37
+ attach_function :boxRGBA , [:pointer, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
38
+ attach_function :lineColor , [:pointer, :short, :short, :short, :short, :ulong], :int
39
+ attach_function :lineRGBA , [:pointer, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
40
+ attach_function :aalineColor , [:pointer, :short, :short, :short, :short, :ulong], :int
41
+ attach_function :aalineRGBA , [:pointer, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
42
+ attach_function :circleColor , [:pointer, :short, :short, :short, :ulong], :int
43
+ attach_function :circleRGBA , [:pointer, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
44
+ attach_function :aacircleColor, [:pointer, :short, :short, :short, :ulong], :int
45
+ attach_function :aacircleRGBA , [:pointer, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
46
+ attach_function :filledCircleColor, [:pointer, :short, :short, :short, :ulong], :int
47
+ attach_function :filledCircleRGBA , [:pointer, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
48
+ attach_function :ellipseColor , [:pointer, :short, :short, :short, :short, :ulong], :int
49
+ attach_function :ellipseRGBA , [:pointer, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
50
+ attach_function :aaellipseColor , [:pointer, :short, :short, :short, :short, :ulong], :int
51
+ attach_function :aaellipseRGBA , [:pointer, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
52
+
53
+ attach_function :pieColor , [:pointer, :short, :short, :short, :short, :short, :ulong], :int
54
+ attach_function :pieRGBA , [:pointer, :short, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
55
+ attach_function :filledPieColor, [:pointer, :short, :short, :short, :short, :short, :ulong], :int
56
+ attach_function :filledPieRGBA , [:pointer, :short, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
57
+ attach_function :trigonColor , [:pointer, :short, :short, :short, :short, :short, :short, :ulong], :int
58
+ attach_function :trigonRGBA , [:pointer, :short, :short, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
59
+ attach_function :aatrigonColor , [:pointer, :short, :short, :short, :short, :short, :short, :ulong], :int
60
+ attach_function :aatrigonRGBA , [:pointer, :short, :short, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
61
+ attach_function :filledTrigonColor, [:pointer, :short, :short, :short, :short, :short, :short, :ulong], :int
62
+ attach_function :filledTrigonRGBA , [:pointer, :short, :short, :short, :short, :short, :short, :uchar, :uchar, :uchar, :uchar], :int
63
+ attach_function :polygonColor, [:pointer, :pointer, :pointer, :int, :ulong], :int
64
+ attach_function :polygonRGBA , [:pointer, :pointer, :pointer, :int, :uchar, :uchar, :uchar, :uchar], :int
65
+ attach_function :aapolygonColor, [:pointer, :pointer, :pointer, :int, :ulong], :int
66
+ attach_function :aapolygonRGBA , [:pointer, :pointer, :pointer, :int, :uchar, :uchar, :uchar, :uchar], :int
67
+ attach_function :filledPolygonColor, [:pointer, :pointer, :pointer, :int, :ulong], :int
68
+ attach_function :filledPolygonRGBA , [:pointer, :pointer, :pointer, :int, :uchar, :uchar, :uchar, :uchar], :int
69
+ attach_function :texturedPolygon, [:pointer, :pointer, :pointer, :int, :pointer, :int, :int], :int
70
+ attach_function :bezierColor, [:pointer, :pointer, :pointer, :int, :int, :ulong], :int
71
+ attach_function :bezierRGBA , [:pointer, :pointer, :pointer, :int, :int, :uchar, :uchar, :uchar, :uchar], :int
72
+
73
+ SMOOTHING_OFF = 0
74
+ SMOOTHING_ON = 1
75
+
76
+ # Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface.
77
+ attach_function :rotozoomSurface , [:pointer, :double, :double, :int], :pointer
78
+ attach_function :rotozoomSurfaceXY, [:pointer, :double, :double, :double, :int], :pointer
79
+ # Returns the size of the target surface for a rotozoomSurface() call
80
+ attach_function :rotozoomSurfaceSize, [:int, :int, :double, :double, :pointer, :pointer], :void
81
+ attach_function :rotozoomSurfaceSizeXY, [:int, :int, :double, :double, :double, :pointer, :pointer], :void
82
+ # Zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface.
83
+ attach_function :zoomSurface, [:pointer, :double, :double, :int], :pointer
84
+ # Returns the size of the target surface for a zoomSurface() call
85
+ attach_function :zoomSurfaceSize, [:int, :int, :double, :double, :pointer, :pointer], :void
86
+ # Shrinks a 32bit or 8bit 'src' surface to a newly created 'dst' surface.
87
+ attach_function :shrinkSurface, [:pointer, :int, :int], :pointer
88
+
89
+
90
+ end
91
+
92
+
93
+
94
+ end
95
+ end
@@ -0,0 +1,10 @@
1
+ module Frusdl
2
+ module Low
3
+ module IMG
4
+ extend FFI::Library
5
+ ffi_lib('SDL_image')
6
+ attach_function :IMG_Load, [:string], :pointer
7
+ attach_function :IMG_Load_RW, [:pointer, :int], :pointer
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,138 @@
1
+ # Copyright (c) 2008, Bjorn De Meyer
2
+ #
3
+ # This software is provided 'as-is', without any express or implied
4
+ # warranty. In no event will the authors be held liable for any damages
5
+ # arising from the use of this software.
6
+ #
7
+ # Permission is granted to anyone to use this software for any purpose,
8
+ # including commercial applications, and to alter it and redistribute it
9
+ # freely, subject to the following restrictions:
10
+ # 1. The origin of this software must not be misrepresented; you must not
11
+ # claim that you wrote the original software. If you use this software
12
+ # in a product, an acknowledgment in the product documentation would be
13
+ # appreciated but is not required.
14
+ #
15
+ # 2. Altered source versions must be plainly marked as such, and must not be
16
+ # misrepresented as being the original software.
17
+ #
18
+ # 3. This notice may not be removed or altered from any source
19
+ # distribution.
20
+
21
+ module Frusdl
22
+ module Low
23
+ module MIX
24
+ extend FFI::Library
25
+ ffi_lib('SDL_mixer')
26
+ class Mix_Chunk < FFI::Struct
27
+ layout :allocated => :int,
28
+ :abuf => :pointer,
29
+ :alen => :ulong,
30
+ :volume => :uchar
31
+ end
32
+
33
+ MIX_NO_FADING = 0
34
+ MIX_FADING_OUT = 1
35
+ MIX_FADING_IN = 2
36
+
37
+ MUS_NONE = 0
38
+ MUS_CMD = 1
39
+ MUS_WAV = 2
40
+ MUS_MOD = 3
41
+ MUS_MID = 4
42
+ MUS_OGG = 5
43
+ MUS_MP3 = 6
44
+
45
+ class Mix_Music < FFI::Struct
46
+ layout :fake => :pointer
47
+ end
48
+
49
+ attach_function :Mix_OpenAudio, [:int, :ushort, :int, :int], :int
50
+ attach_function :Mix_AllocateChannels, [:int], :int
51
+ attach_function :Mix_QuerySpec, [:pointer, :pointer, :pointer], :int
52
+ # Load a wave file or a music (.mod .s3m .it .xm) file
53
+ attach_function :Mix_LoadWAV_RW, [:pointer, :int], :pointer
54
+ def self.Mix_LoadWAV(filename)
55
+ Mix_LoadWAV_RW(SDL_RWFromFile(filename, "rb"), 1)
56
+ end
57
+
58
+ attach_function :Mix_LoadMUS, [:string], :pointer
59
+ attach_function :Mix_LoadMUS_RW, [:pointer], :pointer
60
+ # Free an audio chunk previously loaded
61
+ attach_function :Mix_FreeChunk, [:pointer], :void
62
+ attach_function :Mix_FreeMusic, [:pointer], :void
63
+ attach_function :Mix_GetMusicType, [:pointer], :int
64
+ # skipped Mix_SetPostMix
65
+ # skipped extern Mix_HookMusic
66
+ # skiped Mix_HookMusicFinished
67
+ # skipped Mix_GetMusicHookData(void);
68
+ # skipped Mix_ChannelFinished
69
+ MIX_CHANNEL_POST = -2
70
+ # skipped Mix_RegisterEffect
71
+ # skipped Mix_UnregisterEffect
72
+ # skipped Mix_UnregisterAllEffects
73
+ # define MIX_EFFECTSMAXSPEED "MIX_EFFECTSMAXSPEED"
74
+ attach_function :Mix_SetPanning, [:int, :uchar, :uchar], :int
75
+ attach_function :Mix_SetPosition, [:int, :short, :uchar], :int
76
+ attach_function :Mix_SetDistance, [:int, :uchar], :int
77
+ attach_function :Mix_SetReverseStereo, [:int, :int], :int
78
+ attach_function :Mix_ReserveChannels, [:int], :int
79
+ attach_function :Mix_GroupChannel , [:int, :int], :int
80
+ attach_function :Mix_GroupChannels , [:int, :int, :int], :int
81
+ attach_function :Mix_GroupAvailable, [:int], :int
82
+ attach_function :Mix_GroupCount , [:int], :int
83
+ attach_function :Mix_GroupOldest , [:int], :int
84
+ attach_function :Mix_GroupNewer , [:int], :int
85
+
86
+ def self.Mix_PlayChannel(channel,chunk,loops)
87
+ Mix_PlayChannelTimed(channel,chunk,loops,-1)
88
+ end
89
+
90
+ attach_function :Mix_PlayChannelTimed , [:int, :pointer, :int, :int], :int
91
+ attach_function :Mix_PlayMusic , [:pointer, :int], :int
92
+ # Fade in music or a channel over "ms" milliseconds
93
+ attach_function :Mix_FadeInMusic , [:pointer, :int, :int], :int
94
+ attach_function :Mix_FadeInMusicPos , [:pointer, :int, :int, :double] , :int
95
+ attach_function :Mix_FadeInChannelTimed , [:int, :pointer, :int, :int, :int], :int
96
+
97
+ def self.Mix_FadeInChannel(channel, chunk, loops, ms)
98
+ Mix_FadeInChannelTimed(channel,chunk,loops,ms,-1)
99
+ end
100
+ # Set volume
101
+ attach_function :Mix_Volume , [:int , :int], :int
102
+ attach_function :Mix_VolumeChunk , [:pointer, :int , :int], :int
103
+ attach_function :Mix_VolumeMusic , [:int], :int
104
+ # Halt playing of a particular channel
105
+ attach_function :Mix_HaltChannel , [:int], :int
106
+ attach_function :Mix_HaltGroup , [:int], :int
107
+ attach_function :Mix_HaltMusic , [], :int
108
+ # Change the expiration delay for a particular channel.
109
+ attach_function :Mix_ExpireChannel , [:int, :int], :int
110
+ # Halt a channel, fading it out progressively till it's silent
111
+ attach_function :Mix_FadeOutChannel , [:int, :int], :int
112
+ attach_function :Mix_FadeOutGroup , [:int, :int], :int
113
+ attach_function :Mix_FadeOutMusic , [:int], :int
114
+ # Query the fading status of a channel
115
+ attach_function :Mix_FadingMusic , [] , :int
116
+ attach_function :Mix_FadingChannel , [:int], :int
117
+ # Pause/Resume a particular channel or music.
118
+ attach_function :Mix_Pause , [:int], :void
119
+ attach_function :Mix_Resume , [:int], :void
120
+ attach_function :Mix_Paused , [:int], :void
121
+ attach_function :Mix_PauseMusic , [], :void
122
+ attach_function :Mix_ResumeMusic , [], :void
123
+ attach_function :Mix_RewindMusic , [], :void
124
+ attach_function :Mix_PausedMusic , [], :int
125
+ attach_function :Mix_SetMusicPosition , [:double], :int
126
+ # Check the status of a specific channel.
127
+ attach_function :Mix_Playing , [:int], :int
128
+ attach_function :Mix_PlayingMusic , [], :int
129
+ # Stop music and set external music playback command
130
+ attach_function :Mix_SetMusicCMD , [:string], :int
131
+ # Skipping MIKMOD synchro values.
132
+ # Get the Mix_Chunk currently associated with a mixer channel
133
+ attach_function :Mix_GetChunk , [:int], :pointer
134
+ # Close the mixer, halting all playing audio
135
+ attach_function :Mix_CloseAudio , [:void], :void
136
+ end
137
+ end
138
+ end