Zu 1 und 4 kann ich dir im Moment auf Anhieb leider nichts sagen,
aber zu deinem 3.Problem mit der Lautstärkeregulierung hätte ich eine Idee.

Und zwar kannst die Lautstärke mit einer Variable regulieren, welche du mit Hilfe von Ruby einstellst.

Dazu legst du entsprechend für BGM, BGS, ME(=Musikeffekte) und SE(=Soundeffekte) je eine Instanzvariable in der Klasse Game_System an, welche du z.B. vol_bgm, vol_bgs usw. nennen könntest (vol=volume=Laustärke).
In dieser Klasse befinden sich auch die entsprechenden Methoden, welche zum Abspielen der Musik und Sounds zu ständig sind. Sie enden mit _play(für Abspielen) und beginnen mit den Audiotypen(z.B. bgm_play).
Ich weiß nicht genau, wie du die Lautstärke verwalten willst, aber eine Idee -von der ich hier mal ausgehe, lässt sich leicht abändern - ist die, dass du in deinen Variablen Werte von 0 bis 100 speicherst, welche die relative Lautstärke in Prozent darstellen. Die Methoden, die ich vorhin erwähnt habe, bekommen als Parameter bgm.volume (bzw. bgs/me/se.volume), welche die mit den Reglern im rpg-maker xp eingestellte Lautstärke darstellt.
Wird z.B. in deiner Variable vol_bgm 40% eingestellt, so soll die Musik nur mit 40% der voreingestellten Lautstärke abgespielt werden. Also ziehst du von diesem Parameter die Differenz von 60% ab. Algemein also: bgm.volume-(100-vol_bgm).
Desweiteren muss die Variable zu Beginn des Spiels unter initialize mit 100 initialisiert werden.
Ich habe mal einen Codeauschnitt der Klasse hier angehängt, in welchem die Änderungen fett dargestellt sind. Wie bei bgm_play muss auch bei bgs_play, me_play und se_play verfahren werden.
Code:
class Game_System
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :map_interpreter          # map event interpreter
  attr_reader   :battle_interpreter       # battle event interpreter
  attr_accessor :timer                    # timer
  attr_accessor :timer_working            # timer working flag
  attr_accessor :save_disabled            # save forbidden
  attr_accessor :menu_disabled            # menu forbidden
  attr_accessor :encounter_disabled       # encounter forbidden
  attr_accessor :message_position         # text option: positioning
  attr_accessor :message_frame            # text option: window frame
  attr_accessor :save_count               # save count
  attr_accessor :magic_number             # magic number
  
  attr_accessor :vol_bgm      # Lautstärke für BGM
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @map_interpreter = Interpreter.new(0, true)
    @battle_interpreter = Interpreter.new(0, false)
    @timer = 0
    @timer_working = false
    @save_disabled = false
    @menu_disabled = false
    @encounter_disabled = false
    @message_position = 2
    @message_frame = 0
    @save_count = 0
    @magic_number = 0
    
    @vol_bgm = 100  # Standard-Lautstärke für BGM ist 100%
  end
  #--------------------------------------------------------------------------
  # * Play Background Music
  #     bgm : background music to be played
  #--------------------------------------------------------------------------
  def bgm_play(bgm)
    @playing_bgm = bgm
    if bgm != nil and bgm.name != ""
      Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume-(100-vol_bgm), bgm.pitch)
    else
      Audio.bgm_stop
    end
    Graphics.frame_reset
  end
#Rest der Klasse Game_System
end
Wenn du nun über ein (Common-)Event darauf zugreifen willst, so wählst du den Script-Befehl (3.Seite) aus und gibst folgendes ein:
Code:
$game_system.vol_bgm = wert
wert ersetzt du durch einen Wert deiner Wahl. Möchtest du die Variable erhöhen oder erniedrigen, so ersetzt du das "=" durch ein "+="(erhöhen) oder durch ein "-="(erniedrigen). Analog geht das für BGS,ME und SE.
So könntest du auch in deinem Soundmenü die Lautstärke regulieren.

Mit der Sprachausgabe ist etwas kniffliger. Ich vermute mal, du möchtest diese als Soundeffekt (SE) abspielen, aber über einen Extra-Lautstärkeregler einstellen, oder? Mir fällt da im Moment auf Anhieb nur die Idee ein, auch hierfür eine Variable z.B. mit Namen sprachausgabe zu machen, allerdings unter Game_Temp (analog zu bgm&Co) und diese unter initialisize von Game_Temp auf false zu setzen. Sobald du dann in einem Event einen Soundeffekt mit Sprachausgabe abspielen möchtest, markierst du ihn im Script-Befehl mit $game_temp.sprachausgabe = true als Sprachausgabe. Nach dem Abspielen machst du das gleiche per Script-Befehl, nur dass du anstelle von true die Variable auf false setzt.
Unter Game_System ersetzt du die Methode se_play(se) durch
Code:
def se_play(se)
    if se != nil and se.name != ""
      if $game_temp.sprachausgabe == true
        Audio.se_play("Audio/SE/" + se.name, se.volume-(100-vol_sprache), se.pitch)
      else
        Audio.se_play("Audio/SE/" + se.name, se.volume-(100-vol_se), se.pitch)
    end
  end
Die Variable vol_sprache legst du analog zu bgm_vol unter Game_System an. Wie du siehst ist hierbei auch vol_se (ebenfalls vorher wie bgm_vol anzulegen) mit drinne.
Wenn die Sprachausgabe nun aktiviert(=true) ist, so wird auf die Lautstärke für die Sprachausgabe zugegriffen, ansonsten(=false= wird auf die Laustärke für die restlichen SE zugegriffen.
Ob das mit der Sprachausgabe klappt, habe ich jetzt nicht getestet. Aber das andere müsste gehen.

Ich hoffe, ich konnte dir hiermit helfen. Ist jetzt ein wenig lang geworden, aber eigentlich sind das wenige Änderungen.