    # File lib/rubygame/audio.rb, line 63
      def self.open_audio( options={} )
        return false if audio_open?

        unless options.kind_of? Hash
          raise TypeError, "invalid options Hash: #{options.inspect}"
        end

        buff = (options[:buffer] or 1024)
        chan = (options[:channels] or 2)
        freq = (options[:frequency] or SDL::Mixer::DEFAULT_FREQUENCY)

        # In general, format should always be the default.
        frmt = SDL::Mixer::DEFAULT_FORMAT

        buff = if( buff <= 0 )
                 raise ArgumentError, "buffer size must be positive (got #{buff})"
               elsif( buff & (buff - 1) != 0 )
                 raise( ArgumentError, "buffer size must be a power of 2 "+
                        "(e.g. 512, 1024) (got #{buff})" )
               else
                 buff.to_i
               end

        chan = if( chan != 1 && chan != 2 )
                 raise( ArgumentError,
                        "channels must be 1 (mono) or 2 (stereo) (got #{chan})" )
               else
                 chan.to_i
               end

        freq = if( freq <= 0 )
                 raise ArgumentError, "frequency must be positive (got #{freq})"
               else
                 freq.to_i
               end

        result = SDL::Mixer.OpenAudio(freq, frmt, chan, buff)

        if( result < 0 )
          raise Rubygame::SDLError, "Could not open audio: #{SDL.GetError()}"
        end

        return true
      end