Imposter Posted May 26, 2013 Share Posted May 26, 2013 So I have this piece of code, when the streamAudio event is triggered, the seek/sound position is sent to the client. but my problem is, it won't set. The wiki's documentation is also wrong, it says that the setSoundPostion() function uses milliseconds, but it actually uses seconds. Any help?? Client: nowPlaying = nil; function streamAudio(theUrl, theSeek) if (nowPlaying) then stopSound(nowPlaying); end nowPlaying = playSound(theUrl); if (theSeek) then setSoundPosition(nowPlaying, theSeek); end end addEvent("streamAudio", true); addEventHandler("streamAudio", getRootElement(), streamAudio); function endStream() if (nowPlaying) then stopSound(nowPlaying); end end addEvent("endStream", true); addEventHandler("endStream", getRootElement(), endStream); Link to comment
Castillo Posted May 26, 2013 Share Posted May 26, 2013 "theSeek" returns milliseconds or seconds? Link to comment
Imposter Posted May 26, 2013 Author Share Posted May 26, 2013 "theSeek" returns milliseconds or seconds? it returns seconds. Link to comment
Castillo Posted May 26, 2013 Share Posted May 26, 2013 So, just multiply 'theSeek' by 1000. Link to comment
Imposter Posted May 26, 2013 Author Share Posted May 26, 2013 I did that, but the music starts from 0. My Code: server.lua musicList = { }; theBaseUrl = "http://www.indigogames.net/tmhc/music/"; theStreamUrl = nil; theStreamPosition = 0; theStreamTimer = nil; function outputMessage(theMessage, theObject, theClass) if (theClass == nil) then outputChatBox("#00C3FF[TMHC]:#E0E0E0 " .. theMessage, theObject, 255, 255, 255, true); elseif (theObject == nil) then outputChatBox("#00C3FF[TMHC" .. theClass .. "]:#E0E0E0 " .. theMessage, getRootElement(), 255, 255, 255, true); else outputChatBox("#00C3FF[TMHC-" .. theClass .. "]:#E0E0E0 " .. theMessage, getRootElement(), 255, 255, 255, true); end end function onResourceStart() fetchRemote("http://www.indigogames.net/tmhc/music/index.php?mode=list", parseMusicData, "", false); end addEventHandler("onResourceStart", resourceRoot, onResourceStart); function onPlayerLogin() triggerClientEvent("streamAudio", getRootElement(), theStreamUrl, theStreamPosition); end addEventHandler("onPlayerLogin", getRootElement(), onPlayerLogin); function parseMusicData(responseData, errorNo) if (errorNo == 0) then if (string.len(responseData) > 0) then musicList = fromJSON(responseData); if (musicList == nil) then outputMessage("#FF0000A system error occurred while parsing the music list.", getRootElement(), "Radio"); return false; end else outputMessage("#FF0000A system error occurred while loading the music list.", getRootElement(), "Radio"); return false; end else outputMessage("#FF0000A system error occurred while fetching the music list.", getRootElement(), "Radio"); return false; end end function playRandomMusic(theTime) setTimer(function() local count = 0; local randomInteger = math.random(0, table.getn(musicList)); for theKey, theValue in pairs(musicList) do if ((count == randomInteger) == false) then count = count + 1; else beginStreaming(theValue); theStreamUrl = theBaseUrl .. theValue; theStreamPosition = 0; theStreamTimer = setTimer(function() theStreamPosition = theStreamPosition + 1 end, 1000, 0); return true; end end end, theTime, 1); end function beginStreaming(theFileName) for theKey, thePlayer in ipairs(getElementsByType("player")) do triggerClientEvent("streamAudio", thePlayer, theBaseUrl .. theFileName); end fetchRemote("http://www.indigogames.net/tmhc/music/index.php?mode=list", parseMusicData, "", false); -- Get new list fetchRemote("http://www.indigogames.net/tmhc/music/index.php?mode=info&filename=" .. theFileName, parseMusic, "", false); end function isPlayerAdmin(thePlayer) if ((thePlayer) and (isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(thePlayer)), aclGetGroup("Admin")))) then return true; else return false; end end function streamMusic(theSource, theCommand, theUrl) if ((isGuestAccount(getPlayerAccount(source)) == false) and (isPlayerAdmin(source) == true)) then -- FIx this if the server can do it! theStreamUrl = theBaseUrl .. theValue; theStreamPosition = 0; theStreamTimer = setTimer(function() theStreamPosition = theStreamPosition + 1 end, 1000, 0); for theKey, thePlayer in ipairs(getElementsByType("player")) do triggerClientEvent("streamAudio", thePlayer, theUrl); end outputMessage(getPlayerName(theSource) .. " is now streaming!", getRootElement(), "Radio"); end end addCommandHandler("stream", streamMusic); function endStreaming(theSource, theCommand) if ((isGuestAccount(getPlayerAccount(source)) == false) and (isPlayerAdmin(source) == true)) then for theKey, thePlayer in ipairs(getElementsByType("player")) do triggerClientEvent("endStream", thePlayer); end outputMessage(getPlayerName(theSource) .. "#FFFF00 has ended the radio stream!", getRootElement(), "Radio"); end end addCommandHandler("endStream", endStreaming); function refreshMusicList(theSource, theCommand) if ((isGuestAccount(getPlayerAccount(theSource)) == false) and (isPlayerAdmin(theSource) == true)) then outputMessage(getPlayerName(theSource) .. " is refreshing the music list!", getRootElement(), "Radio"); fetchRemote("http://www.indigogames.net/tmhc/music/index.php?mode=list", parseMusicData, "", false); end end addCommandHandler("refreshMusicList", refreshMusicList); function startStream(theSource, theCommand) if ((isGuestAccount(getPlayerAccount(theSource)) == false) and (isPlayerAdmin(theSource) == true)) then outputMessage(getPlayerName(theSource) .. " has started the radio stream!", getRootElement(), "Radio"); playRandomMusic(50); end end addCommandHandler("startStream", startStream); function parseMusic(responseData, errorNo) local musicData = fromJSON(responseData); if (musicData) then outputMessage("Now playing: " .. musicData["title"] .. " by " .. musicData["artist"] .. "!", getRootElement(), "Radio"); outputMessage("The next song will be played in " .. musicData["length_long"] .. "!", getRootElement(), "Radio"); playRandomMusic(tonumber(musicData["length"]) * 1000 + 3000); else playRandomMusic(tonumber(musicData["length"]) * 1000 + 3000); end end client.lua nowPlaying = nil; function streamAudio(theUrl, theSeek) if (nowPlaying) then stopSound(nowPlaying); end nowPlaying = playSound(theUrl); if (theSeek) then setSoundPosition(nowPlaying, theSeek * 1000); end end addEvent("streamAudio", true); addEventHandler("streamAudio", getRootElement(), streamAudio); function endStream() if (nowPlaying) then stopSound(nowPlaying); end end addEvent("endStream", true); addEventHandler("endStream", getRootElement(), endStream); Link to comment
Castillo Posted May 26, 2013 Share Posted May 26, 2013 Maybe it doesn't work with streamed sounds. Link to comment
Imposter Posted May 26, 2013 Author Share Posted May 26, 2013 Well it works when I use the example(command), and that works in seconds, not milliseconds. I tried it with a timer too to see if it needed a delay, but that doesn't work either. Link to comment
Imposter Posted May 26, 2013 Author Share Posted May 26, 2013 Help anyone? This works, but not in the streamAudio Event: function setSongPos(cmd, seconds) local ssp = setSoundPosition(nowPlaying, seconds) if ssp then outputChatBox("Sound is now playing from: "..seconds.." Seconds!") else outputChatBox("An error has occured. Please make shore there are atleast") outputChatBox(seconds.." Seconds in this song!") end end addCommandHandler("seek", setSongPos) Link to comment
Jaysds1 Posted May 26, 2013 Share Posted May 26, 2013 You can't set streamed audio to a certain position, as they are being streamed live and is not being recorded. Link to comment
Imposter Posted May 26, 2013 Author Share Posted May 26, 2013 You can't set streamed audio to a certain position, as they are being streamed live and is not being recorded. It works when I do it with the command though. EDIT: Whatever, got it working with: thePosition = 0; function updatePosition(theSeek) thePosition = theSeek; end addEvent("updateStreamPosition", true); addEventHandler("updateStreamPosition", getRootElement(), updatePosition); function resume() if (nowPlaying) then outputMessage("Resuming!", "Radio"); setSoundPosition(nowPlaying, thePosition); end end addCommandHandler("resume", resume); Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now