• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Forum moderator applications are now open! Click here for details.
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

RGSS FmodEx extension

yonicstudios

Game Developer
54
Posts
8
Years
Ouch, I need to update fmodex.dll as well. The link you provided for version 4.68.97 is down, can you upload it again?
 

yonicstudios

Game Developer
54
Posts
8
Years
The new BGM doesn't play, and bgm remains undefined, so I'm guessing that it's failing to produce any playback?
 

yonicstudios

Game Developer
54
Posts
8
Years
I've placed this code on an event.

Code:
Script: FmodEx.set_unit(FmodEx::TIMEUNIT_PCM)
           : FmodEx.bgm_sound.pause(true)
           : position = FmodEx.bgm_sound.get_position
Conditional branch: bgm = FmodEx.bgm_play("Audio/BGM/celadon_show.ogg",100,100)
    bgm.set_position(position)
End
 

MysteriousUser94

Guest
0
Posts
Why a conditional branch ?
Btw RMXP has a misconception with Conditional branch, they only work if the return value is true (which is not how ruby works).

You should put the whole code in only one Script command.
 

yonicstudios

Game Developer
54
Posts
8
Years
I used a conditional branch because of how RMXP handles word wrapping on script commands. Either way, I managed to put the code in a single script command, but the effect remains the same.

Code:
FmodEx.set_unit(FmodEx::TIMEUNIT_PCM)
FmodEx.bgm_sound.pause(true)
position = FmodEx.bgm_sound.get_position
file = "Audio/BGM/celadon_show.ogg"
bgm = FmodEx.bgm_play(file,100,100)
 
Last edited:

MysteriousUser94

Guest
0
Posts
There's no bgm.set_position(position) in your script command
 

yonicstudios

Game Developer
54
Posts
8
Years
When the new bgm is supposed to be playing, the music is silent, but upon commanding the game to play the old bgm, the old one plays normally.
 
Last edited:

MysteriousUser94

Guest
0
Posts
Hum... Does the file in question plays with a normal command like BGM change ? (or as a Map BGM)
 

yonicstudios

Game Developer
54
Posts
8
Years
It does play as a Map BGM. Making it to play like the new BGM seems to work as intended. The change is instant, although probably with a PCM sample or two of silence, so a pop efect appears. I can work with this, though, since it's most likely me having a fairly powerful CPU. Merci beaucoup!

EDIT: It seems like FmodEx.set_unit(FmodEx::TIMEUNIT_PCM) is not necessary.
 
Last edited:

MysteriousUser94

Guest
0
Posts
De rien :p

Yes, this line was just in case the current unit was MS and not PCM ^^ (I don't know what happen before the command ^^)
 

yonicstudios

Game Developer
54
Posts
8
Years
I noticed a strange bug: Sometimes switching between BGMs causes the music to be played in a position earlier than intended.
If the music happens to be close to the end, it will try to play the music in an invalid position and crashes. I've only been able to get this error once, but if I manage to reproduce it, I'll include the value of the position to check if it's valid or not. That way it may be possible to have a rescue value in case this occurs again.

Here's the error in question:


Code:
Message: Script error within map 80 (Underground Show):
Exception: FmodEx::Error
Message: Section198:7:in `set_position'FMOD error! (38) An invalid seek position was passed to this function. 

***Full script:
file="Audio/BGM/celadon_show.ogg"
bgmPlayPlus(file,90)

Interpreter:243:in `pbExecuteScript'
Audio utils:7:in `bgmPlayPlus'
(eval):2:in `pbExecuteScript'
Interpreter:1606:in `eval'
Interpreter:243:in `pbExecuteScript'
Interpreter:1606:in `command_355'
Interpreter:494:in `execute_command'
Interpreter:193:in `update'
Interpreter:106:in `loop'
Interpreter:198:in `update'

Interpreter:281:in `pbExecuteScript'
Interpreter:1606:in `command_355'
Interpreter:494:in `execute_command'
Interpreter:193:in `update'
Interpreter:106:in `loop'
Interpreter:198:in `update'
Scene_Map:103:in `update'
Scene_Map:101:in `loop'
Scene_Map:114:in `update'
Scene_Map:68:in `main'
And the method bgmPlayPlus:

Code:
def bgmPlayPlus(file,volume=100,pitch=100)
  if FmodEx.bgm_sound!=nil
    FmodEx.set_unit(FmodEx::TIMEUNIT_PCM)
    FmodEx.bgm_sound.pause(true)
    position = FmodEx.bgm_sound.get_position
    bgm = FmodEx.bgm_play(file,volume,pitch)
    bgm.set_position(position)
  else
    bgm = FmodEx.bgm_play(file,volume,pitch)
  end
end
 
Last edited:

MysteriousUser94

Guest
0
Posts
I heard the offset on the position yesterday but today I didn't :/ I think that Fmod gives the position a little earlier because it thinks the process is too slow I don't know.

For the "end of music" issue I suggest this :
Code:
def bgmPlayPlus(file,volume=100,pitch=100)
  if FmodEx.bgm_sound!=nil
    FmodEx.set_unit(FmodEx::TIMEUNIT_PCM)
	position = FmodEx.bgm_sound.get_position
    #FmodEx.bgm_sound.pause(true) #If the BGM sound is the same, it just pause the BGM because the script doesn't create new instance when the music is the same
    bgm = FmodEx.bgm_play(file,volume,pitch)
    bgm.set_position(position % bgm.length)
  else
    bgm = FmodEx.bgm_play(file,volume,pitch)
  end
end
 
132
Posts
9
Years
I know this issue has been brought up and resolved over and over, but I'm still having problems with the RGSS104E.dll. I am getting the error "This isn't the RGSS104 library!" despite changing the FILE NAME in the root FROM "RGSS102E.dll" TO "RGSS104E.dll," and doing the same thing in game.ini

GHxAXQT.png


Highlighted in the image are the three files I've downloaded for FMOD, plus RGSS104E.dll. Do I have everything? Am I missing something?
Thank you.
 

MysteriousUser94

Guest
0
Posts
The RGSS Linker is able to detect if your RGSS DLL is the right one (because otherwise you would get a SEGFAULT).

There's one thing to know : RPG Maker XP has the bad habit to change your RGSS DLL in your Game Folder and that's a huge issue. If you use an illegal version of RPG Maker XP (if your DLL is RGSS100J or RGSS102E/J it's a illegal one) you'll have some issues. It's recommanded to use the steam version of RPG Maker or RPG Maker XP 1.03 (in French).

The only way to fix the problem with an illegal version of RPG Maker is to rewrite the "Game.exe" in order to load a RGSS DLL named an other way than in Game.ini. (I use this trick on Pokémon SDK because RPG Maker XP replace the RGSS3 dll with the RGSS1 one :v )

PS : The dll file you have to use is this one : http://www.mediafire.com/file/49t6lre8r93mir3/RGSS104E.dll You can rename it RGSS102E if you want.
 
Last edited:
132
Posts
9
Years
The only way to fix the problem with an illegal version of RPG Maker is to rewrite the "Game.exe" in order to load a RGSS DLL named an other way than in Game.ini. (I use this trick on Pokémon SDK because RPG Maker XP replace the RGSS3 dll with the RGSS1 one :v )
Thanks for the reply! But, how would I "rewrite" game.exe exactly? Also, why do you keep recommending we change RGSS104E back to 102E if fmod only works with 104? Is there a way to make fmod compatible with 102E?

Sorry for all the questions. I've realized game.ini resetting itself has been the problem this whole time, but getting a legal version is out of the question (long story).
 
Back
Top