module Gemwarrior::Audio

Constants

ERROR_BLOOPS_NOT_FOUND
ERROR_FEEP_NOT_FOUND
ERROR_SOUND_NOT_ENABLED

CONSTANTS

ERROR_SOUND_SYSTEM_NOT_CHOSEN
ERROR_WIN32_NOT_FOUND

Public Class Methods

get_cues() click to toggle source
# File lib/gemwarrior/misc/audio.rb, line 41
def self.get_cues
  if GameOptions.data['sound_enabled']
    case GameOptions.data['sound_system']
    when 'win32-sound', 'feep'
      require_relative 'audio_cues'
      AudioCues.cues
    when 'bloops'
      require_relative 'bloops_cues'
      BloopsCues.cues
    end
  end
end
init() click to toggle source
# File lib/gemwarrior/misc/audio.rb, line 17
def self.init
  if GameOptions.data['sound_system'].eql?('win32-sound')
    begin
      require 'win32/sound'
    rescue
      GameOptions.data['errors'] = "#{GameOptions.data['sound_system']} could not be loaded. You may need to run 'gem install #{GameOptions.data['sound_system']}'. Silence for now."
    end
  elsif GameOptions.data['sound_system'].eql?('feep')
    begin
      require 'feep'
    rescue
      GameOptions.data['errors'] = "#{GameOptions.data['sound_system']} could not be loaded. You may need to run 'gem install #{GameOptions.data['sound_system']}'. Silence for now."
    end
  elsif GameOptions.data['sound_system'].eql?('bloops')
    begin
      require 'bloops'
    rescue
      GameOptions.data['errors'] = "#{GameOptions.data['sound_system']} could not be loaded. You may need to run 'gem install #{GameOptions.data['sound_system']}aphone'. Silence for now."
    end
  else
    GameOptions.data['errors'] = "'#{GameOptions.data['sound_system']}' is not a valid sound system. Audio subsystem load failed."
  end
end
play_sample(audio_cue_symbol) click to toggle source
# File lib/gemwarrior/misc/audio.rb, line 148
def self.play_sample(audio_cue_symbol)
  # future use
end
play_synth(audio_cue_symbol) click to toggle source
# File lib/gemwarrior/misc/audio.rb, line 54
def self.play_synth(audio_cue_symbol)
  if GameOptions.data['sound_enabled']
    if GameOptions.data['sound_system']
      case GameOptions.data['sound_system']
      when 'win32-sound'
        if system('gem list -ie win32-sound')
          require_relative 'audio_cues'
          require_relative 'musical_notes'

          if AudioCues.cues[audio_cue_symbol]
            Thread.start do
              AudioCues.cues[audio_cue_symbol][:synth].each do |seq|
                threads = []
                seq[:frequencies].split(',').each do |note|
                  threads << Thread.new do
                    Win32::Sound::play_freq(Notes::NOTE_FREQ[note], seq[:duration], GameOptions.data['sound_volume'])
                  end
                end
                threads.each { |th| th.join }
              end
            end
          end
        else
          GameOptions.data['errors'] = ERROR_WIN32_NOT_FOUND
        end
      when 'feep'
        if system('gem list -ie feep')
          require_relative 'audio_cues'

          feep_defaults = {
            frequencies:  '440',
            waveform:     'sine',
            volume:       GameOptions.data['sound_volume'],
            duration:     500,
            notext:       true
          }

          if AudioCues.cues[audio_cue_symbol]
            Thread.start do
              AudioCues.cues[audio_cue_symbol][:synth].each do |seq|
                seq = feep_defaults.merge(seq)

                Feep::Base.new({
                  freq_or_note: seq[:frequencies],
                  waveform:     seq[:waveform],
                  volume:       seq[:volume],
                  duration:     seq[:duration],
                  notext:       seq[:notext]
                })
              end
            end
          end
        else
          GameOptions.data['errors'] = ERROR_FEEP_NOT_FOUND
        end
      when 'bloops'
        if system('gem list -ie bloops')
          require_relative 'bloops_cues'

          if BloopsCues.cues[audio_cue_symbol]
            Thread.start do
              BloopsCues.cues[audio_cue_symbol][:synth].each do |seq|
                threads = []

                seq.each do |note|
                  threads << Thread.new do
                    b = Bloops.new
                    b.tempo = 240
                    snd = b.sound Bloops::SQUARE
                    snd.punch = GameOptions.data['sound_volume']/2
                    snd.sustain = 0.7
                    snd.decay = 0.2
                    b.tune snd, note[1]
                    b.play
                    sleep 0.1 while !b.stopped?
                  end
                end

                threads.each { |th| th.join }
              end
            end
          end
        else
          GameOptions.data['errors'] = ERROR_BLOOPS_NOT_FOUND
        end
      end
    else
      GameOptions.data['errors'] = ERROR_SOUND_SYSTEM_NOT_CHOSEN
    end
  else
    GameOptions.data['errors'] = ERROR_SOUND_NOT_ENABLED
  end
end