gosu 0.10.6 → 0.10.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7e0dac99c81c5a229672c489a3b4a7b4cadb588
4
- data.tar.gz: 13fc464f740ed462b7669f27a19f912b19566692
3
+ metadata.gz: 59c5dceec74b7859dc96acf2a9e32f20dd3b62c3
4
+ data.tar.gz: 8ac26d8b8d1e74459c29e96b69079a5ba011c5df
5
5
  SHA512:
6
- metadata.gz: d4d75d8e44a3dac0d7cea92e1b09d5cfe9ec100de7483992e74c6292d6223e0de2d94d28aa8a56a7bce31c1b3dab7026b48504576de9fbc5325ebb367d9ff73d
7
- data.tar.gz: a5e0d9396708b8706b5f0a90f2e2ba6a3294edd7361894665253cc4918295097cf1a43400e0a5ba60941e759a78f867c8940959556a2c24786253e18c8db1ee4
6
+ metadata.gz: e25c8c25c6590a2e7edff4a85c6117b0713ae2777cc876960f35205f0e28b2db62dc9cf763659c092781f015dd1cce133b6d11653e1fc4825406f9a2b4e84b44
7
+ data.tar.gz: 5e91b843c9f632277ee54546d9c97dda40b6067ca49b6ee1cca1230c7a1b710eb0b0df9006b6903ec5a3f62d3888e5e367d88fe899da1f06945be6d57c8b509f
data/COPYING CHANGED
@@ -19,4 +19,4 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19
19
  DEALINGS IN THE SOFTWARE.
20
20
 
21
21
  Julian Raschke <julian@raschke.de> & contributors
22
- http://www.libgosu.org/
22
+ https://www.libgosu.org/
@@ -5,7 +5,7 @@
5
5
  //!
6
6
  //! These pages serve as a reference on the C++ interface of Gosu. For a higher-level
7
7
  //! discussion of concepts and ideas behind the library, see the Wiki entries linked
8
- //! from the official website, http://www.libgosu.org/.
8
+ //! from the official website, https://www.libgosu.org/.
9
9
 
10
10
  #ifndef GOSU_GOSU_HPP
11
11
  #define GOSU_GOSU_HPP
@@ -3,13 +3,13 @@
3
3
 
4
4
  #define GOSU_MAJOR_VERSION 0
5
5
  #define GOSU_MINOR_VERSION 10
6
- #define GOSU_POINT_VERSION 6
7
- #define GOSU_VERSION "0.10.6"
6
+ #define GOSU_POINT_VERSION 7
7
+ #define GOSU_VERSION "0.10.7"
8
8
 
9
9
  #define GOSU_COPYRIGHT_NOTICE \
10
10
  "This software uses the following third-party libraries:\n" \
11
11
  "\n" \
12
- "Gosu, http://www.libgosu.org, MIT License, http://opensource.org/licenses/MIT\n" \
12
+ "Gosu, https://www.libgosu.org, MIT License, http://opensource.org/licenses/MIT\n" \
13
13
  "SDL 2, http://www.libsdl.org, MIT License, http://opensource.org/licenses/MIT\n" \
14
14
  "libsndfile, http://www.mega-nerd.com/libsndfile, GNU LGPL 3, http://www.gnu.org/copyleft/lesser.html\n" \
15
15
  "OpenAL Soft, http://kcat.strangesoft.net/openal.html, GNU LGPL 2, http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html\n"
