func init() fvar(old) old = block.select(BLK_BODY) println(FMOD_PlaySound + ' = NULL;') block.select(old) lng.decl_priv_var(FMOD_PlaySound, 'FMOD_CHANNEL*') end func doPlaySound(_data) if(isndef(SoundStream)) fvar(chl) chl = FMOD_PlaySound lng.decl_loc_var(res, 'FMOD_RESULT') lng.decl_loc_var(fsys, 'FMOD_SYSTEM*') println('FMOD_Sound_GetSystemObject(' + lng.get_linked_obj('SoundStream') + ', &' + fsys + ');') println(res + ' = FMOD_System_PlaySound(' + fsys + ', ', (linked(Channel) or isndef(Channel)) ? ('(FMOD_CHANNELINDEX)' && Channel) : 'FMOD_CHANNEL_FREE', ', ', lng.get_linked_obj('SoundStream'), ', ' + isdef(Paused) ? 'FALSE' : 'TRUE' + ', &' + chl + ');') println('if(' + res + ' == FMOD_OK) {') block.inclvl() event(onPlaySound) block.declvl() if(linked(onError)) println('} else {') block.inclvl() event(onError, res@int ^ ('FMOD_ErrorString(' + res + ')')@str) block.declvl() end println('}') if(linked(onEndPlaySound)) // println('unsigned int ' + len + ';') // println('FMOD_SYNCPOINT *point;') // println('FMOD_Sound_GetLength(' + lng.get_linked_obj('SoundStream') + ', &' + len + ', FMOD_TIMEUNIT_MS);') // println('FMOD_Sound_AddSyncPoint(' + lng.get_linked_obj('SoundStream') + ', ' + len + '-2000, FMOD_TIMEUNIT_MS, "end_of_file", &point);') println('FMOD_Channel_SetUserData(' + chl + ', this);') println('FMOD_Channel_SetCallback(' + chl + ', FMOD_CHANNEL_CALLBACKTYPE_END, ' + _callback + ', 0);') fvar(old) old = block.select(BLK_MTD) println('FMOD_RESULT F_CALLBACK ' + _callback + '(FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACKTYPE type, int command, unsigned int commanddata1, unsigned int commanddata2 ) {') block.inclvl() println('void *udata;') println('FMOD_Channel_GetUserData(channel, &udata);') println('((' + CUR_CLASS + '*)udata)->' + onEndPlaySound + '();') println('return FMOD_OK;') block.declvl() println('}') block.select(old) lng.begin_func(onEndPlaySound + '()') event(onEndPlaySound) lng.end_func(BLK_PUB) end else error("Please set SoundStream property.") end end func doUpdate() lng.decl_loc_var(fsys, 'FMOD_SYSTEM*') println('FMOD_Sound_GetSystemObject(' + lng.get_linked_obj('SoundStream') + ', &' + fsys + ');') println('FMOD_System_Update(' + fsys + ');') end