SciAudio is for mp3 and wav playback, but does not support the midi format. You are in luck though because the sci engine itself does. If you have midi's that you are attempting to use, then you will first need to use soundbox to convert them into sound resources. You can find it on the tools page
here.
Using it is relatively easy, First open soundbox. Select "file" and then "import midi". select the midi file and open it.

Now select "edit" and then "channel properties". This will allow you to select which sound cards play which specific tracks. For the most part New GM is your go to card and you will want every channel flagged to use it. Select the track number on the left side 0-15 then click the check boxes next to the sound card names.

You are all done, click "file" and "save as". It will attempt to save it as sound.000 which is fine for now, or you can change the 000 to whatever resource number you would like to, but leave the SOUND. part of the name alone. You now have a sound resource you can use in your game. In SciCompanion, click on the Sounds tab and then just drag that new SOUND.000 file into the game

Hit the rebuild button and now you are all ready to actually play the sound... almost.
I don't remember if the last time I packaged up the templates if I included the file MPUMIDI.DRV this is kind of an important one. This is the driver that can be utilized to make use of the New GM selections that were in soundbox. Look in your games directory and see if this file is there. If it isn't, it will need to be. And while you are at it, you may want to add it to your template game file so that it will always be there when you start working on a new game. Also, take a peak at your resource.cfg file and make sure that soundDrv = MPUMIDI.DRV
I have gone ahead and attached both the driver file and the config file here so if you want you can just copy these directly into your game folder.
Ok, so now where are we, we have a sound resource, and we have the driver, and the config file is in order... all that is left to do is actually add the call in the script so that it plays in game. You say this is a falling sound, so looking at the last bit of changeState that you posted, I'll just add it in there...
...
(case 2
Print("You dig until the ground crumbles beneath you and you fall into an underground cavern.")
= cycles 1
)
(case 3
(send gEgo:hide())
(send gTheSoundFX:prevSignal(0)stop()number(000)loop(1)play())
= seconds 2
)
(case 4
PlayerControl()
(send gRoom:newRoom(4))
= cycles 1
)
)// end switch
)// end method
)// end instance
Hopefully this helps.