data/README.md CHANGED
@@ -14,3 +14,7 @@ Complaints, questions, feedback?
14
14
  - Visit the [boards](https://www.libgosu.org/)
15
15
  - Try your luck in the (mostly idle) [IRC channel](https://webchat.freenode.net/?channels=gosu)
16
16
  - Or [email me](mailto:julian@raschke.de) :)
17
+
18
+ [![Build Status](https://travis-ci.org/gosu/gosu.svg?branch=master)](https://travis-ci.org/gosu/gosu) Linux and OS X builds
19
+
20
+ [![Build status](https://ci.appveyor.com/api/projects/status/v0liohs47jono1eq?svg=true)](https://ci.appveyor.com/project/gosu-ci/gosu) Windows builds
@@ -11,9 +11,9 @@ end
11
11
  puts 'The Gosu gem requires some libraries to be installed system-wide.'
12
12
  puts 'See the following site for a list:'
13
13
  if `uname`.chomp == "Darwin" then
14
- puts 'https://github.com/jlnr/gosu/wiki/Getting-Started-on-OS-X'
14
+ puts 'https://github.com/gosu/gosu/wiki/Getting-Started-on-OS-X'
15
15
  else
16
- puts 'https://github.com/jlnr/gosu/wiki/Getting-Started-on-Linux'
16
+ puts 'https://github.com/gosu/gosu/wiki/Getting-Started-on-Linux'
17
17
  end
18
18
  puts
19
19
 
@@ -134,8 +134,8 @@ end
134
134
  # inside folders, it will not find the resulting .o files during linking.
135
135
  # So we create a shim .c/.cpp file for each file that we want to compile, ensuring
136
136
  # that all .o files are built into the current directory, without any nesting.
137
- # TODO - would be nicer if the Rakefile would just create these shim files and
138
- # ship them along with the gem
137
+ # TODO: Just move all of Gosu's source files back into a flat hierarchy again.
138
+ # The nested directory structure has really not been worth it.
139
139
  SOURCE_FILES.each do |file|
140
140
  shim_name = file.gsub('/', '-').sub(/\.mm$/, '.cpp')
141
141
  File.open(shim_name, "w") do |shim|
@@ -143,11 +143,11 @@ SOURCE_FILES.each do |file|
143
143
  end
144
144
  end
145
145
 
146
- if RUBY_VERSION >= '2.0.0' then
147
- # In some versions of Ruby 2.x, the $CXXFLAGS variable is ignored, and $CLAGS
148
- # are not being inherited into it either. In these versions of Ruby we can
149
- # modify CONFIG instead, and our changes will end up in the Makefile.
146
+ if RUBY_VERSION >= '1.9.3' and RUBY_VERSION < '2.2.0' then
147
+ # In some versions of Ruby and mkmf, the $CXXFLAGS variable is badly broken.
148
+ # We can modify CONFIG instead, and our changes will end up in the Makefile.
150
149
  # See http://bugs.ruby-lang.org/issues/8315
150
+ # The lower bound was reduced to 1.9.3 here: https://github.com/gosu/gosu/issues/321
151
151
  CONFIG['CXXFLAGS'] = "#$CFLAGS #$CXXFLAGS"
152
152
  end
153
153
 
@@ -3098,14 +3098,14 @@ bool SwigDirector_Window::tick() {
3098
3098
  void SwigDirector_Window::update() {
3099
3099
  VALUE result;
3100
3100
 
3101
- result = rb_funcall(swig_get_self(), rb_intern("protected_update"), 0, NULL);
3101
+ result = rb_funcall(swig_get_self(), rb_intern("update"), 0, NULL);
3102
3102
  }
3103
3103
 
3104
3104
 
3105
3105
  void SwigDirector_Window::draw() {
3106
3106
  VALUE result;
3107
3107
 
3108
- result = rb_funcall(swig_get_self(), rb_intern("protected_draw_2"), 0, NULL);
3108
+ result = rb_funcall(swig_get_self(), rb_intern("draw"), 0, NULL);
3109
3109
  }
3110
3110
 
3111
3111
 
@@ -3113,7 +3113,7 @@ bool SwigDirector_Window::needsRedraw() const {
3113
3113
  bool c_result ;
3114
3114
  VALUE result;
3115
3115
 
3116
- result = rb_funcall(swig_get_self(), rb_intern("protected_needs_redraw?"), 0, NULL);
3116
+ result = rb_funcall(swig_get_self(), rb_intern("needs_redraw?"), 0, NULL);
3117
3117
  bool swig_val;
3118
3118
  int swig_res = SWIG_AsVal_bool(result, &swig_val);
3119
3119
  if (!SWIG_IsOK(swig_res)) {
@@ -3128,7 +3128,7 @@ bool SwigDirector_Window::needsCursor() const {
3128
3128
  bool c_result ;
3129
3129
  VALUE result;
3130
3130
 
3131
- result = rb_funcall(swig_get_self(), rb_intern("protected_needs_cursor?"), 0, NULL);
3131
+ result = rb_funcall(swig_get_self(), rb_intern("needs_cursor?"), 0, NULL);
3132
3132
  bool swig_val;
3133
3133
  int swig_res = SWIG_AsVal_bool(result, &swig_val);
3134
3134
  if (!SWIG_IsOK(swig_res)) {
@@ -3142,7 +3142,7 @@ bool SwigDirector_Window::needsCursor() const {
3142
3142
  void SwigDirector_Window::loseFocus() {
3143
3143
  VALUE result;
3144
3144
 
3145
- result = rb_funcall(swig_get_self(), rb_intern("protected_lose_focus"), 0, NULL);
3145
+ result = rb_funcall(swig_get_self(), rb_intern("lose_focus"), 0, NULL);
3146
3146
  }
3147
3147
 
3148
3148
 
@@ -3163,7 +3163,7 @@ void SwigDirector_Window::buttonDown(Gosu::Button arg0) {
3163
3163
  else
3164
3164
  obj0 = LONG2NUM((&arg0)->id());
3165
3165
  }
3166
- result = rb_funcall(swig_get_self(), rb_intern("protected_button_down"), 1,obj0);
3166
+ result = rb_funcall(swig_get_self(), rb_intern("button_down"), 1,obj0);
3167
3167
  }
3168
3168
 
3169
3169
 
@@ -3177,7 +3177,7 @@ void SwigDirector_Window::buttonUp(Gosu::Button arg0) {
3177
3177
  else
3178
3178
  obj0 = LONG2NUM((&arg0)->id());
3179
3179
  }
3180
- result = rb_funcall(swig_get_self(), rb_intern("protected_button_up"), 1,obj0);
3180
+ result = rb_funcall(swig_get_self(), rb_intern("button_up"), 1,obj0);
3181
3181
  }
3182
3182
 
3183
3183
 
@@ -11342,6 +11342,11 @@ SWIGEXPORT void Init_gosu(void) {
11342
11342
  rb_define_const(mGosu, "Gp3Button13", SWIG_From_int(static_cast< int >(Gosu::gp3Button13)));
11343
11343
  rb_define_const(mGosu, "Gp3Button14", SWIG_From_int(static_cast< int >(Gosu::gp3Button14)));
11344
11344
  rb_define_const(mGosu, "Gp3Button15", SWIG_From_int(static_cast< int >(Gosu::gp3Button15)));
11345
+
11346
+ // Call srand() so that Gosu::random() is actually random in Ruby scripts
11347
+ std::srand(static_cast<unsigned int>(std::time(0)));
11348
+ std::rand(); // and flush the first value
11349
+
11345
11350
  rb_define_module_function(mGosu, "disown_TextInput", VALUEFUNC(_wrap_disown_TextInput), -1);
11346
11351
 
11347
11352
  SwigClassTextInput.klass = rb_define_class_under(mGosu, "TextInput", rb_cObject);
@@ -2,72 +2,27 @@
2
2
  #define GOSU_APPLEUTILITY_HPP
3
3
 
4
4
  #include <Gosu/Platform.hpp>
5
+ #include <CoreFoundation/CoreFoundation.h>
5
6
 
6
7
  #ifdef __OBJC__
7
8
 
8
- #include <iostream>
9
- #include <ostream>
10
- #include <sstream>
11
9
  #include <string>
12
10
  #include <stdexcept>
13
- #include <objc/objc.h>
14
- #import <CoreFoundation/CoreFoundation.h>
15
11
  #import <Foundation/Foundation.h>
16
12
 
17
- namespace Gosu
13
+ inline static void throwOSError(OSStatus status, unsigned line)
18
14
  {
19
- inline void throwOSError(OSStatus status, unsigned line)
20
- {
21
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
15
+ @autoreleasepool {
22
16
  NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil];
23
- std::ostringstream str;
24
- str << "Error on line " << line << " (Code " << status << "): "
25
- << [[error localizedDescription] UTF8String]
26
- << " (" << [[error description] UTF8String] << ")";
27
- [pool release];
28
- throw std::runtime_error(str.str());
17
+ throw std::runtime_error("Error on line " + std::to_string(line) +
18
+ " (Code " + std::to_string(status) + "): " +
19
+ error.localizedDescription.UTF8String +
20
+ " (" + error.description.UTF8String + ")");
29
21
  }
30
-
31
- #define CHECK_OS(status) if (!(status)) {} else Gosu::throwOSError(status, __LINE__)
32
-
33
- template<typename T>
34
- class ObjCRef
35
- {
36
- ObjCRef(const ObjCRef&);
37
- ObjCRef& operator=(const ObjCRef&);
38
-
39
- T* ptr;
40
-
41
- public:
42
- ObjCRef(T* ptr = nil)
43
- : ptr(ptr)
44
- {
45
- }
46
-
47
- ~ObjCRef()
48
- {
49
- [ptr release];
50
- }
51
-
52
- void reset(T* newPtr = nil)
53
- {
54
- [ptr release];
55
- ptr = newPtr;
56
- }
57
-
58
- T* get() const
59
- {
60
- return ptr;
61
- }
62
-
63
- T* obj() const
64
- {
65
- if (!ptr)
66
- throw std::logic_error("Objective-C reference is nil");
67
- return ptr;
68
- }
69
- };
70
22
  }
23
+
24
+ #define CHECK_OS(status) do { if (status) throwOSError(status, __LINE__); } while (0)
25
+
71
26
  #endif
72
27
 
73
28
  namespace Gosu
@@ -75,23 +30,24 @@ namespace Gosu
75
30
  template<typename CFRefType = CFTypeRef>
76
31
  class CFRef
77
32
  {
78
- CFRef(const CFRef&);
79
- CFRef& operator=(const CFRef&);
80
-
81
33
  CFRefType ref;
82
34
 
83
35
  public:
84
36
  CFRef(CFRefType ref)
85
- : ref(ref)
37
+ : ref(ref)
86
38
  {
87
39
  }
88
40
 
89
41
  ~CFRef()
90
42
  {
91
- if (ref)
43
+ if (ref) {
92
44
  CFRelease(ref);
45
+ }
93
46
  }
94
-
47
+
48
+ CFRef(const CFRef&) = delete;
49
+ CFRef& operator=(const CFRef&) = delete;
50
+
95
51
  CFRefType get() const
96
52
  {
97
53
  return ref;
@@ -99,8 +55,9 @@ namespace Gosu
99
55
 
100
56
  CFRefType obj() const
101
57
  {
102
- if (!ref)
58
+ if (!ref) {
103
59
  throw std::logic_error("CoreFoundation reference is NULL");
60
+ }
104
61
  return ref;
105
62
  }
106
63
  };
@@ -58,15 +58,18 @@ namespace
58
58
  // TODO: What is this NSAutoreleasePool good for?
59
59
  #ifdef GOSU_IS_MAC
60
60
  #include "../AppleUtility.hpp"
61
- #define CONSTRUCTOR_COMMON \
62
- ObjCRef<NSAutoreleasePool> pool([NSAutoreleasePool new]); \
61
+ #define CONSTRUCTOR_BEGIN \
62
+ @autoreleasepool { \
63
63
  if (!alChannelManagement.get()) \
64
64
  alChannelManagement.reset(new ALChannelManagement)
65
+ #define CONSTRUCTOR_END \
66
+ }
65
67
  #else
66
- #define CONSTRUCTOR_COMMON \
68
+ #define CONSTRUCTOR_BEGIN \
67
69
  if (!alChannelManagement.get()) \
68
70
  alChannelManagement.reset(new ALChannelManagement)
69
- #endif
71
+ #define CONSTRUCTOR_END
72
+ #endif
70
73
 
71
74
  Gosu::SampleInstance::SampleInstance(int handle, int extra)
72
75
  : handle(handle), extra(extra)
@@ -175,7 +178,7 @@ private:
175
178
 
176
179
  Gosu::Sample::Sample(const std::wstring& filename)
177
180
  {
178
- CONSTRUCTOR_COMMON;
181
+ CONSTRUCTOR_BEGIN;
179
182
 
180
183
  if (isOggFile(filename))
181
184
  {
@@ -189,11 +192,13 @@ Gosu::Sample::Sample(const std::wstring& filename)
189
192
  WAVE_FILE audioFile(filename);
190
193
  data.reset(new SampleData(audioFile));
191
194
  }
195
+
196
+ CONSTRUCTOR_END
192
197
  }
193
198
 
194
199
  Gosu::Sample::Sample(Reader reader)
195
200
  {
196
- CONSTRUCTOR_COMMON;
201
+ CONSTRUCTOR_BEGIN;
197
202
 
198
203
  if (isOggFile(reader))
199
204
  {
@@ -205,6 +210,8 @@ Gosu::Sample::Sample(Reader reader)
205
210
  WAVE_FILE audioFile(reader);
206
211
  data.reset(new SampleData(audioFile));
207
212
  }
213
+
214
+ CONSTRUCTOR_END
208
215
  }
209
216
 
210
217
  Gosu::SampleInstance Gosu::Sample::play(double volume, double speed,
@@ -219,7 +226,7 @@ Gosu::SampleInstance Gosu::Sample::playPan(double pan, double volume,
219
226
  std::pair<int, int> channelAndToken = alChannelManagement->reserveChannel();
220
227
  if (channelAndToken.first == ALChannelManagement::NO_FREE_CHANNEL)
221
228
  return Gosu::SampleInstance(channelAndToken.first, channelAndToken.second);
222
-
229
+
223
230
  ALuint source = alChannelManagement->sourceIfStillPlaying(channelAndToken.first,
224
231
  channelAndToken.second);
225
232
  assert(source != ALChannelManagement::NO_SOURCE);
@@ -272,49 +279,49 @@ public:
272
279
  // AVAudioPlayer impl
273
280
  class Gosu::Song::ModuleData : public BaseData
274
281
  {
275
- ObjCRef<AVAudioPlayer> player;
282
+ AVAudioPlayer *player;
276
283
 
277
284
  void applyVolume()
278
285
  {
279
- player.obj().volume = volume();
286
+ player.volume = volume();
280
287
  }
281
288
 
282
289
  public:
283
290
  ModuleData(const std::wstring& filename)
284
291
  {
285
292
  std::string utf8Filename = Gosu::wstringToUTF8(filename);
286
- ObjCRef<NSString> nsFilename([[NSString alloc] initWithUTF8String:utf8Filename.c_str()]);
287
- ObjCRef<NSURL> url([[NSURL alloc] initFileURLWithPath:nsFilename.obj()]);
288
- player.reset([[AVAudioPlayer alloc] initWithContentsOfURL:url.obj() error:NULL]);
293
+ NSURL *URL = [NSURL fileURLWithPath:[NSString stringWithUTF8String:utf8Filename.c_str()]];
294
+ player = [[AVAudioPlayer alloc] initWithContentsOfURL:URL error:NULL];
289
295
  }
290
296
 
291
297
  void play(bool looping)
292
298
  {
293
- if (paused())
299
+ if (paused()) {
294
300
  stop();
295
- player.obj().numberOfLoops = looping ? -1 : 0;
296
- [player.obj() play];
301
+ }
302
+ player.numberOfLoops = looping ? -1 : 0;
303
+ [player play];
297
304
  }
298
305
 
299
306
  void pause()
300
307
  {
301
- [player.obj() pause];
308
+ [player pause];
302
309
  }
303
310
 
304
311
  void resume()
305
312
  {
306
- [player.obj() play];
313
+ [player play];
307
314
  }
308
315
 
309
316
  bool paused() const
310
317
  {
311
- return !player.obj().playing;
318
+ return !player.playing;
312
319
  };
313
320
 
314
321
  void stop()
315
322
  {
316
- [player.obj() stop];
317
- player.obj().currentTime = 0;
323
+ [player stop];
324
+ player.currentTime = 0;
318
325
  }
319
326
 
320
327
  void update()
@@ -507,16 +514,17 @@ Gosu::Song::Song(const std::wstring& filename)
507
514
  else
508
515
  #endif
509
516
  {
510
- CONSTRUCTOR_COMMON;
517
+ CONSTRUCTOR_BEGIN;
511
518
  data.reset(new StreamData(filename));
519
+ CONSTRUCTOR_END
512
520
  }
513
521
  }
514
522
 
515
523
  Gosu::Song::Song(Reader reader)
516
524
  {
517
- CONSTRUCTOR_COMMON;
518
-
525
+ CONSTRUCTOR_BEGIN;
519
526
  data.reset(new StreamData(reader));
527
+ CONSTRUCTOR_END
520
528
  }
521
529
 
522
530
  Gosu::Song::~Song()
@@ -29,7 +29,7 @@ namespace Gosu
29
29
  ALuint sampleRate_;
30
30
  UInt32 bytesPerFrame_;
31
31
  bool bigEndian_;
32
-
32
+
33
33
  static OSStatus AudioFile_ReadProc(void* inClientData, SInt64 inPosition,
34
34
  UInt32 requestCount, void* buffer, UInt32* actualCount)
35
35
  {
@@ -81,9 +81,7 @@ namespace Gosu
81
81
 
82
82
  initSeekOffset();
83
83
 
84
- format_ = clientData.mChannelsPerFrame == 1 ?
85
- AL_FORMAT_MONO16 :
86
- AL_FORMAT_STEREO16;
84
+ format_ = clientData.mChannelsPerFrame == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16;
87
85
  }
88
86
 
89
87
  void init()
@@ -124,26 +122,28 @@ namespace Gosu
124
122
  }
125
123
 
126
124
  if (format_ == 0 ||
127
- // If format not native for OpenAL, set client data format
128
- // to enable conversion
129
- desc.mFormatFlags & kAudioFormatFlagIsBigEndian ||
130
- desc.mFormatFlags & kAudioFormatFlagIsFloat ||
131
- !(desc.mFormatFlags & kAudioFormatFlagIsSignedInteger))
132
- initClientFormatBasedOn(desc);
133
- else
125
+ // If format not native for OpenAL, set client data format
126
+ // to enable conversion
127
+ desc.mFormatFlags & kAudioFormatFlagIsBigEndian ||
128
+ desc.mFormatFlags & kAudioFormatFlagIsFloat ||
129
+ !(desc.mFormatFlags & kAudioFormatFlagIsSignedInteger)) {
130
+ initClientFormatBasedOn(desc);
131
+ }
132
+ else {
134
133
  // Just set the old format as the client format so
135
134
  // ExtAudioFileSeek will work for us.
136
135
  CHECK_OS(ExtAudioFileSetProperty(file_,
137
136
  kExtAudioFileProperty_ClientDataFormat,
138
137
  sizeof desc, &desc));
138
+ }
139
139
  }
140
140
 
141
141
  public:
142
142
  AudioToolboxFile(const std::wstring& filename)
143
143
  {
144
- ObjCRef<NSString> utf8Filename([[NSString alloc] initWithUTF8String:wstringToUTF8(filename).c_str()]);
145
- ObjCRef<NSURL> url([[NSURL alloc] initFileURLWithPath:utf8Filename.get()]);
146
- CHECK_OS(ExtAudioFileOpenURL((CFURLRef)url.get(), &file_));
144
+ NSString *utf8Filename = [NSString stringWithUTF8String:wstringToUTF8(filename).c_str()];
145
+ NSURL *URL = [NSURL fileURLWithPath:utf8Filename];
146
+ CHECK_OS(ExtAudioFileOpenURL((__bridge CFURLRef)URL, &file_));
147
147
 
148
148
  fileID_ = 0;
149
149
 
@@ -155,14 +155,14 @@ namespace Gosu
155
155
  buffer_.resize(reader.resource().size() - reader.position());
156
156
  reader.read(buffer_.data(), buffer_.size());
157
157
 
158
- // TODO: For some reason, this fails on the iPhone with at least MP3 files.
159
- // If this turns into a serious problem, the plain AudioFile API could be
160
- // used which works for non-compressed formats at least.
158
+ // TODO: This fails on iOS with MP3 files.
159
+ // TODO: ^ Is the comment above still true on non-ancient iOS versions?
161
160
 
162
161
  void* clientData = &buffer_;
163
162
  CHECK_OS(AudioFileOpenWithCallbacks(clientData, AudioFile_ReadProc, 0,
164
163
  AudioFile_GetSizeProc, 0, 0, &fileID_));
165
164
  CHECK_OS(ExtAudioFileWrapAudioFileID(fileID_, false, &file_));
165
+
166
166
  init();
167
167
  }
168
168
 
@@ -170,8 +170,9 @@ namespace Gosu
170
170
  {
171
171
  ExtAudioFileDispose(file_);
172
172
 
173
- if (fileID_)
173
+ if (fileID_) {
174
174
  AudioFileClose(fileID_);
175
+ }
175
176
  }
176
177
 
177
178
  ALenum format() const