module Gemwarrior::Audio

Constants

ERROR_SOUND_NOT_ENABLED

CONSTANTS

Public Class Methods

get_cues() click to toggle source
# File lib/gemwarrior/misc/audio.rb, line 37
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 13
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 128
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 50
def self.play_synth(audio_cue_symbol)
  if GameOptions.data['sound_enabled']
    case GameOptions.data['sound_system']
    when '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
    when '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
    when '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
    end
  else
    GameOptions.data['errors'] = ERROR_SOUND_NOT_ENABLED
  end
end